DevLog 2024년 11월 15일
AI Chatbot과 자연어 처리 실전 프로젝트

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 선택 기준

항목PineconeChromaWeaviate
호스팅✅ 관리형❌ 직접 관리❌ 직접 관리
확장성⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
가격💰💰💰💰💰💰

결론: 호스팅 관리 비용이 절감된다는 점에서 Pinecone 선택

3. 한계점과 해결책

  • 할루시네이션: GPT가 없는 정보를 지어내는 문제
    • 해결: RAG로 회사 문서만 참조하도록 제한
  • 비용: 토큰 사용량에 따른 비용 증가
    • 해결: GPT-3.5-turbo로 일반 질문, GPT-4로 복잡 질문 분기

배운 점

“AI는 인간을 대체하는 것이 아니라, 인간을 보조하는 도구다”

챗봇은 반복적이고 단순한 질문을 처리하여 상담원이 복잡하고 중요한 문제에 집중할 수 있게 해주었습니다. 인간과 AI의 협업이 최고의 결과를 낳는다는 것을 실감했습니다.

다음 단계

  1. 멀티모달: 이미지/문서 분석 기능 추가
  2. 개인화: 고객별 맞춤형 답변
  3. 피드백 루프: 상담원 피드백으로 지속 개선