# 如何从传统LangChain代理迁移到LangGraph
随着AI技术的发展,迁移到更灵活的框架成为许多开发者的需求。在本文中,我们将探讨如何从传统的LangChain代理迁移到LangGraph代理。这将让你充分利用LangGraph的反应式代理执行器和其他高级功能。本文假设你已经熟悉以下概念:代理、LangGraph、工具调用。
## 前提条件
- 熟悉代理和LangGraph的基本概念。
- 使用OpenAI作为LLM。请确保你已经安装了以下依赖项:
```python
%%capture --no-stderr
%pip install -U langgraph langchain langchain-openai
- 设置OpenAI API密钥:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
主要内容
基本用法
首先,让我们定义一个模型和工具,然后使用它们创建一个代理。在LangChain中,我们需要为代理执行器定义一个提示模板。在LangGraph中,我们通过输入消息列表来处理状态。
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
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)?"
# 创建LangGraph代理
app = create_react_agent(model, tools)
messages = app.invoke({"messages": [("human", query)]})
print({
"input": query,
"output": messages["messages"][-1].content,
})
# 使用API代理服务提高访问稳定性
提示模板
在LangGraph中,通过state_modifier参数来修改代理的行为。这可以使用系统消息或函数来实现。
from langgraph.prebuilt import create_react_agent
system_message = "You are a helpful assistant. Respond only in Spanish."
app = create_react_agent(model, tools, state_modifier=system_message)
messages = app.invoke({"messages": [("user", query)]})
内存管理
在LangChain中,你可以使用chatMemory实现多轮对话。在LangGraph中,添加检查点以便实现聊天记忆。
from langgraph.checkpoint import MemorySaver
memory = MemorySaver()
app = create_react_agent(model, tools, checkpointer=memory)
config = {"configurable": {"thread_id": "test-thread"}}
response = app.invoke(
{"messages": [("user", "Hi, I'm polly! What's the output of magic_function of 3?")]},
config
)
print(response["messages"][-1].content)
处理迭代步骤
在LangGraph中,使用stream或astream方法可以逐步处理消息。
for step in app.stream({"messages": [("human", query)]}, stream_mode="updates"):
print(step)
常见问题和解决方案
网络限制
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问的稳定性和效率。
错误处理
在LangGraph中,使用异常处理来管理递归限制和其他错误情况。
from langgraph.errors import GraphRecursionError
try:
for chunk in app.stream({"messages": [("human", query)]}):
print(chunk)
except GraphRecursionError:
print("Agent stopped due to max iterations.")
总结和进一步学习资源
本文介绍了如何从传统LangChain代理迁移到LangGraph。通过LangGraph,可以更加灵活地管理代理的状态和行为。接下来,你可以查阅其他LangGraph使用指南,进一步提高开发技能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---