getfromcode我的博客 会员免费

LangGraph实战案例之 LangGraph 回复用户节点开发+工作流整体串联

这门课解决什么问题 当对话系统不再只是简单的单轮问答,而是需要根据上下文流转、调用不同逻辑节点(如关键词检索与生成回复)时,传统的单轮调用模式就会暴露出状态丢失和流程割裂的问题。这门课聚焦于 LangGraph 的核心实战,解决如何开发"回复用户"这一关键节点,以及如何将多个节点串联成可维护、可复用

单课价¥29新品 上架
会员价 会员免费开通会员,全站课程按额度无限下载套餐详情
125 人关注 更新于 2026-11-04 永久有效
发货

网盘链接 · 支付成功后自动发货

保障

永久有效 · 链接失效免费补发

客服

每日 9:00-21:00 在线客服 联系客服

购买方式开通会员 · 全站免费下单课购买 · 仅本课

支付成功后自动显示网盘下载链接;链接失效可联系客服免费补链,永久有效。

正版保障 极速发货 售后无忧

这门课解决什么问题

当对话系统不再只是简单的单轮问答,而是需要根据上下文流转、调用不同逻辑节点(如关键词检索与生成回复)时,传统的单轮调用模式就会暴露出状态丢失和流程割裂的问题。这门课聚焦于 LangGraph 的核心实战,解决如何开发"回复用户"这一关键节点,以及如何将多个节点串联成可维护、可复用的整体工作流。通过将 LLM 输出与业务逻辑节点解耦,开发者可以构建出具备记忆、分支和条件判断能力的复杂对话系统,让 AI 应用从"一个提示词走天下"升级为"有骨架、有路径的工程化系统"。

适合什么基础

建议具备 Python 基础,并对 LangChain/LangGraph 生态有初步认知。你需要理解基础的 Graph API 概念,了解如何定义状态(State)和构建节点(Node),但无需精通底层实现细节。课程将带你从节点开发过渡到工作流串联,适合希望将现有 LLM 应用从单轮调用升级为多步骤工作流的开发者。如果你已经能独立完成一个简单的 LangChain 应用,这门课就是下一步的实战跳板。

建议先看哪几块

建议按"节点开发→工作流串联→配置与复用"的顺序推进。首先理解 MessagesState 与 AIMessage 的流转机制,这是整个对话节点的基石;接着重点学习"回复用户"节点的实现方式,掌握如何将 LLM 输出与外部检索逻辑(如关键词匹配)组合为复合节点;最后将多个节点通过 START/END 和条件路由接入工作流,完成端到端的串联验证。过程中需要重点关注 `app.bailian.common` 模块中的 LLM 配置,它封装了模型调用与密钥管理,是工作流能否跑通的基础设施。

学完能独立做什么

学完后,你可以独立设计并实现一个具备多节点协作能力的对话工作流:从用户消息进入后,系统能根据状态判断调用不同的逻辑分支(如关键词命中则走检索路径,否则走直接生成路径),最终通过"回复用户"节点输出结构化响应。你不再依赖硬编码的 if-else 嵌套,而是用 LangGraph 的图结构表达业务逻辑,使得流程可读、可调试、可复用。这种能力可以直接迁移到客服机器人、知识库问答、多轮检索增强等实际场景中。

资料怎么配合练习

资料以源码片段和工程配置为主,没有视频讲解,需要动手对照实践。建议按模块顺序逐段阅读:先读懂 `app.bailian.common` 的 LLM 封装,再理解 `StateGraph` 和 `MessagesState` 的状态定义,最后对照工作流串联的代码,尝试修改关键词匹配逻辑或增加新的分支节点,观察输出变化。资料中反复出现的 `key_keywords` 和 `key_search` 是检索节点的核心参数,动手替换它们能快速验证不同检索策略对工作流的影响。不要跳过中间节点直接看整体串联,缺少状态理解的工作流代码会难以读懂。

921f97b9eb25f24bea828dcd13a21832.png

import os
from copyreg import constructor from langchain_core.prompt_values import StringPromptValue
from langgraph.graph import StateGraph, MessagesState
from langgraph.graph.state import CompiledStateGraph, StateGraph # 重复了
from langgraph.constants import START,END
from langchain_core.messages import AIMessage
from app.bailian.common import llm key_keywords="key_keywords"
key_search="key_search"
key_answer="key_answer" def node_key_keywords(state:MessagesState): last_message = state['messages'][-1] content = last_message.content prompt = StringPromptValue(text=f"请从下面的信息中提取需要在百度中搜索的关键词,并且直接返回结果:{content}") message = llm.invoke(input=prompt) state['messages'].append(message) return state def node_key_search(state:MessagesState): state['messages'].append(AIMessage(content="百度查询的天气结果是: 今天0度 有点冷")) return state
def node_key_answer(state:MessagesState): last_message = state['messages'][-1] content = last_message.content question = state['messages'][0].content message = llm.invoke(input=f""" # 要求 请结合百度提供的结果 回答用户的问题 {question} {content} """) state['messages'].append(message) return state def output_graph_image(graph,file_name): png_data = graph.get_graph().draw_png() output_file_dir = os.path.dirname(__file__) output_file_path = os.path.join(output_file_dir,file_name+'.png') with open(output_file_path,'wb') as f: f.write(png_data) state_graph = StateGraph(MessagesState)
state_graph.add_node(key_keywords,node_key_keywords)
state_graph.add_node(key_search,node_key_search)
state_graph.add_node(key_answer,node_key_answer) state_graph.add_edge(START,key_keywords)
state_graph.add_edge(key_keywords,key_search)
state_graph.add_edge(key_search,key_answer)
state_graph.add_edge(key_answer,END) compiled_graph = state_graph.compile() #output_graph_image(compiled_graph,'output_graph_image') results = compiled_graph.stream({ "messages":[("user","请问北京今天的天气如何")]
}) for result in results: print(result)