如何从传统LangChain代理迁移到LangGraph

349 阅读2分钟
# 如何从传统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使用指南,进一步提高开发技能。

参考资料

  1. LangGraph 官方文档
  2. OpenAI API 参考

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

---END---