向远程图服务器发送请求 - 使用RemoteGraph与LangGraph交互
1. 案例目标
- 介绍LangGraph的基本概念和与LangServe的区别
- 演示如何使用RemoteGraph连接到远程LangGraph服务器
- 展示如何通过RemoteGraph进行同步和异步调用
- 实现流式输出功能,实时获取远程图执行结果
- 演示线程级持久性(Thread-level persistence)的使用方法
- 展示如何将RemoteGraph作为子图集成到父图中
2. 技术栈与核心依赖
LangGraphLangChainLangSmithOpenAIPython
- LangGraph:用于构建有状态、多参与者应用程序的库,支持循环和协作
- LangChain:用于构建AI应用的核心框架
- LangSmith:用于追踪、监控和评估LangChain应用的工具
- OpenAI:提供GPT模型用于自然语言处理
- Python:编程语言基础,支持异步编程特性
3. 环境配置
- 安装必要的Python包:langsmith, langchain, langchain_core等
- 配置OpenAI API密钥和LangChain追踪设置
- 安装LangGraph CLI工具:pip install langgraph-cli[inmem]
- 启动LangGraph开发服务器:langgraph dev
pip install langsmith langchain langchain_core langchain-anthropic langchain_community langchain_text_splitters langchain_openai langgraph
# 设置环境变量
set_env({
"OPENAI_API_KEY": "",
"LANGCHAIN_API_KEY": "",
"LANGCHAIN_TRACING_V2": "true",
"LANGCHAIN_ENDPOINT": "https://api.smith.langchain.com",
"LANGCHAIN_PROJECT": "RemoteGraph",
})
4. 案例实现
- LangGraph与LangServe的区别:
- LangGraph现在被推荐作为LangChain应用的服务化方案
- LangGraph支持流式输出、双文本处理、突发处理等高级功能
- LangGraph具有检查点功能和人在回路支持
- RemoteGraph基础使用:
- 创建RemoteGraph实例连接到远程服务器
- 使用invoke和ainvoke方法进行同步和异步调用
- 配置embedding_model、query_model等参数
- 流式输出实现:
- 使用astream方法获取远程图执行的实时结果
- 通过subgraphs=True参数获取子图的执行状态
- 线程级持久性:
- 创建同步客户端和线程
- 配置线程参数(config_thread)
- 验证对话历史的持久化效果
- 子图集成:
- 使用StateGraph创建父图
- 添加RemoteGraph作为子节点
- 连接START节点到子图
主要代码实现:
# 创建RemoteGraph实例
remote_graph = RemoteGraph(
"chat", # 图名称
url="http://localhost:2024", # 服务器URL
)# 同步调用
result = remote_graph.invoke(
{"messages": [{"role": "user", "content": "hi!"}]},
config
)# 异步流式调用
async for chunk in remote_graph.astream(
{"messages": [{"role": "user", "content": "what's the weather in sf"}]},
config,
subgraphs=True
):
print(chunk)# 创建父图并添加RemoteGraph作为子图
from langgraph.graph import StateGraph, MessagesState, STARTbuilder = StateGraph(MessagesState)
builder.add_node("child", remote_graph)
builder.add_edge(START, "child")
graph = builder.compile()
5. 案例效果
- 成功连接到远程LangGraph服务器并执行图操作
- 实现了同步和异步调用方式,满足不同场景需求
- 通过流式输出功能,实时获取远程图执行过程和结果
- 验证了线程级持久性功能,能够保持对话上下文
- 成功将RemoteGraph作为子图集成到父图中,实现复杂图结构
- 展示了LangGraph相对于LangServe的优势和特性
6. 案例实现思路
- 客户端-服务器架构:RemoteGraph作为客户端连接到远程LangGraph服务器
- 统一接口设计:RemoteGraph提供与本地Graph相同的API接口,透明处理远程调用
- 异步通信模型:支持同步和异步调用,适应不同应用场景
- 流式数据处理:通过生成器模式实现实时数据传输
- 状态持久化:通过线程ID实现对话上下文的持久化存储
- 图组合模式:支持将远程图作为子图集成到更大的图结构中
7. 扩展建议
- 添加认证和授权机制,增强远程图访问的安全性
- 实现负载均衡和故障转移,提高系统可用性
- 添加缓存机制,减少重复请求的网络开销
- 实现更复杂的子图组合模式,支持多级嵌套
- 添加性能监控和指标收集,便于系统优化
- 实现批量操作接口,提高处理效率
- 添加更多配置选项,如超时设置、重试策略等
- 支持更多通信协议,如WebSocket、gRPC等
8. 总结
该案例展示了如何使用RemoteGraph与远程LangGraph服务器进行交互,从基础连接到高级功能如流式输出和线程级持久性。案例详细介绍了LangGraph相对于LangServe的优势,并通过实际代码演示了RemoteGraph的各种用法。通过线程级持久性,系统能够保持对话上下文,提供更连贯的用户体验。此外,案例还展示了如何将RemoteGraph作为子图集成到更大的图结构中,实现复杂的应用逻辑。这个案例为构建分布式AI应用提供了完整的参考实现,展示了现代图计算框架与远程服务结合的最佳实践。
技术要点总结
向远程图服务器发送请求案例展示了分布式AI应用架构的强大能力。通过RemoteGraph,开发者可以透明地访问远程LangGraph服务,无需关心底层通信细节。该案例的关键技术点包括异步通信、流式处理、状态持久化和图组合等,这些技术点为构建大规模分布式AI系统奠定了基础。此外,该案例还展示了如何将复杂的AI逻辑分布在不同的服务中,实现更好的系统解耦和可扩展性。LangGraph作为LangChain生态的新成员,为AI应用的服务化部署提供了更强大、更灵活的解决方案。