Membina Ejen ReAct dengan LangChain
Pasang ejen ReAct lengkap menggunakan AgentExecutor LangChain bersama alat carian web, alat kalkulator dan alat carian dokumen, kemudian jejaki langkah penaakulannya.
Membina Ejen ReAct dengan LangChain ialah pelajaran AI Engineering Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.
Ekosistem Ejen LangChain
LangChain menyediakan tindanan lengkap untuk membina ejen: alat mentakrifkan perkara yang boleh dilakukan oleh ejen, gesaan memberikan arahan dan format penaakulan kepadanya, LLM menjalankan proses pemikiran, dan AgentExecutor menjalankan gelung yang menghantar panggilan alat serta menghantar pemerhatian kembali. Anda mengkonfigurasi setiap bahagian secara berasingan supaya komponen boleh ditukar tanpa menulis semula segala-galanya.
Membina Ejen ReAct
Cara terpantas untuk membina ejen ReAct dalam LangChain adalah dengan menggunakan create_react_agent. Anda menyerahkan LLM, senarai alat dan templat gesaan kepadanya. Ia mengembalikan sesuatu yang boleh dijalankan dan menjana langkah Thought/Action/Observation secara automatik. Balutkannya dalam AgentExecutor untuk mengurus gelung tersebut.
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)Menjalankan dengan AgentExecutor
AgentExecutor mengurus gelung Thought/Action/Observation. Hantar verbose=True semasa pembangunan untuk mencetak setiap langkah ke konsol — jejak ini amat berguna untuk penyahpepijatan. Parameter max_iterations ialah mekanisme keselamatan anda terhadap gelung tanpa penghujung.
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'])Membaca Jejak Terperinci
Jejak terperinci menunjukkan dengan tepat cara ejen membuat penaakulan. Setiap lelaran mencetak Thought model, Action yang dipilihnya dan Observation daripada alat. Ini membolehkan anda mengenal pasti dengan tepat tempat ejen tersilap — sama ada ia memilih alat yang salah, menghantar argumen yang salah atau tersalah tafsir pemerhatian.
# 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.Menggunakan Alat LangChain Terbina Dalam
LangChain disertakan dengan banyak alat siap digunakan untuk tugasan lazim. Anda boleh menambahkan alat carian web daripada langchain_community.tools tanpa menulis sebarang kod. Alat ini mengendalikan pengesahan API dan penghuraian respons untuk anda.
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_searchCarian Dokumen sebagai Alat RAG
Salah satu corak yang paling berkuasa ialah mendedahkan saluran paip RAG anda sebagai alat ejen. Ejen menentukan masa untuk mendapatkan maklumat daripada pangkalan pengetahuan berbanding masa untuk menggunakan alat lain atau bergantung pada latihan modelnya. Ini menjadikan sistem RAG anda dinamik — ejen hanya memanggilnya apabila berkaitan.
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.'Menstrim Output Ejen
Untuk pengalaman pengguna yang lebih baik, strimkan jawapan akhir ejen token demi token dan bukannya menunggu respons lengkap. Gunakan agent_executor.astream_events untuk menerima peristiwa apabila peristiwa itu berlaku, termasuk langkah perantaraan dan strim output akhir.
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?'))Menghantar Memori kepada Ejen
Gabungkan penaakulan ejen dengan memori perbualan supaya ejen mengingati interaksi terdahulu. Gunakan RunnableWithMessageHistory untuk membalut pelaksana ejen dan menyediakan stor sejarah sembang. Ejen kemudiannya mempunyai memori tentang giliran terdahulu serta keupayaan untuk memanggil alat.
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'
)Menyesuaikan Gesaan ReAct
Gesaan hab lalai berfungsi dengan baik, tetapi anda sering memerlukan gesaan sistem tersuai untuk domain khusus anda. Gesaan tersuai membolehkan anda menambahkan arahan persona, peraturan pemformatan output dan panduan khusus domain sebelum perihalan alat. Gunakan ChatPromptTemplate dengan ruang letak ReAct yang diperlukan.
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)Memerhati Langkah Penaakulan Ejen
AgentExecutor mengembalikan langkah perantaraan bersama output akhir apabila anda menetapkan return_intermediate_steps=True. Setiap langkah ialah tupel yang mengandungi tindakan ejen dan pemerhatian alat. Ini berguna untuk membina antara muka pengguna yang memaparkan proses penaakulan ejen kepada pengguna.
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}')Menguji Ejen Anda dengan Teliti
Uji ejen anda terhadap set soalan yang mewakili, yang merangkumi: tugasan satu alat, tugasan berbilang lompatan yang memerlukan beberapa panggilan alat, tugasan yang tidak memerlukan alat (model menjawab berdasarkan data latihannya), serta input berlawanan seperti soalan yang direka untuk mengelirukan pemilihan alat. Jejaki kadar lulus dan corak kegagalan untuk menambah baik perihalan alat dan gesaan anda.
Semakan Pantas
Uji pemahaman anda tentang membina ejen ReAct dengan LangChain.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda mempelajari bahawa: create_react_agent menggabungkan LLM, alat dan gesaan menjadi ejen ReAct, AgentExecutor mengurus gelung Thought/Action/Observation dengan had keselamatan yang boleh dikonfigurasikan, dan verbose=True serta return_intermediate_steps=True memberikan keterlihatan penuh terhadap penaakulan ejen. Seterusnya, kita akan mempelajari cara mengendalikan kegagalan ejen dan mencegah gelung tanpa penghujung.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Membina Ejen ReAct dengan LangChain” percuma?
Ya — teks penuh “Membina Ejen ReAct dengan LangChain” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Membina Ejen ReAct dengan LangChain”?
Pasang ejen ReAct lengkap menggunakan AgentExecutor LangChain bersama alat carian web, alat kalkulator dan alat carian dokumen, kemudian jejaki langkah penaakulannya. Anda berlatih AI Engineering Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan AI Engineering Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Membina Ejen ReAct dengan LangChain” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Rangka Kerja ReAct: Fikir, Bertindak, Perhati
- Menentukan Alat untuk Ejen Anda
- Membina Ejen ReAct dengan LangChain
- Mengendalikan Kegagalan dan Gelung Ejen