LangChain으로 ReAct 에이전트 구축하기
웹 검색 도구, 계산기 도구, 문서 조회 도구를 갖춘 완전한 ReAct 에이전트를 LangChain의 AgentExecutor로 조립한 뒤, 추론 단계를 추적합니다.
LangChain으로 ReAct 에이전트 구축하기은(는) CoddyKit의 무료 AI Engineering Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Engineering Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
LangChain의 에이전트 생태계
LangChain은 에이전트를 구축하기 위한 완전한 스택을 제공합니다. 도구는 에이전트가 할 수 있는 일을 정의하고, 프롬프트는 지침과 추론 형식을 제공하며, LLM은 사고를 담당하고, AgentExecutor는 도구 호출을 전달하고 관찰 결과를 다시 입력하는 반복을 실행합니다. 각 구성 요소를 별도로 설정하므로 전체를 다시 작성하지 않고도 구성 요소를 교체할 수 있습니다.
ReAct 에이전트 조립
LangChain에서 ReAct 에이전트를 구축하는 가장 빠른 방법은 create_react_agent를 사용하는 것입니다. LLM, 도구 목록, 프롬프트 템플릿을 전달하면 됩니다. 그러면 Thought/Action/Observation 단계를 자동으로 생성하는 실행 가능한 객체가 반환됩니다. 이를 AgentExecutor로 감싸 반복을 관리하십시오.
from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
# 1. Define tools
@tool
def search(query: str) -> str:
'''Search the web for current information. Input: a search query string.'''
return f'Search results for "{query}": [mock result]'
@tool
def calculator(expression: str) -> str:
'''Evaluate a math expression. Input: a valid Python math expression.'''
try:
return str(eval(expression))
except Exception as e:
return str(e)
tools = [search, calculator]
# 2. Load a ReAct prompt template
prompt = hub.pull('hwchase17/react')
# 3. Create the agent
llm = ChatOpenAI(model='gpt-4o', temperature=0)
agent = create_react_agent(llm, tools, prompt)AgentExecutor로 실행하기
AgentExecutor는 Thought/Action/Observation 반복을 관리합니다. 개발 중에는 verbose=True를 전달하여 모든 단계를 콘솔에 출력하십시오. 이 추적 정보는 디버깅에 매우 유용합니다. max_iterations 매개변수는 무한 반복을 막는 안전장치입니다.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # Print each step
max_iterations=10, # Safety limit
handle_parsing_errors=True # Don't crash on format errors
)
# Invoke with a user question
result = agent_executor.invoke({
'input': 'What is the square root of 144 multiplied by the number of days in a leap year?'
})
print('Final answer:', result['output'])상세 추적 정보 읽기
상세 추적 정보에는 에이전트가 어떻게 추론하는지가 정확히 표시됩니다. 각 반복마다 모델의 Thought, 모델이 선택한 Action, 도구에서 얻은 Observation이 출력됩니다. 이를 통해 에이전트가 잘못된 도구를 선택했는지, 잘못된 인수를 전달했는지, 관찰 결과를 잘못 해석했는지 등 오류가 발생한 정확한 지점을 찾을 수 있습니다.
# Example verbose output from AgentExecutor:
#
# > Entering new AgentExecutor chain...
# Thought: I need to find the square root of 144 first, then multiply by days in a leap year.
# Action: calculator
# Action Input: 144 ** 0.5
# Observation: 12.0
# Thought: 12.0 times 366 days in a leap year.
# Action: calculator
# Action Input: 12.0 * 366
# Observation: 4392.0
# Thought: I have the final answer.
# Final Answer: 4392.0
# > Finished chain.LangChain 기본 제공 도구 사용
LangChain에는 일반적인 작업을 위한 다양한 기성 도구가 포함되어 있습니다. 코드를 작성하지 않고도 langchain_community.tools에서 웹 검색 도구를 추가할 수 있습니다. 이러한 도구가 API 인증과 응답 분석을 대신 처리해 줍니다.
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
# Web search tool
search_tool = DuckDuckGoSearchRun()
# Wikipedia lookup tool
wiki_tool = WikipediaQueryRun(
api_wrapper=WikipediaAPIWrapper(top_k_results=2)
)
# Add to your agent
tools_with_search = [search_tool, wiki_tool, calculator]
agent_executor.tools = tools_with_searchRAG 도구로 문서 조회하기
가장 강력한 패턴 중 하나는 RAG 파이프라인을 에이전트 도구로 제공하는 것입니다. 에이전트는 지식 기반에서 조회할지, 다른 도구를 사용할지, 학습한 내용을 바탕으로 답할지를 결정합니다. 이렇게 하면 RAG 시스템이 동적으로 작동하여, 관련성이 있을 때만 에이전트가 호출합니다.
from langchain_core.tools import tool
@tool
def lookup_knowledge_base(query: str) -> str:
'''Search the company knowledge base for internal policies, procedures, and documentation.
Use when the user asks about company-specific information not available publicly.
Input: a natural language question or keyword query.
'''
# Your RAG pipeline here
retrieved_chunks = vector_store.similarity_search(query, k=3)
context = '\n'.join([doc.page_content for doc in retrieved_chunks])
return context if context else 'No relevant documents found.'에이전트 출력 스트리밍
더 나은 사용자 경험을 위해 전체 응답을 기다리는 대신 에이전트의 최종 답변을 토큰 단위로 스트리밍하십시오. agent_executor.astream_events를 사용하면 중간 단계와 최종 출력 스트림을 포함하여 이벤트가 발생하는 즉시 받을 수 있습니다.
import asyncio
async def stream_agent(user_input: str):
async for event in agent_executor.astream_events(
{'input': user_input},
version='v1'
):
kind = event['event']
if kind == 'on_chat_model_stream':
chunk = event['data']['chunk']
if chunk.content:
print(chunk.content, end='', flush=True)
elif kind == 'on_tool_start':
print(f'\n[Calling tool: {event["name"]}]')
elif kind == 'on_tool_end':
print(f'[Tool result: {str(event["data"]["output"])[:100]}]')
asyncio.run(stream_agent('What is the latest news about AI?'))에이전트 메모리 전달
에이전트의 추론을 대화 메모리와 결합하여 에이전트가 이전 상호 작용을 기억하도록 하십시오. RunnableWithMessageHistory로 에이전트 실행기를 감싸고 대화 기록 저장소를 제공하십시오. 그러면 에이전트는 과거 대화 차례를 기억하면서 도구도 호출할 수 있습니다.
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
session_store = {}
def get_session_history(session_id: str):
if session_id not in session_store:
session_store[session_id] = ChatMessageHistory()
return session_store[session_id]
agent_with_memory = RunnableWithMessageHistory(
agent_executor,
get_session_history,
input_messages_key='input',
history_messages_key='chat_history'
)ReAct 프롬프트 사용자 지정
기본 허브 프롬프트도 잘 작동하지만, 특정 도메인에 맞는 사용자 지정 시스템 프롬프트가 필요한 경우가 많습니다. 사용자 지정 프롬프트를 사용하면 도구 설명 앞에 페르소나 지침, 출력 형식 규칙, 도메인별 안내를 추가할 수 있습니다. 필요한 ReAct 자리 표시자와 함께 ChatPromptTemplate을 사용하십시오.
from langchain_core.prompts import ChatPromptTemplate
custom_prompt = ChatPromptTemplate.from_messages([
('system', '''You are a helpful customer support agent for TechCorp.
Always be polite and professional. When you do not know something, use your tools.
You have access to these tools:
{tools}
Tool names: {tool_names}
Use this format:
Thought: ...
Action: tool_name
Action Input: input_value
Observation: result
Final Answer: your response to the customer
'''),
('human', '{input}'),
('assistant', '{agent_scratchpad}')
])
agent = create_react_agent(llm, tools, custom_prompt)에이전트 추론 단계 관찰
return_intermediate_steps=True로 설정하면 AgentExecutor는 최종 출력과 함께 중간 단계도 반환합니다. 각 단계는 에이전트의 작업과 도구의 관찰 결과로 이루어진 튜플입니다. 이를 활용하면 에이전트의 추론 과정을 사용자에게 보여 주는 UI를 구축할 수 있습니다.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
return_intermediate_steps=True
)
result = agent_executor.invoke({'input': 'What is 2 to the power of 10?'})
print('Final answer:', result['output'])
print('Reasoning steps:')
for step in result['intermediate_steps']:
action, observation = step
print(f' Tool: {action.tool}, Input: {action.tool_input}')
print(f' Observation: {observation}')에이전트 철저히 테스트하기
다음 범주의 대표적인 질문으로 구성된 테스트 모음에 에이전트를 대상으로 테스트하십시오. 단일 도구 작업, 여러 도구 호출이 필요한 다단계 작업, 도구가 필요하지 않아 모델이 학습 데이터로 답하는 작업, 도구 선택을 혼란스럽게 만들도록 설계된 질문과 같은 적대적 입력입니다. 통과율과 실패 패턴을 추적하여 도구 설명과 프롬프트를 개선하십시오.
빠른 확인
LangChain으로 ReAct 에이전트를 구축하는 방법에 대한 이해도를 확인해 보십시오.
단원 요약
이 단원에서는 다음을 배웠습니다. create_react_agent는 LLM, 도구, 프롬프트를 하나의 ReAct 에이전트로 조립합니다. AgentExecutor는 설정 가능한 안전 제한과 함께 Thought/Action/Observation 반복을 관리합니다. 또한 verbose=True와 return_intermediate_steps=True를 사용하면 에이전트의 추론을 완전히 확인할 수 있습니다. 다음으로 에이전트 실패를 처리하고 무한 반복을 방지하는 방법을 알아보겠습니다.
자주 묻는 질문
“LangChain으로 ReAct 에이전트 구축하기” 강의는 무료인가요?
네 — “LangChain으로 ReAct 에이전트 구축하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Engineering Academy 강의 전체를 잠금 해제할 수 있습니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“LangChain으로 ReAct 에이전트 구축하기”에서 뭘 배우나요?
웹 검색 도구, 계산기 도구, 문서 조회 도구를 갖춘 완전한 ReAct 에이전트를 LangChain의 AgentExecutor로 조립한 뒤, 추론 단계를 추적합니다. 브라우저에서 직접 실행하는 실습 코드로 AI Engineering Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Engineering Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Engineering Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“LangChain으로 ReAct 에이전트 구축하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Engineering Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Engineering Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- ReAct 프레임워크: 사고, 행동, 관찰
- 에이전트를 위한 도구 정의
- LangChain으로 ReAct 에이전트 구축하기
- 에이전트 실패와 무한 반복 처리