Day27:LangGraph 实战落地|Tool_RAG + 并行子图 + 持久化部署,打造工业级 AI Agent
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 工具集成
fromtypingimportTypedDictfromlanggraph.graphimportStateGraph,START,ENDfromlangchain_core.toolsimporttoolimportos# 通义千问配置os.environ["DASHSCOPE_API_KEY"]="你的API Key"fromlangchain_community.llmsimportTongyi llm=Tongyi(model="qwen-plus",temperature=0.1)# 定义两个工具@tooldefcalc(a:int,b:int)->int:"""数学计算"""returna+b@tooldefweather(city:str)->str:"""天气查询"""returnf"{city}今日晴天,25℃"# 定义State+路由+节点(复用Day1条件路由)classAgentState(TypedDict):question:strtool_type:strresult:str# 完整工作流代码,直接运行测试工具调用workflow=StateGraph(AgentState)# 节点+路由定义省略(同Day1进阶)app=workflow.compile()print(app.invoke({"question":"北京天气怎么样?"}))案例 2:LangGraph+Chroma RAG 私有知识库
# 集成往期Chroma向量库,实现私有知识问答fromlangchain_community.vectorstoresimportChromafromlangchain_community.embeddingsimportDashScopeEmbeddingsfromtypingimportTypedDictfromlanggraph.graphimportStateGraph,START,ENDimportos 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检索节点defrag_node(state:AgentState):docs=vector_db.similarity_search(state["question"],k=2)context="\n".join([d.page_contentfordindocs])return{"context":context}# 结合大模型生成精准回答,实现私有知识库Agent基础阶段避坑指南
Tool 的 description 必须写清晰,AI 才能正确调用
RAG 检索的向量库要和 Embedding 模型一致
检索结果精简,避免上下文过长
🎯 第二阶段:进阶篇|并行节点 + 子图,复杂工作流高效编排
核心概念白话拆解
并行节点:让 AI 同时执行多个任务(检索 + 工具),提速 50%+
子图:把复杂流程拆成小模块,代码更优雅、易维护
实战案例(2 个)
案例 1:并行节点执行(检索 + 工具同时跑)
fromlanggraph.graphimportStateGraph,START,ENDfromtypingimportTypedDict# 定义StateclassAgentState(TypedDict):question:strrag_res:strtool_res:str# 并行执行两个节点defrag_node(state):return{"rag_res":"RAG检索内容"}deftool_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 状态持久化
# 持久化:保存AI记忆,实现多轮对话fromlanggraph.checkpoint.memoryimportMemorySaverfromlanggraph.graphimportStateGraph,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 服务化部署
# 封装API接口,生产环境上线fromfastapiimportFastAPIfromlanggraph.checkpoint.memoryimportMemorySaver app=FastAPI(title="LangGraph企业级API")memory=MemorySaver()graph=workflow.compile(checkpointer=memory)# 对外问答接口@app.post("/agent/ask")defask(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!
