在本指南中,我们将展示如何从传统的 LangChain 代理迁移到更为灵活的 LangGraph 代理。LangChain的 `AgentExecutor` 有多种配置参数。在这里,我们将展示这些参数如何映射到 LangGraph 的 ReAct 代理执行器,并使用 `create_react_agent` 预建方法进行帮助。
## 技术背景介绍
随着 AI 技术的进步,开发人员对工具调用代理的需求也越来越复杂。LangChain 提供的传统代理已成为许多开发者的首选,然而其灵活性受到一定限制。为了解决这一问题,LangGraph 提供了更强大的扩展功能,支持更多的配置选项和状态管理。
## 核心原理解析
LangGraph 的 ReAct 代理执行器通过状态管理消息列表来实现。在整个执行过程中,它会继续处理列表,直到代理的输出中不再有工具调用。通过输入一个消息列表来启动代理,输出将包含整个会话历史。
## 代码实现演示
### 环境准备
使用 OpenAI 作为语言模型。
```python
import os
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "sk-..."
model = ChatOpenAI(model="gpt-4o")
基本用法
从工具调用的 ReAct 风格代理的基本创建和使用开始。首先定义模型和工具,然后使用它们来创建代理。
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool
@tool
def magic_function(input: int) -> int:
"""Applies a magic function to an input."""
return input + 2
tools = [magic_function]
app = create_react_agent(model, tools)
query = "what is the value of magic_function(3)?"
messages = app.invoke({"messages": [("human", query)]})
print({"input": query, "output": messages["messages"][-1].content})
输出结果:
{'input': 'what is the value of magic_function(3)?', 'output': 'The value of magic_function(3) is 5.'}
自定义提示模板
在这里,我们可以通过传递自定义系统消息或使用函数来实现对代理行为的控制。例如,指示代理仅用西班牙语回复。
system_message = "You are a helpful assistant. Respond only in Spanish."
app = create_react_agent(model, tools, state_modifier=system_message)
query = "what is the value of magic_function(3)?"
messages = app.invoke({"messages": [("user", query)]})
print({"input": query, "output": messages["messages"][-1].content})
输出结果:
{'input': 'what is the value of magic_function(3)?', 'output': 'El valor de magic_function(3) es 5.'}
应用场景分析
LangGraph 提供更为复杂的状态管理,能够支持长时间运行及多轮对话的场景,非常适合需要复杂逻辑处理的应用场景,如多工具链的调用,自动化任务执行等。
实践建议
迁移到 LangGraph 后,可以充分利用其灵活的状态管理和扩展功能。建议结合具体应用场景进行参数调节,使代理能够更好地满足业务需求。对于复杂的工具使用场景,可以利用状态修饰器来实现复杂的消息处理逻辑。
如果遇到问题欢迎在评论区交流。
---END---