DevLog 2024년 11월 15일
AI Chatbot과 자연어 처리 실전 프로젝트
GPT API와 LangChain을 활용한 기업용 챗봇 개발
#AI
#NLP
#Python
LangChain과 OpenAI API를 통합하여 고객 지원 챗봇을 개발했습니다.
프로젝트 개요
기업의 고객 지원 부서에서 다음과 같은 문제를 겪고 있었습니다:
- 대기 시간 길음: 평균 4시간 이상의 응답 시간
- 질문 중복: 같은 질문이 반복됨
- 답변 품질: 상담원에 따라 답변의 일관성 부족
- 운영 비용: 24시간 상담원 운영에 비용 부담
기술 스택
- LLM: GPT-4, GPT-3.5-turbo
- 프레임워크: LangChain
- 벡터 DB: Pinecone
- 백엔드: FastAPI, Python 3.11
- 프론트엔드: React 18, WebSocket
핵심 기능 구현
1. RAG (Retrieval-Augmented Generation)
from langchain.vectorstores import Pinecone
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
# 벡터 스토어 설정
vectorstore = Pinecone.from_texts(
documents=company_docs,
embedding=OpenAIEmbeddings(),
index_name="company-kb"
)
# RAG 체인 설정
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model_name="gpt-4"),
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
2. 대화 기억 관리
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
# 대화 기억 설정
memory = ConversationBufferMemory(
max_token_limit=1000,
return_messages=True
)
# 대화 체인
chain = ConversationChain(
llm=ChatOpenAI(temperature=0.7),
memory=memory,
verbose=True
)
3. 스트리밍 응답
from fastapi import FastAPI
from sse_starlette.sse import EventSourceResponse
app = FastAPI()
@app.post("/chat")
async def chat(message: str):
async def generate():
async for chunk in chain.astream({"input": message}):
yield f"data: {chunk['output']}\n\n"
return EventSourceResponse(generate())
성과
고객 만족도
- 응답 시간: 평균 4시간 → 즉시 (1-3초)
- 1차 해결률: 45% → 78%
- 고객 만족도: 3.2/5 → 4.6/5
운영 효율
- 상담원 업무량: 60% 감소
- 반복 질문: 자동 처리로 90% 감소
- 운영 비용: 월 ₩5,000,000 절감
기술적 인사이트
1. 프롬프트 엔지니어링의 중요성
# ❌ 나쁜 프롬프트
"고객 질문에 답변해주세요."
# ✅ 좋은 프롬프트
"""
당신은 [회사명]의 전문 상담원입니다.
- 친절하고 전문적인 어조를 사용하세요
- 회사 정책과 규정에 따라 답변하세요
- 확실하지 않은 정보는 "확인이 필요합니다"라고 답변하세요
- 필요한 경우 추가 정보를 요청하세요
고객 질문: {question}
"""
2. 벡터 DB 선택 기준
| 항목 | Pinecone | Chroma | Weaviate |
|---|---|---|---|
| 호스팅 | ✅ 관리형 | ❌ 직접 관리 | ❌ 직접 관리 |
| 확장성 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 가격 | 💰💰💰 | 💰 | 💰💰 |
결론: 호스팅 관리 비용이 절감된다는 점에서 Pinecone 선택
3. 한계점과 해결책
- 할루시네이션: GPT가 없는 정보를 지어내는 문제
- 해결: RAG로 회사 문서만 참조하도록 제한
- 비용: 토큰 사용량에 따른 비용 증가
- 해결: GPT-3.5-turbo로 일반 질문, GPT-4로 복잡 질문 분기
배운 점
“AI는 인간을 대체하는 것이 아니라, 인간을 보조하는 도구다”
챗봇은 반복적이고 단순한 질문을 처리하여 상담원이 복잡하고 중요한 문제에 집중할 수 있게 해주었습니다. 인간과 AI의 협업이 최고의 결과를 낳는다는 것을 실감했습니다.
다음 단계
- 멀티모달: 이미지/문서 분석 기능 추가
- 개인화: 고객별 맞춤형 답변
- 피드백 루프: 상담원 피드백으로 지속 개선