"VibeCoding"
요즘 핫하게 떠오르는 키워드가 있습니다. "바이브 코딩".
https://en.wikipedia.org/wiki/Vibe_coding
Vibe coding - Wikipedia
From Wikipedia, the free encyclopedia Computer programming technique ChatGPT being asked to "Write a Javascript function to shuffle a deck of cards." Vibe coding (also vibecoding) is an AI-dependent programming technique where a person describes a problem
en.wikipedia.org
위키피디아 정의에 따르면영어: Vibe 코딩 (또는 vibecoding)은 AI 에 의존하는 프로그래밍 기술로, 사람이 코딩에 맞춰 조정된 대규모 언어 모델(LLM) 에 대한 프롬프트 로 몇 문장으로 문제를 설명합니다 . LLM은 소프트웨어를 생성하여 프로그래머의 역할을 수동 코딩에서 AI가 생성한 소스 코드를 안내, 테스트 및 개선하는 것으로 전환합니다 . [ 1 ] [ 2 ] [ 3 ] Vibe 코딩의 옹호자들은 아마추어 프로그래머 도 소프트웨어 엔지니어링 에 필요한 광범위한 교육과 기술 없이 소프트웨어를 제작할 수 있도록 한다고 주장합니다 . [ 4 ] 이 용어는 2025년 2월 Andrej Karpathy 가 도입했으며 [ 5 ] [ 2 ] [ 4 ] [ 1 ] 다음 달 Merriam-Webster 사전 에 "속어 및 트렌드" 명사로 등재되었습니다 . [ 6 ]
AI에 의존해서 자연어 기반으로 프로젝트를 진행하는 코딩 기법을 의미합니다. 저도 궁금해서 아래 위키를 보면서 공부해봤습니다.
https://wikidocs.net/book/17562
바이브 코딩(Vibe Coding): FPS 게임 제작기
### AI와 함께하는 게임 개발 여정 인공지능을 활용해 혼자서 게임을 만들 수 있을까? 이 책은 LLM 챗봇의 코드 생성 능력을 활용해 웹 기반 3D FPS 게임을 개발하…
wikidocs.net
약간의 프롬프트만으로 게임의 골자가 잡히며 부족한 기능 혹은 버그는 AI에게 요청해 지속적으로 고쳐나갑니다. GPT3가 나왔던 시절만 해도 상상도 할 수 없었던 코딩 방식이었고 그저 AI에게 도움을 받는 정도였는데, 이젠 AI가 코딩을 주도하고 사람이 도움을 주는 방식이 되어버렸습니다.
그렇다면 Vibe Coding은 어떻게 하는걸까요?
저는 Claude Sonnet 3.7 모델과 GitHub 연동 기능을 활용해 Vibe Coding을 해봤습니다.
프로젝트 만들기
프로젝트 생성
Claude Pro 요금제를 이미 사용하고 있다는 가정 하에 진행합니다. 먼저 프로젝트를 생성합니다. 저는 아래와 같이 바이브 챗봇 프로젝트를 생성했습니다.
GitHub 추가
우측 위의 + 버튼을 누르고 GitHub 버튼을 누릅니다.
아래와 같이 깃헙 파일들을 모델 컨텍스트에 추가해 지식으로 활용할 수 있습니다. 이를 통해서 기존 코드를 참고해 코딩을 진행하는게 가능해집니다. 저는 이미 조금 진행을 한 상태라 코드가 있지만 아닌 분들은 코드가 없을테니 패스합니다. 레포지토리는 이미 생성되었다 가정합니다.
지식을 추가하면 깃헙 레포지토리가 지식 창에 뜹니다.
바이브 코딩을 해보자
바이브 코딩의 서술
바이브 코딩은 주로 question(prompt)와 answer(LLM)로 진행됩니다. 예를 들면 아래와 같습니다. 저는 question과 answer 부분은 생략하겠습니다. AI의 답변을 모두 자세하게 들여볼 필요는 없습니다. 버그 수정도, 디버그도 모두 AI가 할거니까요.
question
나는 토이프로젝트를 만들고 있어 간단하게 기획해줘
answer
토이프로젝트 골자는 아래와 같습니다.
|-main.py
|--...
바이브 코딩 시작하기
먼저 프로젝트 골자를 잡습니다. 제가 사용할 라이브러리와 챗봇 플랫폼을 적어서 어떤 프로젝트를 진행할건지 알려줍니다.
나는 랭체인과 랭서브를 활용해서 챗봇을 만들고 싶어 챗봇은 카카오톡 챗봇과 연동할거야
안녕하세요! 랭체인(LangChain)과 랭서브(LangServe)를 활용하여 카카오톡과 연동되는 챗봇을 만드는 프로젝트를 도와드리겠습니다. 기본적인 구현 방법과 필요한 단계들을 안내해 드리겠습니다.
카카오톡 챗봇 + LangChain + LangServe 구현 방법
먼저 필요한 기술 스택을 살펴보겠습니다:
LangChain: 대형 언어 모델(LLM)을 애플리케이션에 통합하기 위한 프레임워크 LangServe: LangChain 기반 애플리케이션을 API로 배포하기 위한 도구 카카오톡 챗봇 API: 카카오톡 플랫폼과 연동하기 위한 인터페이스
1. 기본 환경 설정
Python 환경을 설정하고 필요한 패키지를 설치합니다:
pythonpip install langchain langserve fastapi uvicorn requests
2. LangChain으로 챗봇 로직 구현
pythonfrom langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemory from langchain_openai import ChatOpenAI # LLM 설정 (OpenAI 예시) llm = ChatOpenAI( model_name="gpt-3.5-turbo", temperature=0.7, openai_api_key="your-api-key" ) # 대화 메모리 설정 memory = ConversationBufferMemory(return_messages=True) # 대화 체인 생성 conversation = ConversationChain( llm=llm, memory=memory, verbose=True )
3. LangServe로 API 배포
pythonfrom fastapi import FastAPI, Request from langserve import add_routes import uvicorn app = FastAPI(title="카카오톡 챗봇 API") # LangChain 체인을 API로 노출 add_routes( app, conversation, path="/chat" ) # 카카오톡 스킬 엔드포인트 @app.post("/kakao/skill") async def kakao_skill(request: Request): data = await request.json() user_utterance = data["userRequest"]["utterance"] # LangChain 체인으로 응답 생성 response = conversation.invoke({"input": user_utterance}) # 카카오톡 응답 형식으로 변환 kakao_response = { "version": "2.0", "template": { "outputs": [ { "simpleText": { "text": response["response"] } } ] } } return kakao_response if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)
4. 카카오톡 챗봇 설정
카카오 i 오픈빌더에서 계정 생성 및 로그인 새 봇 생성 및 기본 설정 스킬 설정에서 웹훅 URL 연결 (예: https://your-server.com/kakao/skill) 배포 및 테스트
고려사항 및 발전 방향
서버 배포: AWS, GCP, Heroku 등을 통해 API 서버 배포 보안: HTTPS 프로토콜 적용, API 키 관리, 환경변수 사용 메모리 관리: 대화 이력 저장을 위한 데이터베이스 연동 (예: MongoDB, Redis) 다양한 응답 타입: 카카오톡의 다양한 응답 템플릿 활용 (이미지, 카드, 리스트 등)
더 세부적인 구현이나 특정 기능에 대해 알고 싶으시다면 말씀해 주세요!
전체적인 기술스택 개요를 먼저 알려줍니다.
이걸로만 코딩할 순 없으니 프로젝트를 기획해달라고 합니다. 저는 고객센터 상담 챗봇 설계 기획을 시켰습니다.
PO와 PM역할을 해야 돼 나는 고객센터 상담 챗봇을 만들거야 각 종 시나리오를 생각해서 챗봇 API를 설계해줘
고객센터 상담 챗봇 API 설계 및 시나리오
고객센터 상담 챗봇을 위한 API를 설계해 드리겠습니다. PO와 PM 관점에서 필요한 시나리오와 기능을 포함했습니다.
1. 핵심 시나리오
1.1 기본 상담 시나리오
초기 인사: 사용자 접속 시 첫 인사와 도울 수 있는 카테고리 안내 FAQ 응답: 자주 묻는 질문에 대한 즉각적인 응답 상담사 연결: 복잡한 문의 시 인간 상담사로 전환 문의 접수: 추가 조사가 필요한 문의 티켓 생성 상담 종료: 문제 해결 확인 및 추가 문의 여부 확인
1.2 제품/서비스별 시나리오
주문/배송 관련: 주문 상태 확인, 배송 추적, 반품/교환 절차 결제 관련: 결제 내역 확인, 환불 처리, 결제 방법 변경 계정 관리: 비밀번호 변경, 개인정보 수정, 회원탈퇴 기술 지원: 제품 사용법, 오류 해결, 기능 안내 불만 처리: 불만 접수, 피드백 처리
1.3 특수 시나리오
긴급 상황 대응: 보안 침해, 서비스 장애 등 긴급 상황 처리 VIP 고객 대응: 우선 처리 및 특별 서비스 제공 다국어 지원: 주요 언어별 대응
2. API 설계
2.1 기본 엔드포인트
POST /api/v1/chat
요청 본문 (Request Body):
json{ "session_id": "unique-session-id", "user_id": "user123", "message": "배송이 언제 도착하나요?", "context": { "platform": "kakao", "previous_intents": ["greeting", "order_inquiry"], "user_info": { "name": "홍길동", "membership_level": "standard", "language": "ko" } } }
응답 (Response):
json{ "message_id": "msg123456", "response_type": "text", "content": "안녕하세요 홍길동님, 주문하신 상품의 배송 상태를 확인해드리겠습니다. 주문번호를 알려주시겠어요?", "intents": ["order_tracking"], "confidence": 0.92, "suggested_replies": [ "최근 주문 조회하기", "다른 문의하기", "상담사 연결" ], "actions": [ { "type": "button", "label": "주문내역 확인", "value": "check_recent_orders" } ], "session_data": { "conversation_state": "awaiting_order_number" } }
2.2 추가 엔드포인트
대화 세션 관리
POST /api/v1/sessions/start GET /api/v1/sessions/{session_id} PUT /api/v1/sessions/{session_id}/end
상담사 연결
POST /api/v1/sessions/{session_id}/transfer
피드백 수집
POST /api/v1/sessions/{session_id}/feedback
사용자 인증
POST /api/v1/auth/verify
주문/제품 정보 조회
GET /api/v1/orders/{order_id} GET /api/v1/products/{product_id}/faq
3. 주요 인텐트(Intent) 및 엔티티(Entity)
3.1 상위 인텐트
greeting: 인사 order_inquiry: 주문 관련 문의 shipping_inquiry: 배송 관련 문의 payment_inquiry: 결제 관련 문의 product_inquiry: 제품 관련 문의 account_management: 계정 관련 문의 complaint: 불만 접수 technical_support: 기술 지원 human_agent: 상담사 연결 요청 farewell: 대화 종료
3.2 주요 엔티티
order_number: 주문번호 product_name: 제품명 tracking_number: 운송장번호 date: 날짜 price: 가격 payment_method: 결제수단 issue_type: 문제 유형 user_emotion: 감정 상태
4. 통합 시나리오 예시
4.1 주문 조회 및 배송 문의
사용자: 제가 주문한 물건이 언제 도착하나요?
시스템:
order_inquiry 및 shipping_inquiry 인텐트 식별 사용자 주문 내역 확인 필요 판단 주문번호 요청 또는 최근 주문 조회 버튼 제공
챗봇: "최근 주문하신 내역을 확인해 드릴게요. 주문번호를 알고 계신가요? 아니면 최근 주문을 조회해 드릴까요?"
사용자: 최근 주문 조회해주세요
시스템:
사용자 API를 통해 최근 주문 조회 배송 추적 API 연동하여 배송 상태 확인 정보 포맷팅 및 응답 생성
챗봇: "홍길동님의 최근 주문은 ABC123 상품으로, 현재 '배송중' 상태입니다. 예상 도착일은 4월 15일입니다. 배송 현황을 실시간으로 확인하시겠어요?"
4.2 결제 오류 및 환불 처리
사용자: 결제했는데 오류가 발생했어요. 카드는 결제됐는데 주문 내역이 없어요.
시스템:
payment_inquiry 인텐트와 issue_type: payment_error 엔티티 식별 문제 심각도 평가 결제 검증 프로세스 시작
챗봇: "불편을 드려 죄송합니다. 정확한 확인을 위해 결제하신 카드 정보 마지막 4자리와 결제 일시를 알려주시겠어요?"
사용자: 1234, 오늘 오후 2시요
시스템:
결제 시스템 API 호출하여 거래 내역 확인 오류 유형 분류 및 해결책 제시 필요시 환불 프로세스 안내
챗봇: "확인해보니 결제는 정상적으로 이루어졌으나 주문 등록 과정에서 오류가 발생했네요. 바로 환불 처리를 진행해드릴까요, 아니면 주문을 다시 등록해드릴까요?"
5. 성능 지표(KPI) 모니터링 API
GET /api/v1/analytics/performance
모니터링할 주요 지표:
문제 해결률 (Resolution Rate) 첫 응답 해결률 (First Contact Resolution) 상담사 전환율 (Human Handoff Rate) 평균 대화 시간 (Average Conversation Duration) 사용자 만족도 (CSAT) 인텐트 인식 정확도 (Intent Recognition Accuracy)
6. 확장 가능성
맞춤형 추천 엔진: 고객 문의 이력 기반 제품/서비스 추천 감정 분석: 고객 감정 상태에 따른 대응 조정 음성 인터페이스: 음성 인식 및 합성 통합 옴니채널 지원: 카카오톡 외 다양한 채널 통합 (웹, 모바일 앱, 전화 등) 실시간 대시보드: 관리자용 실시간 모니터링 도구
이 설계를 기반으로 개발팀과 협업하여 구체적인 구현 방향을 정하고, 사용자 피드백을 통해 지속적으로 개선해 나가는 것이 좋겠습니다. 추가적인 시나리오나 특정 영역에 대한 상세 설계가 필요하시면 말씀해 주세요.
각 시나리오와 API 설계, 인텐트 또한 알려주는걸 볼 수 있습니다. 시나리오에 대한 커스터마이징은 나중에 필요하면 하도록 합시다.
conda에서 진행하기 위해 환경을 만들어달라 했습니다. 하지만 라이브러리를 보니 venv를 쓰면 충분해서 저는 venv를 사용했습니다. 아래엔 기록만 남깁니다.
위 main.py를 실행하기 위한 conda 환경도 만들어줘
랭체인과 랭서브를 활용한 고객센터 상담 챗봇을 위한 Conda 환경을 만드는 방법을 알려드리겠습니다. 다음은 필요한 환경 설정 과정입니다:
Conda 환경 설정 방법
1. Conda 환경 생성
bash# Conda 환경 생성 (Python 3.9 기반) conda create -n kakao_chatbot_env python=3.9
2. 환경 활성화
bash# 환경 활성화 conda activate kakao_chatbot_env
3. 필요한 패키지 설치
bash# 기본 패키지 설치 conda install -c conda-forge pip pip install langchain langchain-openai langserve fastapi uvicorn pydantic requests python-dotenv # 추가 유용한 패키지 pip install pytest pytest-asyncio pip install pymongo redis # 필요시 데이터베이스 연결용
4. 환경 설정 파일 생성 (environment.yml)
환경 설정을 공유하기 위한 YAML 파일을 생성할 수 있습니다:
bash# 현재 환경 설정 저장 conda env export > environment.yml
5. .env 파일 생성
API 키 등의 환경 변수를 관리하기 위한 .env 파일을 생성합니다:
# .env 파일 내용 OPENAI_API_KEY=your-api-key-here KAKAO_API_KEY=your-kakao-api-key
6. 프로젝트 구조 설정
프로젝트를 더 체계적으로 구성하고 싶다면 다음과 같은 구조를 추천합니다:
kakao_chatbot/ ├── .env # 환경 변수 ├── environment.yml # Conda 환경 설정 ├── main.py # 메인 애플리케이션 ├── config.py # 설정 파일 ├── requirements.txt # pip 의존성 목록 ├── README.md # 프로젝트 설명 ├── tests/ # 테스트 코드 │ ├── __init__.py │ └── test_api.py └── src/ # 소스 코드 ├── __init__.py ├── chains/ # LangChain 관련 코드 │ ├── __init__.py │ └── conversation.py ├── api/ # API 관련 코드 │ ├── __init__.py │ └── routes.py └── utils/ # 유틸리티 함수 ├── __init__.py └── helpers.py
7. 실행 방법
환경 설정 후 다음과 같이 애플리케이션을 실행할 수 있습니다:
bash# 환경 활성화 conda activate kakao_chatbot_env # 애플리케이션 실행 python main.py
또는 uvicorn을 직접 사용:
bashuvicorn main:app --reload --host 0.0.0.0 --port 8000
8. 배포 시 고려사항
프로덕션 배포: Gunicorn 등의 WSGI 서버와 함께 사용 bashpip install gunicorn gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app 컨테이너화: Docker를 사용하여 배포할 경우 bash# Dockerfile 생성 pip install docker-compose
이 설정으로 LangChain과 LangServe를 활용한 고객센터 상담 챗봇을 개발하기 위한 기본 환경이 준비됩니다. 필요에 따라 추가 패키지를 설치하거나 환경을 조정할 수 있습니다.
conda로 진행해도 문제는 없지만 인터프리터 설정이나 디펜던시 설치가 번거로운 경우가 있으므로 venv로 넘어갔습니다.
venv로 해도 되지? 파이썬 3.9.7로 만들어줘
네, 물론 venv로도 만들 수 있습니다! Python 3.9.7을 사용하는 venv 환경을 설정하는 방법을 알려드리겠습니다.
Python 3.9.7 venv 환경 설정 방법
1. Python 3.9.7 설치 확인
먼저 Python 3.9.7이 설치되어 있는지 확인합니다:
bashpython --version # 또는 python3 --version
설치되어 있지 않다면 Python 공식 사이트나 pyenv 등을 통해 설치하세요.
2. 가상환경 생성
bash# 프로젝트 디렉토리로 이동 mkdir kakao_chatbot cd kakao_chatbot # venv 환경 생성 python3.9 -m venv venv
3. 가상환경 활성화
Windows:
bashvenv\Scripts\activate
macOS/Linux:
bashsource venv/bin/activate
4. 필요한 패키지 설치
bash# pip 업그레이드 pip install --upgrade pip # 필요한 패키지 설치 pip install langchain langchain-openai langserve fastapi uvicorn pydantic requests python-dotenv
5. requirements.txt 생성
bashpip freeze > requirements.txt
6. .env 파일 생성
bash# .env 파일 생성 touch .env # .env 파일에 필요한 환경 변수 추가 echo "OPENAI_API_KEY=your-api-key-here" >> .env echo "KAKAO_API_KEY=your-kakao-api-key" >> .env
7. 프로젝트 파일 구조 설정
위에서 제안한 것과 동일한 파일 구조를 생성합니다.
8. 실행 방법
bash# 가상환경 활성화 상태에서 python main.py # 또는 uvicorn으로 직접 실행 uvicorn main:app --reload --host 0.0.0.0 --port 8000
9. 가상환경 종료
작업이 끝난 후 가상환경을 종료하려면:
bashdeactivate
venv는 Conda와 달리 Python 패키지만 관리하지만, 가볍고 Python 표준 라이브러리에 포함되어 있어 추가 설치 없이 사용할 수 있다는 장점이 있습니다. 개발 환경이나 프로젝트 요구사항에 따라 venv와 Conda 중 적합한 것을 선택하시면 됩니다.
.gitignore도 알차게 만들어줍니다. 그리고 사전에 생성한 기획을 바탕으로 프로젝트 초안을 만듭니다.
git에 환경변수가 올라가면 안되니까 .gitignore도 만들어줘 그리고 위 기획을 참고해서 프로젝트를 적절하게 만들어줘
고객센터 상담 챗봇 프로젝트를 위한 적절한 구조와 gitignore 파일을 만들어 드리겠습니다. .gitignore 파일 # Python __pycache__/ *.py[cod] *$py.class *.so .Python venv/ ENV/ env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # 환경 변수 파일 .env .env.* # IDE 설정 .idea/ .vscode/ *.swp *.swo .DS_Store # 로그 파일 *.log logs/ # 캐시 파일 .cache/ .pytest_cache/ # 데이터베이스 *.db *.sqlite3 # 기타 .coverage htmlcov/ 이제 전체 프로젝트 구조를 만들어 보겠습니다.고객센터 상담 챗봇 프로젝트 구조코드 # 고객센터 상담 챗봇 프로젝트 구조 ``` kakao_chatbot/ ├── .env # 환경 변수 파일 (gitignore에 포함됨) ├── .gitignore # 위에서 생성한 .gitignore 파일 ├── README.md # 프로젝트 설명 ├── requirements.txt # 의존성 목록 ├── main.py 이제 위 구조에 맞게 주요 파일들의 기본 코드를 작성해 드리겠습니다.main.py코드 """ 고객센터 상담 챗봇 애플리케이션의 메인 진입점 """ import os import logging from fastapi import FastAPI from dotenv import load_dotenv from app.api.router import router as api_router from app.utils.logger import setup_logger # 환경 변수 로드 load_dotenv() # 로거 설정 loggerconfig.py코드 """ 애플리케이션 설정 파일 """ import os from pydantic import BaseSettings from dotenv import load_dotenv # 환경 변수 로드 load_dotenv() class Settings(BaseSettings): """애플리케이션 설정""" # 기본 설정 APP_NAME: str = "고객센터 상담 챗봇" DEBUG: bool = os.getenv("DEBapp/api/router.py코드 """ API 라우터 설정 """ from fastapi import APIRouter, Depends, HTTPException, status, Request import logging from langserve import add_routes from pydantic import BaseModel from typing import Dict, List, Optional, Any from app.chains.conversation importapp/api/models.py코드 """ API 요청 및 응답 모델 정의 """ from pydantic import BaseModel, Field from typing import Dict, List, Optional, Any from datetime import datetime class Action(BaseModel): """UI 작업 액션""" type: str label: str value: Any class ChatRequest(Bapp/chains/conversation.py코드 """ 대화 처리를 위한 LangChain 체인 구현 """ import os from typing import Dict, Any, List from langchain.chains import ConversationChain, LLMChain from langchain.memory import ConversationBufferMemory from langchain_openai import ChatOpenAI from langchain.prompapp/intents/classifier.py코드 """ 사용자 의도(intent) 분류 모듈 """ import re from typing import Dict, Any, List, Tuple from langchain_openai import ChatOpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from app.config import settings from app.util재시도Claude가 메시지 길이 제한에 도달하여 응답을 일시 중지했습니다. '계속하기'를 입력하시면 대화를 이어갈 수 있습니다.
S계속편집
app/intents/classifier.py코드 ∙ 버전 2 """ 사용자 의도(intent) 분류 모듈 """ import re from typing import Dict, Any, List, Tuple from langchain_openai import ChatOpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from app.config import settings from app.utilapp/intents/entities.py코드 """ 엔티티(entity) 추출 모듈 """ import re from typing import Dict, Any, List, Optional from datetime import datetime, timedelta import json from app.utils.logger import get_logger from langchain_openai import ChatOpenAI from langchain.chains import LLMChaapp/services/user.py코드 """ 사용자 정보 관련 서비스 """ from typing import Dict, Any, Optional import json import os from datetime import datetime from app.utils.logger import get_logger logger = get_logger(__name__) # 임시 사용자 데이터 (실제로는 데이터베이스 사용) TEMP_USER_DATA = { "user123": 재시도Claude가 메시지 길이 제한에 도달하여 응답을 일시 중지했습니다. '계속하기'를 입력하시면 대화를 이어갈 수 있습니다.
S계속편집
app/services/user.py코드 ∙ 버전 2 """ 사용자 정보 관련 서비스 """ from typing import Dict, Any, Optional, List import json import os from datetime import datetime from app.utils.logger import get_logger logger = get_logger(__name__) # 임시 사용자 데이터 (실제로는 데이터베이스 사용) TEMP_USER_DATA = { "userapp/utils/logger.py코드 """ 로깅 유틸리티 모듈 """ import logging import os import sys from typing import Optional from datetime import datetime # 로그 레벨 설정 LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" LOG_DIapp/services/analytics.py코드 """ 대화 분석 및 성능 지표 서비스 """ from typing import Dict, Any, List, Optional from datetime import datetime, timedelta import json import os from app.utils.logger import get_logger from app.api.models import ChatRequest, ChatResponse logger = get_logger(_run.py코드 """ 애플리케이션 실행 스크립트 """ import uvicorn import os from dotenv import load_dotenv # 환경 변수 로드 load_dotenv() if __name__ == "__main__": # 환경 변수에서 포트 가져오기 (기본값: 8000) port = int(os.getenv("PORT", "8000")) # 개발 환경 여부 debug = os.getenvREADME.md코드
콘텍스트가 부족해 응답이 중지되면 계속을 입력합니다.
계속
README.md코드 ∙ 버전 2 # 고객센터 상담 챗봇 LangChain과 LangServe를 활용한 카카오톡 고객센터 상담 챗봇 프로젝트입니다. ## 프로젝트 개요 이 프로젝트는 대형 언어 모델(LLM)을 활용하여 고객센터 문의에 자동으로 응답하는 챗봇 API를 구현합니다. 카카오톡 챗봇 플랫폼과 연동하여 사용자들에게 쉽게 접근 가능한 고객 지원 서비스를 제공합니다. ### 주요 기능 - 사용자 메시지 인텐트 분류 및 엔티티 추출 - 주문/배송/결제 관련 문의 처리
requirements.txt코드 fastapi==0.110.0 uvicorn==0.28.0 langchain==0.1.9 langchain-openai==0.0.7 langserve==0.0.42 pydantic==2.6.3 python-dotenv==1.0.1 requests==2.31.0 pytest==7.4.3 pytest-asyncio==0.21.1 pymongo==4.6.1 redis==5.0.1
.env.example코드 # API 키 OPENAI_API_KEY=your-openai-api-key KAKAO_API_KEY=your-kakao-api-key # 애플리케이션 설정 DEBUG=False PORT=8000 HOST=0.0.0.0 LOG_LEVEL=INFO # LLM 설정 LLM_MODEL=gpt-3.5-turbo LLM_TEMPERATURE=0.7 # 데이터베이스 설정 DATABASE_URL=sqlite:///./chatbot.db # 보안 설정
docs/setup.md코드 # 고객센터 상담 챗봇 개발 가이드 이 문서는 고객센터 상담 챗봇 프로젝트의 설정 및 개발 가이드를 제공합니다. ## 1. 개발 환경 구성 ### Python 및 가상환경 설정 Python 3.9.7을 사용하여 개발합니다. 가상환경을 사용하여 의존성을 관리합니다. ```bash # Python 버전 확인 python --version # 3.9.7 # 가상환경 생성 python -m venv venv # 가상환경 활성화 # Win
개발에 필요한 기본 파일들을 모두 생성했습니다. 이제 고객센터 상담 챗봇 프로젝트의 핵심 구조와 파일이 준비되었습니다. 프로젝트의 주요 내용을 요약해 드리겠습니다:프로젝트 구성 요약기본 구조랭체인(LangChain)과 랭서브(LangServe)를 활용한 Python 3.9.7 기반 프로젝트venv 가상환경으로 의존성 관리FastAPI 기반 웹 서버 구현핵심 기능인텐트 분류: 규칙 기반 및 LLM 기반 분류기엔티티 추출: 정규식 및 LLM 기반 엔티티 인식대화 관리: LangChain의 대화 체인 활용카카오톡 연동: 카카오톡 스킬 서버 API 구현주요 시나리오주문/배송 조회결제 문의 처리계정 관리상담사 연결불만 처리성능 지표문제 해결률첫 응답 해결률상담사 전환율평균 대화 시간사용자 만족도실행 방법가상환경 설정 및 활성화bashpython3.9 -m venv venv source venv/bin/activate # Linux/macOS # 또는 venv\Scripts\activate # Windows의존성 설치bashpip install -r requirements.txt환경 변수 설정bashcp .env.example .env # .env 파일 편집하여 API 키 등 설정서버 실행bashpython run.py확장 가능성데이터베이스 연동: 현재는 메모리 내 임시 데이터 사용, 실제 DB로 전환 가능추가 인텐트: 비즈니스 요구사항에 맞게 인텐트 및 처리 로직 확장분석 대시보드: 수집된 성능 지표 데이터로 대시보드 구현 가능다국어 지원: 추가 언어 모델 통합 가능이 프로젝트는 고객센터 상담 챗봇의 기본 구조를 제공하며, 실제 비즈니스 요구사항에 맞게 확장 가능합니다. 추가적인 기능이나 변경사항이 필요하시면 말씀해 주세요.
이제 프로젝트 초안이 만들어졌습니다. 만들어진 각 파일은 프로젝트 구조에 맞게 레포에 파일을 생성하고 붙여넣기합니다.
디펜던시를 설치하던 중 오류가 발생했습니다. 아래에선 오류가 발생했다고 말해주고 있지만 요즘엔 그냥 오류만 복붙해도 답이 잘나옵니다.
requirements 설치하는 도중 아래와 같은 오류가 발생했어 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. langchain-text-splitters 0.3.8 requires langchain-core<1.0.0,>=0.3.51, but you have langchain-core 0.1.53 which is incompatible.
이 오류는 패키지 의존성 충돌로 인해 발생한 것입니다. langchain-text-splitters 패키지가 langchain-core 0.3.51 이상 버전을 필요로 하는데, 현재 설치된 langchain-core가 0.1.53 버전이라 호환되지 않는 상황입니다. 이 문제를 해결하기 위한 방법은 다음과 같습니다: 해결 방법 1: 의존성 버전 업데이트 requirements.txt 파일을 수정하여 호환되는 버전을 명시합니다: fastapi==0.110.0 uvicorn==0.28.0 langchain==0.1.9 langchain-openai==0.0.7 langchain-core>=0.3.51 langserve==0.0.42 pydantic==2.6.3 python-dotenv==1.0.1 requests==2.31.0 pytest==7.4.3 pytest-asyncio==0.21.1 pymongo==4.6.1 redis==5.0.1 langchain-core의 버전을 0.3.51 이상으로 명시했습니다. 해결 방법 2: 의존성 충돌 무시 및 별도 설치 먼저 기존 패키지를 설치합니다: bashpip install -r requirements.txt --ignore-installed 그 다음 langchain-core를 업데이트합니다: bashpip install --upgrade langchain-core>=0.3.51 해결 방법 3: 가상환경 재설정 의존성 충돌이 복잡한 경우, 가상환경을 새로 만드는 것이 깨끗한 해결책이 될 수 있습니다: bash# 기존 가상환경 비활성화 deactivate # 기존 가상환경 삭제 rm -rf venv # Linux/macOS # 또는 rmdir /s /q venv # Windows # 새 가상환경 생성 python3.9 -m venv venv # 가상환경 활성화 source venv/bin/activate # Linux/macOS # 또는 venv\Scripts\activate # Windows # 의존성 설치 (수정된 requirements.txt 사용) pip install -r requirements.txt 추가 고려사항 LangChain 생태계는 빠르게 발전하고 있어 패키지 간 의존성 관리가 중요합니다. 프로젝트 진행 시: 패키지 버전을 명시적으로 고정하는 것이 좋습니다. 호환성 문제가 발생할 경우, 공식 문서나 GitHub 이슈를 확인하는 것이 도움이 됩니다. 의존성 관리 도구인 pip-tools나 Poetry 사용을 고려해 볼 수 있습니다. 이 중에서 해결 방법 1(requirements.txt 수정)이 가장 안정적인 해결책입니다. 호환되는 버전을 명시적으로 지정하여 동일한 의존성 환경을 보장할 수 있습니다.재시도
S
다시 오류가 발생합니다.
아래와 같은 오류 발생 ERROR: Cannot install langchain-core>=0.3.51 and langchain==0.1.9 because these package versions have conflicting dependencies. The conflict is caused by: The user requested langchain-core>=0.3.51 langchain 0.1.9 depends on langchain-core<0.2 and >=0.1.26 To fix this you could try to: 1. loosen the range of package versions you've specified 2. remove package versions to allow pip to attempt to solve the dependency conflict ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
편집
좀 더 복잡한 의존성 충돌이 발생했네요. langchain 패키지는 langchain-core<0.2 and >=0.1.26 버전을 필요로 하는데, langchain-text-splitters는 langchain-core>=0.3.51을 필요로 합니다. 이 두 요구사항이 충돌하고 있습니다.
이런 경우 해결 방법은 다음과 같습니다:
해결 방법 1: LangChain 버전 업그레이드
LangChain 버전을 업그레이드하여 최신 langchain-core와 호환되게 만듭니다. 다음과 같이 requirements.txt를 수정해보세요:
fastapi==0.110.0 uvicorn==0.28.0 langchain>=0.2.0 # 버전 업그레이드 langchain-openai>=0.1.0 # 호환 버전 업그레이드 langserve==0.0.42 pydantic==2.6.3 python-dotenv==1.0.1 requests==2.31.0 pytest==7.4.3 pytest-asyncio==0.21.1 pymongo==4.6.1 redis==5.0.1
해결 방법 2: 직접 패키지 설치
requirements.txt에 의존성 버전을 명시하지 않고 직접 설치하는 방식입니다:
bash# 기본 패키지 설치 pip install fastapi==0.110.0 uvicorn==0.28.0 pydantic==2.6.3 python-dotenv==1.0.1 requests==2.31.0 # LangChain 관련 패키지 설치 (최신 버전) pip install langchain langchain-openai langserve # 테스트 및 데이터베이스 패키지 설치 pip install pytest pytest-asyncio pymongo redis
해결 방법 3: 격리된 환경에서 필요한 패키지만 설치
프로젝트에 실제 필요한 기능들만 골라서 설치합니다:
가상환경 초기화:
bashdeactivate rm -rf venv # Linux/macOS 또는 rmdir /s /q venv (Windows) python3.9 -m venv venv source venv/bin/activate # Linux/macOS 또는 venv\Scripts\activate (Windows)
필수 패키지 설치:
bashpip install fastapi uvicorn python-dotenv requests pip install openai langchain-openai langserve
기능 구현 시 필요한 패키지를 그때그때 추가 설치:
bashpip install pymongo # 필요한 경우에만
추천하는 방법
이런 상황에서는 해결 방법 3을 추천합니다. 필요한 패키지만 설치하고, 프로젝트를 진행하면서 추가 패키지가 필요할 때 설치하는 방식입니다. 이렇게 하면 불필요한 의존성 충돌을 피할 수 있습니다.
의존성 관리 개선 제안
Poetry 사용 고려: Python 패키지 의존성 관리에 Poetry를 사용하면 의존성 충돌을 더 효과적으로 관리할 수 있습니다. 명시적 버전 지정: 모든 패키지의 버전을 명시적으로 지정하면 일관된 환경을 유지하는 데 도움이 됩니다. 동결된 의존성 파일 사용: pip freeze > requirements-lock.txt로 정확한 의존성 목록을 생성하고 이를 배포에 사용할 수 있습니다.
LangChain 생태계가 빠르게 발전하고 있어 이런 의존성 문제가 자주 발생할 수 있습니다. 간소화된 환경으로 시작하여 필요에 따라 확장하는 것이 더 안정적인 접근법입니다.
의존성이 해결되어 python run.py를 실행했더니 오류가 발생했습니다.
python run.py 에러 ImportError: cannot import name 'VerifyTypes' from 'httpx._types' (/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/httpx/_types.py)
이 오류는 httpx 라이브러리와 관련된 의존성 문제입니다. VerifyTypes를 httpx 라이브러리에서 가져오려고 하는데 현재 설치된 httpx 버전에는 해당 타입이 없는 것으로 보입니다.
이 문제를 해결하기 위한 방법은 다음과 같습니다:
해결 방법 1: httpx 업그레이드
httpx 패키지를 최신 버전으로 업그레이드하세요:
bashpip install --upgrade httpx
해결 방법 2: 특정 버전의 httpx 설치
특정 버전의 httpx를 설치하는 것도 도움이 될 수 있습니다:
bashpip install httpx==0.24.1
해결 방법 3: 의존성 문제가 있는 패키지 재설치
가끔은 fastapi나 langserve와 같은 의존성 패키지를 재설치하는 것이 도움이 됩니다:
bashpip uninstall -y fastapi langserve httpx pip install fastapi langserve httpx
해결 방법 4: Python 가상환경 초기화
의존성 문제가 복잡할 경우, 가상환경을 초기화하고 다시 설정하는 것이 가장 확실한 방법입니다:
bash# 가상환경 비활성화 deactivate # 가상환경 재생성 rm -rf .venv # macOS/Linux # 또는 # rmdir /s /q .venv # Windows # 새 가상환경 생성 python3.9 -m venv .venv # 가상환경 활성화 source .venv/bin/activate # macOS/Linux # 또는 # .venv\Scripts\activate # Windows # 핵심 패키지 설치 pip install fastapi uvicorn langchain langchain-openai langserve httpx==0.24.1 python-dotenv
이 문제의 원인
이 문제는 일반적으로 다음과 같은 상황에서 발생합니다:
다양한 패키지가 httpx의 서로 다른 버전에 의존하는 경우 httpx API가 변경되면서 일부 기능이 다른 위치로 이동하거나 이름이 변경된 경우
특히 FastAPI, LangServe, LangChain 같은 패키지들은 모두 httpx에 의존하는데, 서로 호환되지 않는 버전을 요구할 수 있습니다.
가장 간단한 해결책은 httpx를 최신 버전으로 업그레이드하는 것입니다. 이 방법이 효과가 없으면 가상환경을 초기화하고 다시 시작하는 것이 좋습니다.
고전 개발 패러다임에선 디펜던시 맞추는데 한 세월을 보내곤 했는데 이젠 AI한테 몇 번 물어보면 뚝딱 해결됩니다.
Pydantic에러가 발생했습니다. 버전 문제인 것 같습니다.
raise PydanticImportError( pydantic.errors.PydanticImportError:
BaseSettings
has been moved to the
pydantic-settings
package. See
https://docs.pydantic.dev/2.6/migration/#basesettings-has-moved-to-pydantic-settings
for more details. For further information visit
https://errors.pydantic.dev/2.6/u/import-error
이 오류는 Pydantic v2에서 발생하는 문제입니다. Pydantic 버전 2에서 BaseSettings 클래스가 메인 패키지에서 별도의 pydantic-settings 패키지로 이동했기 때문에 발생합니다.
이 문제를 해결하는 방법은 두 가지입니다:
해결 방법 1: pydantic-settings 패키지 설치
Pydantic 2.x를 계속 사용하면서 settings 모듈을 추가로 설치합니다:
bashpip install pydantic-settings
그런 다음 config.py 파일에서 import 문을 수정해야 합니다:
python# 변경 전: from pydantic import BaseSettings # 변경 후: from pydantic_settings import BaseSettings
해결 방법 2: Pydantic 1.x 버전 사용
프로젝트를 Pydantic 1.x 버전으로 다운그레이드 하는 방법입니다:
bashpip uninstall -y pydantic pip install pydantic==1.10.8
추천 방법
새 프로젝트라면 해결 방법 1을 추천합니다. 최신 버전의 Pydantic을 사용하면서 pydantic-settings 패키지를 추가로 설치하는 것이 장기적으로 더 나은 접근 방식입니다. 코드 변경도 간단하게 import 경로만 수정하면 됩니다.
config.py 파일의 코드를 다음과 같이 수정하세요:
python""" 애플리케이션 설정 파일 """ import os from pydantic_settings import BaseSettings # 여기를 수정 from dotenv import load_dotenv # 환경 변수 로드 load_dotenv() class Settings(BaseSettings): """애플리케이션 설정""" # 기본 설정 APP_NAME: str = "고객센터 상담 챗봇" DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true" # API 키 OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "") KAKAO_API_KEY: str = os.getenv("KAKAO_API_KEY", "") # LLM 설정 LLM_MODEL: str = os.getenv("LLM_MODEL", "gpt-3.5-turbo") LLM_TEMPERATURE: float = float(os.getenv("LLM_TEMPERATURE", "0.7")) # 데이터베이스 설정 DATABASE_URL: str = os.getenv("DATABASE_URL", "sqlite:///./chatbot.db") # 보안 설정 API_KEY_HEADER: str = os.getenv("API_KEY_HEADER", "X-API-Key") API_KEY: str = os.getenv("API_KEY", "") # 서비스 설정 MAX_SESSION_IDLE_TIME: int = int(os.getenv("MAX_SESSION_IDLE_TIME", "1800")) # 초 단위(30분) MAX_CONVERSATION_HISTORY: int = int(os.getenv("MAX_CONVERSATION_HISTORY", "10")) # 대화 기록 최대 보관 수 class Config: env_file = ".env" env_file_encoding = "utf-8" # 설정 인스턴스 생성 settings = Settings()
이렇게 수정한 후 pydantic-settings 패키지를 설치하면 문제가 해결될 것입니다.
Pydantic v1과 v2의 차이점에서 생긴 문제입니다. 복붙해주니 바로 해결됩니다.
다시 오류가 발생했습니다. 이번에도 디펜던시 문제입니다. 이젠 그냥 오류 로그만 넣어봅니다.
/Users/gusdn0828/Documents/GitHub/vibe-chatbot/app/chains/conversation.py:94: LangChainDeprecationWarning: The class
LLMChain
was deprecated in LangChain 0.1.17 and will be removed in 1.0. Use RunnableSequence, e.g.,
prompt | llm
instead. conversation = LLMChain( Traceback (most recent call last): File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/langserve/server.py", line 349, in add_routes from sse_starlette import EventSourceResponse ModuleNotFoundError: No module named 'sse_starlette' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/run.py", line 26, in <module> uvicorn.run("main:app", host=host, port=port, reload=debug) File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/uvicorn/main.py", line 575, in run server.run() File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/uvicorn/server.py", line 62, in run return asyncio.run(self.serve(sockets=sockets)) File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/uvicorn/server.py", line 69, in serve config.load() File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/uvicorn/config.py", line 433, in load self.loaded_app = import_from_string(self.app) File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/uvicorn/importer.py", line 19, in import_from_string module = importlib.import_module(module_str) File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/
init
.py", line 127, in import_module return
bootstrap.
gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in
gcd
import File "<frozen importlib._bootstrap>", line 1007, in
find
and_load File "<frozen importlib._bootstrap>", line 986, in
find
and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in
load
unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in
call
with_frames_removed File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/main.py", line 10, in <module> from app.api.router import router as api_router File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/app/api/router.py", line 26, in <module> add_routes(router, conversation_chain, path="/chat/chain", input_type=Dict[str, Any]) File "/Users/gusdn0828/Documents/GitHub/vibe-chatbot/.venv/lib/python3.9/site-packages/langserve/server.py", line 351, in add_routes raise ImportError( ImportError: sse_starlette must be installed to implement the stream and stream_log endpoints. Use
pip install sse_starlette
to install.
두 가지 문제가 발생했습니다:
LangChain 버전 관련 경고 메시지: LLMChain 클래스가 곧 사라질 예정입니다. sse_starlette 모듈이 설치되어 있지 않습니다.
이 두 문제를 순서대로 해결해 보겠습니다:
1. sse_starlette 설치
먼저 즉시 오류를 해결하기 위해 필요한 패키지를 설치합니다:
bashpip install sse-starlette
2. LLMChain 대신 최신 구문 사용
conversation.py 파일의 코드를 최신 LangChain API에 맞게 업데이트하는 것이 좋습니다. 다음과 같이 수정하세요:
pythondef get_conversation_chain(): """대화 처리 체인 반환""" try: # LLM 모델 인스턴스 가져오기 llm = get_llm() # 메모리 설정 memory = ConversationBufferMemory( return_messages=True, memory_key="chat_history", input_key="input" ) # 프롬프트 템플릿 설정 system_prompt_template = SystemMessagePromptTemplate.from_template(get_system_prompt()) human_prompt_template = HumanMessagePromptTemplate.from_template(get_human_prompt()) chat_prompt = ChatPromptTemplate.from_messages([ system_prompt_template, human_prompt_template ]) # 새로운 방식으로 체인 생성 (RunnableSequence 사용) conversation = chat_prompt | llm # 메모리 포함 체인 생성 chain_with_memory = RunnableWithMessageHistory( conversation, lambda session_id: memory, input_messages_key="input", history_messages_key="chat_history" ) return chain_with_memory except Exception as e: logger.error(f"대화 체인 초기화 오류: {str(e)}") raise
이를 위해서는 필요한 import 구문도 추가해야 합니다:
pythonfrom langchain.memory import ConversationBufferMemory from langchain_openai import ChatOpenAI from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate from langchain.chains.history_aware_retriever import RunnableWithMessageHistory
하지만 이렇게 수정하려면 LangChain의 더 최신 버전이 필요합니다. 가장 간단한 방법은 일단 sse-starlette를 설치하여 현재 코드가 실행되도록 한 다음, 점진적으로 코드를 업데이트하는 것입니다.
현재 가장 빠른 해결 방법:
bashpip install sse-starlette
이 패키지를 설치한 후 애플리케이션이 실행될 것입니다. 경고는 잠시 무시해도 괜찮습니다(코드는 여전히 작동함).
장기적인 해결 방법:
LangChain 코드를 최신 API에 맞게 업데이트 필요한 경우 LangChain 버전 업그레이드 코드베이스를 점진적으로 최신화
새로운 LangChain 0.2+ 버전에서는 선언적 체인 구성 방식을 사용하므로, 이에 맞게 코드를 업데이트하는 것이 좋습니다. 하지만 당장은 필수는 아니며, 현재 코드도 경고가 있더라도 작동할 것입니다.
디펜던시 문제가 해결되고 서버가 실행됐습니다
LangServe가 FastAPI 기반인 덕분에 OpenAPI Docs도 잘 나오는 모습을 볼 수 있습니다.
이렇게 프로젝트 초안까지 완성했습니다. 아직 각 기능이 작동하는지는 아직 알 수 없습니다. 하지만 과거 프로젝트를 구성하기 위해 기획, 설계, 구현에 들어갔던 공수를 생각하면 정말 획기적이네요. 토이프로젝트를 만드는 정도는 거의 다 가능할 것 같습니다. (만들다 만 토이프로젝트들 다 있어보이게 만들기 매우 용이해 보이는) 다음 시간엔 각 부분이 작동하는지 확인하고 기능 구체화에 들어가보도록 하겠습니다.
실제 코드는 아래 깃헙에서 확인하실 수 있습니다.
https://github.com/saysimple0828/vibe-chatbot
GitHub - saysimple0828/vibe-chatbot
Contribute to saysimple0828/vibe-chatbot development by creating an account on GitHub.
github.com