AInfo 챗봇 구조 #5 - LangChain 기반 도구 및 에이전트 구성 방법
AInfo 프로젝트에서 LangChain 기반으로 도구(Tool)와 에이전트(Agent)를 어떻게 구성했는지 설계 흐름과 구현 코드 중심으로 소개합니다.
AInfo 챗봇 구조 #5 - LangChain 기반 도구 및 에이전트 구성 방법
LangChain Agent의 역할
AInfo 프로젝트에서는 LangChain의 Agent 체계를 활용해 단일 RAG 검색 기능을 툴 기반으로 외부화하고, 이를 Agent로 감싸 하나의 지능형 역할처럼 동작하도록 구성했습니다.
사용된 컴포넌트는 다음과 같습니다:
- LangChain의
Tool
클래스 기반 사용자 정의 툴 - LangChain의
initialize_agent
또는AgentExecutor
- 내부적으로는
VectorRetriever
를 호출하여 실질적인 검색 수행
1. 사용자 정의 툴 구성
예시: 정책 추천용 RAG Tool
1
2
3
4
5
6
7
8
9
class RagSearchTool(BaseTool):
name = "rag_search_tool"
description = "Chroma DB에서 질문에 맞는 정책을 검색합니다."
args_schema = PolicyQueryInput
def _run(self, question, keywords, user_profile, collection_names=None, k=5):
retriever = VectorRetriever()
docs = retriever.search(query=keywords, collection_names=collection_names, filters=user_profile, k=k)
return retriever.format_docs(docs)
args_schema
를 통해 입력 인자 자동 검증VectorRetriever
를 내부적으로 활용해 검색 결과 생성- LLM에게 넘길 때는 Tool 이름과 설명이 사용됨
2. 에이전트 정의 및 실행 방식
Agent는 주어진 역할을 수행하는 AI 캐릭터처럼 동작하며, Tool을 활용할 수 있습니다.
1
2
3
4
5
6
agent_executor = initialize_agent(
tools=[RagSearchTool()],
llm=ChatOpenAI(model="gpt-4o"),
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
prompt 예시: “서울에 거주하는 29살 청년이 받을 수 있는 정책 찾아줘”
→ 내부적으로 Tool의 설명을 파악하고, rag_search_tool
을 호출하도록 판단함
3. 도구와 입력 스키마 분리 설계
입력값은 다음과 같이 Pydantic 모델로 정의하여, Tool 호출 시 구조화된 인자를 넘기도록 했습니다.
1
2
3
4
5
6
class PolicyQueryInput(BaseModel):
question: str
keywords: str
user_profile: Optional[Dict[str, str]]
collection_names: Optional[List[str]]
k: Optional[int] = 5
- LLM이
tool_call_args
로 넘겨도 안전하게 파싱 가능 - 추후 FastAPI 등의 API와 연동할 때도 유리
4. 멀티툴 확장 대비 구조
AInfo에서는 단일 RAG 검색뿐만 아니라 웹 검색, 전략 추천, 비교 분석 등 다양한 기능을 CrewAI와 병행하기 위해 도구 구조를 통일했습니다.
tools/rag_search_tool.py
tools/web_search_tool.py
tools/strategy_web_tool.py
이렇게 도구들이 파일 단위로 분리되어 있고, 모두 공통 인터페이스(BaseTool)를 따릅니다.
5. RAG 외에도 활용 가능한 구조
LangChain Agent 체계는 다음과 같은 작업에도 확장 가능합니다:
활용 방식 | 예시 |
---|---|
외부 API 호출 | 웹 크롤링, 뉴스 검색 |
파일 요약 | PDF 요약, 문서 비교 |
멀티턴 도우미 | 대화 이력 기반 추론 |
전략 제시 | 정책 우선순위 판단 등 |
AInfo에서는 Agent 체계보다 CrewAI 중심으로 넘어가고 있지만, LangChain Agent 구조는 단일 행동에 최적화되어 여전히 유효한 방식입니다.
마무리
LangChain의 Tool + Agent 조합은 챗봇에 특정 기능을 붙일 때 가장 기본적인 구조입니다.
This post is licensed under CC BY 4.0 by the author.