Bygg en ReAct-agent med LangChain
Sätt ihop en komplett ReAct-agent med LangChains AgentExecutor, ett verktyg för webbsökning, ett kalkylatorverktyg och ett verktyg för dokumentsökning och följ sedan dess slutledningssteg.
Bygg en ReAct-agent med LangChain är en gratis lektion i AI Engineering Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för AI Engineering Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI Engineering Academy innehåller totalt 4 lektioner.
LangChains agentekosystem
LangChain tillhandahåller en komplett uppsättning komponenter för att bygga agenter: verktyg definierar vad agenten kan göra, prompter ger den instruktioner och ett format för resonemang, LLM står för tänkandet och AgentExecutor kör loopen som skickar verktygsanrop och matar tillbaka observationer. Du konfigurerar varje del separat, så att du kan byta ut komponenter utan att skriva om allt.
Bygga ihop en ReAct-agent
Det snabbaste sättet att bygga en ReAct-agent i LangChain är med create_react_agent. Du skickar in en LLM, en lista med verktyg och en promptmall. Den returnerar något körbart som automatiskt genererar stegen Thought/Action/Observation. Omslut den med en AgentExecutor för att hantera loopen.
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)Köra med AgentExecutor
AgentExecutor hanterar loopen Thought/Action/Observation. Skicka med verbose=True under utvecklingen för att skriva ut varje steg i konsolen – detta spår är ovärderligt vid felsökning. Parametern max_iterations fungerar som ett skydd mot oändliga loopar.
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'])Läsa det utförliga spåret
Det utförliga spåret visar exakt hur agenten resonerar. Vid varje iteration skrivs modellens Thought, den valda Action och Observation från verktyget ut. Det gör att du kan se exakt var agenten går fel – om den valde fel verktyg, skickade fel argument eller misstolkade observationen.
# 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.Använda inbyggda LangChain-verktyg
LangChain levereras med många färdiga verktyg för vanliga uppgifter. Du kan lägga till ett verktyg för webbsökning från langchain_community.tools utan att skriva någon kod. Dessa verktyg hanterar API-autentisering och tolkning av svar åt dig.
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_searchDokumentsökning som RAG-verktyg
Ett av de mest kraftfulla mönstren är att exponera din RAG-pipeline som ett agentverktyg. Agenten avgör när den ska hämta information från din kunskapsbas, när den ska använda andra verktyg och när den ska förlita sig på sin träning. Det gör ditt RAG-system dynamiskt – agenten anropar det endast när det är relevant.
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.'Strömma agentens utdata
För en bättre användarupplevelse kan du strömma agentens slutliga svar token för token i stället för att vänta på hela svaret. Använd agent_executor.astream_events för att ta emot händelser när de inträffar, inklusive mellanliggande steg och den slutliga utdataströmmen.
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?'))Skicka med agentminne
Kombinera agentens resonemang med samtalsminne så att agenten kommer ihåg tidigare interaktioner. Använd RunnableWithMessageHistory för att omsluta agentens executor och tillhandahålla ett lager för chatthistorik. Agenten får då både minne av tidigare turer och möjlighet att anropa verktyg.
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'
)Anpassa ReAct-prompten
Standardprompten från hubben fungerar bra, men ofta behöver du en anpassad systemprompt för din specifika domän. Med en anpassad prompt kan du lägga till instruktioner om personlighet, regler för utdataformat och domänspecifik vägledning före verktygsbeskrivningarna. Använd ChatPromptTemplate med de obligatoriska ReAct-platshållarna.
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)Observera agentens resonemangssteg
AgentExecutor returnerar mellanliggande steg tillsammans med den slutliga utdatan när du anger return_intermediate_steps=True. Varje steg är en tupel med agentens åtgärd och verktygets observation. Det är användbart när du bygger gränssnitt som visar agentens resonemangsprocess för användarna.
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}')Testa agenten grundligt
Testa agenten mot en uppsättning representativa frågor som omfattar: uppgifter med ett enda verktyg, flerstegsuppgifter som kräver flera verktygsanrop, uppgifter där inget verktyg behövs (modellen svarar utifrån träningsdata) och fientliga indata, till exempel frågor som är utformade för att förvirra verktygsvalet. Följ upp andelen godkända tester och felmönster för att förbättra verktygsbeskrivningarna och prompten.
Snabb kontroll
Testa din förståelse av hur man bygger en ReAct-agent med LangChain.
Sammanfattning av lektionen
I den här lektionen lärde du dig att: create_react_agent sätter ihop en LLM, verktyg och en prompt till en ReAct-agent, AgentExecutor hanterar loopen Thought/Action/Observation med konfigurerbara säkerhetsgränser och verbose=True samt return_intermediate_steps=True ger full insyn i agentens resonemang. Härnäst lär vi oss att hantera agentfel och förhindra oändliga loopar.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Bygg en ReAct-agent med LangChain” gratis?
Ja – hela texten till ”Bygg en ReAct-agent med LangChain” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i AI Engineering Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i AI Engineering Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Bygg en ReAct-agent med LangChain”?
Sätt ihop en komplett ReAct-agent med LangChains AgentExecutor, ett verktyg för webbsökning, ett kalkylatorverktyg och ett verktyg för dokumentsökning och följ sedan dess slutledningssteg. Ni övar på AI Engineering Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig AI Engineering Academy?
Du behöver inga förkunskaper. Utbildningen i AI Engineering Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Bygg en ReAct-agent med LangChain”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här AI Engineering Academy-lektionen?
Ja. Varje AI Engineering Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- ReAct-ramverket: tänk, agera, observera
- Definiera verktyg för er agent
- Bygg en ReAct-agent med LangChain
- Hantera agentfel och loopar