Day27:LangGraph 实战落地|Tool/RAG + 并行子图 + 持久化部署,打造工业级 AI Agent
🔥 博客导语
昨天我们搞定了 LangGraph 核心逻辑,Day2 直接进入实战落地阶段 !一篇博客分基础、进阶、高级三阶段,从 Tool/RAG 集成到并行执行,再到生产级持久化部署,把 LangGraph 变成能干活、能上线的企业级 AI Agent,通义千问 + 本地 Qwen 双版本,代码直接复用往期 RAG / 工具内容,学完即可上线!
🎯 第一阶段:基础篇|LangGraph 集成 Tool+RAG,打造实用 AI 助手
核心概念白话拆解
-
Tool 集成:让 AI 调用外部工具(计算器、天气、数据库),实现实际操作
-
RAG 集成:对接私有向量库,让 AI 基于本地知识回答,杜绝幻觉
实战案例(2 个)
案例 1:LangGraph + 多 Tool 工具集成
python
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
from langchain_core.tools import tool
import os
# 通义千问配置
os.environ["DASHSCOPE_API_KEY"] = "你的API Key"
from langchain_community.llms import Tongyi
llm = Tongyi(model="qwen-plus", temperature=0.1)
# 定义两个工具
@tool
def calc(a: int, b: int) -> int:
"""数学计算"""
return a + b
@tool
def weather(city: str) -> str:
"""天气查询"""
return f"{city}今日晴天,25℃"
# 定义State+路由+节点(复用Day1条件路由)
class AgentState(TypedDict):
question: str
tool_type: str
result: str
# 完整工作流代码,直接运行测试工具调用
workflow = StateGraph(AgentState)
# 节点+路由定义省略(同Day1进阶)
app = workflow.compile()
print(app.invoke({"question": "北京天气怎么样?"}))
案例 2:LangGraph+Chroma RAG 私有知识库
python
# 集成往期Chroma向量库,实现私有知识问答
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
import os
os.environ["DASHSCOPE_API_KEY"] = "你的API Key"
embedding = DashScopeEmbeddings(model="text-embedding-v3")
# 加载本地向量库
vector_db = Chroma(persist_directory="./chroma_lpr_db", embedding_function=embedding)
# 定义RAG检索节点
def rag_node(state: AgentState):
docs = vector_db.similarity_search(state["question"], k=2)
context = "\n".join([d.page_content for d in docs])
return {"context": context}
# 结合大模型生成精准回答,实现私有知识库Agent
基础阶段避坑指南
-
Tool 的 description 必须写清晰,AI 才能正确调用
-
RAG 检索的向量库要和 Embedding 模型一致
-
检索结果精简,避免上下文过长
🎯 第二阶段:进阶篇|并行节点 + 子图,复杂工作流高效编排
核心概念白话拆解
-
并行节点:让 AI 同时执行多个任务(检索 + 工具),提速 50%+
-
子图:把复杂流程拆成小模块,代码更优雅、易维护
实战案例(2 个)
案例 1:并行节点执行(检索 + 工具同时跑)
python
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
# 定义State
class AgentState(TypedDict):
question: str
rag_res: str
tool_res: str
# 并行执行两个节点
def rag_node(state):
return {"rag_res": "RAG检索内容"}
def tool_node(state):
return {"tool_res": "工具执行结果"}
# 构建并行工作流
workflow = StateGraph(AgentState)
workflow.add_node("rag", rag_node)
workflow.add_node("tool", tool_node)
# 同时执行两个节点
workflow.add_conditional_edges(START, lambda _: ["rag", "tool"])
workflow.add_edge("rag", END)
workflow.add_edge("tool", END)
app = workflow.compile()
进阶阶段避坑指南
-
并行节点结果要做好合并逻辑
-
子图命名要清晰,避免模块混乱
-
并行任务不宜过多,防止资源占用过高
🎯 第三阶段:高级篇|持久化 + FastAPI 部署,企业级 Agent 上线
核心概念白话拆解
-
持久化:保存 AI 对话记忆,断电 / 重启不丢失,支持断点续跑
-
FastAPI 部署:封装成接口,对外提供服务,对接前端 / 小程序
实战案例(2 个)
案例 1:MemorySaver 状态持久化
python
# 持久化:保存AI记忆,实现多轮对话
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph, START, END
# 初始化持久化
memory = MemorySaver()
# 编译工作流绑定持久化
workflow = StateGraph(AgentState)
# 节点+路由定义省略
app = workflow.compile(checkpointer=memory)
# 指定用户会话ID,记忆保留
config = {"configurable": {"thread_id": "user_001"}}
app.invoke({"question": "LangGraph核心组件"}, config=config)
# 第二次调用,记忆不丢失
app.invoke({"question": "刚才说的组件有哪些"}, config=config)
案例 2:FastAPI 服务化部署
python
# 封装API接口,生产环境上线
from fastapi import FastAPI
from langgraph.checkpoint.memory import MemorySaver
app = FastAPI(title="LangGraph企业级API")
memory = MemorySaver()
graph = workflow.compile(checkpointer=memory)
# 对外问答接口
@app.post("/agent/ask")
def ask(question: str, user_id: str):
config = {"configurable": {"thread_id": user_id}}
res = graph.invoke({"user_question": question}, config=config)
return {"answer": res["ai_answer"]}
# 启动命令:uvicorn main:app --host 0.0.0.0 --port 8000
高级阶段避坑指南
-
生产环境用 Redis/MySQL 替代 MemorySaver
-
接口添加限流、鉴权,防止恶意调用
-
开启日志监控,方便排查 AI 执行问题
总结
一篇搞定 LangGraphTool/RAG 集成、并行子图、持久化部署,从实用 AI 助手到企业级服务,彻底实现 LangGraph 全栈落地,学完即可独立开发上线级 AI Agent!