Post

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.