주뇽's 저장소
Part 2.2: LangGraph와 웹 검색 도구를 활용한 지능형 챗봇 구현하기 🔍 본문
728x90
반응형
Part 2.2: LangGraph와 웹 검색 도구를 활용한 지능형 챗봇 구현하기 🔍
이번 글에서는 LangGraph와 Tavily 검색 도구를 활용하여 실시간 정보를 검색할 수 있는 지능형 챗봇을 구현하는 방법을 설명한다.
1. 프로젝트 구조 설정 🛠️
import os
from dotenv import load_dotenv
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.prebuilt import ToolNode, tools_condition
load_dotenv()
class State(TypedDict):
messages: Annotated[list, add_messages]
2. 그래프 설정 및 검색 도구 구현 🌐
def setup_graph():
graph_builder = StateGraph(State)
# 검색 도구 설정
tool = TavilySearchResults(max_results=2)
tools = [tool]
# AI 모델 설정
llm = ChatOpenAI(
model="gpt-4",
temperature=0.7,
streaming=True
)
llm_with_tools = llm.bind_tools(tools)
# 챗봇 노드 설정
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
# 그래프 구성
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_node("tools", ToolNode(tools=[tool]))
graph_builder.add_conditional_edges("chatbot", tools_condition)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge(START, "chatbot")
return graph_builder.compile()
3. 테스트 기능 구현 🧪
def test_chatbot(graph, question: str):
print("\n" + "="*50)
print(f"😀 사용자: {question}")
print("="*50)
try:
for event in graph.stream({"messages": [("human", question)]}):
for value in event.values():
if "messages" in value:
message = value["messages"][-1]
if hasattr(message, "content"):
print("\n🤖 AI:", message.content)
if hasattr(message, "tool_calls") and message.tool_calls:
print("\n🔍 검색 중...")
for tool_call in message.tool_calls:
print(f"- 검색어: {tool_call['args'].get('query', '')}")
except Exception as e:
print(f"\n❌ 오류 발생: {str(e)}")
4. 실행 코드 구현 ▶️
def main():
test_questions = [
"안녕하세요!",
"2024년 가장 인기있는 프로그래밍 언어는 뭐야?",
"1 + 1은 뭐야?",
"파이썬이란 무엇인가요?",
"어제 있었던 월드컵 결과 알려줘",
"2025년 IT 최신 트렌드를 알려줘"
]
print("🔄 챗봇 초기화 중...")
graph = setup_graph()
print("✅ 챗봇 준비 완료!\n")
for question in test_questions:
test_chatbot(graph, question)
print("\n" + "-"*50)
5. 실행 결과 예시 📝
==================================================
😀 사용자: 2024년 가장 인기있는 프로그래밍 언어는 뭐야?
==================================================
🤖 AI: 이 정보를 찾아보겠습니다.
🔍 검색 중...
- 검색어: 2024 most popular programming languages current trends
🤖 AI: 2024년 현재 가장 인기 있는 프로그래밍 언어들은 다음과 같습니다:
1. Python
- 데이터 과학, AI, 웹 개발에서 강세
- 쉬운 문법과 풍부한 라이브러리
2. JavaScript
- 웹 개발에서 필수적
- Node.js를 통한 백엔드 개발도 가능
3. Java
- 기업용 소프트웨어 개발에서 강세
- 안드로이드 앱 개발에 사용
6. 주요 포인트 정리 ⭐
검색 도구 활용
- Tavily API를 통해 실시간 웹 검색을 수행한다
max_results=2
로 검색 결과를 제한한다
조건부 검색
- AI가 필요하다고 판단할 때만 검색을 수행한다
- 간단한 질문은 직접 답변한다
에러 처리
- 검색 실패 시 적절한 에러 메시지를 표시한다
- 안전한 예외 처리를 구현한다
7. 웹 검색 챗봇의 특징 🎯
장점
- 실시간 정보 제공 가능
- 광범위한 주제에 대한 답변 가능
- 자동으로 검색 필요성 판단
주의사항
- API 키 필요 (Tavily, OpenAI)
- 검색 결과의 신뢰성 확인 필요
- 적절한 검색어 선택 중요
8. 활용 예시 💡
뉴스 검색 봇
question = "최근 IT 업계 주요 뉴스는?" test_chatbot(graph, question)
기술 트렌드 조사
question = "최신 AI 개발 트렌드는?" test_chatbot(graph, question)
이렇게 LangGraph와 웹 검색 도구를 활용하여 실시간 정보를 제공하는 지능형 챗봇을 구현할 수 있다. 다음 글에서는 이 챗봇에 메모리 기능을 추가하여 대화 맥락을 유지하는 방법을 알아본다. 🚀
'LangGraph' 카테고리의 다른 글
Part 3: LangGraph 메모리 관리 - 대화 기억하기 🧠 (0) | 2025.01.18 |
---|---|
Part 2-1: LangGraph 도구 활용 에이전트 - 날씨 정보 챗봇 구현하기 🌤️ (1) | 2025.01.18 |
Part 1: 기본 챗봇 만들기 - LangGraph의 기초 🌱 (0) | 2025.01.18 |