第 2.16.3 节:把 LangGraph、前端、部署和观测接成端到端系统
LangGraph、前端、部署与观测只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够按顺序说明 LangGraph、前端、部署与观测的触发、处理、复核、记录和兜底步骤。
实现步骤或决策流程
读图重点:上组是用户请求的运行链:入口、工作流、检索、工具和人工协作;下组是治理链:状态、部署、追踪与恢复。两组通过 trace_id 和 workflow_state 对齐。
推荐技术流
综合项目推荐按“低风险闭环优先、再逐步增强”的技术流推进。
| 阶段 | 推荐做法 | 为什么 |
|---|---|---|
| 需求发现 | 访谈业务目标、角色、资料、系统、风险和验收 | 防止把一句“做 AI(人工智能)客服”误解成一个聊天框。 |
| 资料准备 | 建资料清单、负责人、版本、权限和状态 | RAG(检索增强生成)效果先取决于资料能不能被信任。 |
| 知识链路 | 文档解析、分块、Embedding(嵌入向量)、索引、重排、引用 | 先证明资料问题能被正确回答。 |
| 分流链路 | 识别查询意图,区分资料问题、工具问题、高风险问题 | 防止错误路径,例如用知识库回答订单状态。 |
| 工具链路 | 先接只读工具,再做低风险写入草稿,最后考虑高风险审批 | 工具调用风险按等级释放。 |
| 工作流编排 | 用 LangGraph(智能体状态图框架)管理状态、分支、重试和人工接管 | 多步骤任务不能靠一次模型自由发挥。 |
| 前端工作台 | 展示会话、引用、工具计划、审批、转人工、质检和日志 | 让客服能参与,而不是被黑盒回答替代。 |
| 部署治理 | Docker(容器工具)、Nginx(反向代理服务器)、环境变量、密钥、备份、监控 | 从 Demo(演示)进入可运行服务。 |
| 可观测性 | 记录 Trace ID(追踪编号)、模型调用、检索结果、工具结果、耗时和成本 | 出错时能定位是资料、检索、模型、工具还是权限问题。 |
| 安全发布 | Guardrail(护栏)、权限、审批、限流、发布检查、回滚 | 确保系统不会越权、泄露或自动执行高风险动作。 |
| 商业验收 | 验收问题集、通过标准、培训交接、维护方式 | 项目完成不是“能聊天”,而是双方确认可用边界。 |
作品集可以先做到“试点版”:资料治理、知识库 RAG、引用、拒答、基础工具计划、前端工作台和日志。商业生产项目再加入多租户、MCP(模型上下文协议)工具生态、复杂审批、监控告警、成本管理和维护流程。
字段契约
字段契约是综合项目的骨架。没有字段契约,前端、后端、模型调用、工具执行、日志和质检就会各说各话。
本章不写代码,只用表格说明关键字段。实际项目可以把这些字段落到接口、数据库、日志和前端状态里。
综合请求与回答契约
| 字段 | 中文含义 | 由谁产生 | 用在哪里 | 验收要求 |
|---|---|---|---|---|
project_id(项目编号) | 当前客服 Agent(智能体)项目编号 | 项目配置或后台生成 | 范围、发布、验收和日志 | 同一个项目的资料、工具、验收集能关联。 |
tenant_id(租户编号) | 企业或客户组织编号 | 登录系统或租户配置 | 权限过滤、资料隔离、工具隔离 | 不同租户资料和工具不能串用。 |
session_id(会话编号) | 一次连续客服会话编号 | 会话系统生成 | 多轮上下文、转人工、质检 | 同一会话能复盘完整上下文。 |
query_intent(查询意图) | 系统判断用户问题类型 | 查询理解模块 | 路由到 RAG、工具、人工或普通回答 | 典型问题分流准确,错误分流可纠正。 |
retrieval_context(检索上下文) | 检索到的片段、来源、版本、分数、权限 | RAG 模块 | 生成回答、引用展示、质检复盘 | 关键回答能追溯到片段和资料版本。 |
tool_plan(工具计划) | 计划调用哪些工具、为什么调用、风险等级 | 工具计划模块或工作流节点 | 工具卡片、审批、执行日志 | 写入和高风险工具必须进入确认或审批。 |
workflow_state(工作流状态) | 当前任务处于哪个节点和状态 | LangGraph(智能体状态图框架)或工作流服务 | 前端状态、重试、转人工、恢复 | 中断后能知道停在哪里。 |
approval_status(审批状态) | 是否待确认、已批准、已拒绝或不需要审批 | 审批模块或人工操作 | 高风险动作、工单、退款、外部联系 | 未批准的高风险动作不能执行。 |
answer_draft(回答草稿) | 模型生成但可能需客服确认的回答 | 生成模块 | 前端编辑、人工确认、发送 | 草稿与已发送答案要区分。 |
citation_refs(引用来源) | 回答依据的资料、版本、片段和可见范围 | RAG 模块 | 前端引用、质检、验收 | 关键结论必须有引用,外部展示要按权限过滤。 |
quality_score(质量评分) | 系统或质检对回答质量的评分 | 质检模块、规则或人工 | 发布质量、复盘、数据看板 | 低分回答能进入复盘队列。 |
handoff_required(是否转人工) | 是否需要人工接管 | 风险规则、工作流或客服操作 | 转人工、工单、会话状态 | 高风险、低依据、用户不满时能触发。 |
release_version(发布版本) | 当前系统、资料或策略发布版本 | 发布系统 | 问题追踪、回滚、验收 | 历史回答能对应当时发布版本。 |
trace_id(追踪编号) | 一次请求的全链路追踪编号 | 请求入口生成 | 日志、监控、排错、审计 | 任意问题都能用追踪编号复盘。 |
这张表可以直接作为作品集项目的核心材料。面试官问“你怎么证明这个系统不是黑盒”,你可以从 trace_id(追踪编号)、retrieval_context(检索上下文)、tool_plan(工具计划)、approval_status(审批状态) 和 citation_refs(引用来源) 回答。
资料与知识片段契约
| 字段 | 中文含义 | 用途 | 验收要求 |
|---|---|---|---|
document_id(资料编号) | 一份资料的唯一标识 | 关联原文、版本和引用 | 引用能回到原始资料。 |
document_title(资料标题) | 资料名称 | 前端展示和引用说明 | 客服和业务人员能看懂。 |
source_type(来源类型) | PDF(便携式文档格式)、网页、FAQ(常见问题)、历史工单等 | 解析策略和质量评估 | 不同格式能按规则处理。 |
owner(负责人) | 谁负责资料准确性 | 出错复盘和更新 | 每份正式资料都有负责人。 |
version(版本) | 资料版本 | 引用和冲突处理 | 新旧资料可区分。 |
visibility(可见范围) | 外部客户、内部客服、主管、管理员等 | 权限过滤 | 外部用户不能检索内部资料。 |
status(状态) | 草稿、待审核、已发布、已失效、索引失败等 | 发布和索引控制 | 只有已发布资料进入正式回答。 |
chunk_id(分块编号) | 知识片段编号 | 检索、引用和复盘 | 片段能定位原文位置。 |
heading_path(标题路径) | 片段所在章节路径 | 提升引用可读性 | 引用不只是显示文件名。 |
quality_flags(质量标记) | 扫描件质量差、表格缺失、冲突疑似等 | 质量控制 | 低质量片段不直接用于高风险回答。 |
工具与审批契约
| 字段 | 中文含义 | 用途 | 验收要求 |
|---|---|---|---|
tool_name(工具名称) | 要调用的业务工具 | 前端工具卡片和日志 | 客服知道系统要做什么。 |
tool_purpose(调用目的) | 为什么需要这个工具 | 审批和复盘 | 不能无理由调用敏感工具。 |
risk_level(风险等级) | 只读、低风险写入、高风险动作 | 决定是否审批 | 高风险动作必须人工确认。 |
required_role(所需角色) | 谁有权执行 | 权限检查 | 无权限时不能调用。 |
input_summary(输入摘要) | 工具输入的业务摘要 | 人工确认 | 审批人能看懂,不需要读技术细节。 |
tool_result(工具结果) | 工具返回的业务结果 | 回答生成和日志 | 工具失败要有可理解原因。 |
idempotency_key(幂等键) | 防重复执行标识 | 防止重复建单或重复提交 | 重试不会造成重复业务动作。 |
approval_note(审批说明) | 审批人的意见 | 审计和复盘 | 高风险动作有审批记录。 |
发布与验收契约
| 字段 | 中文含义 | 用途 | 验收要求 |
|---|---|---|---|
acceptance_case_id(验收用例编号) | 一条验收问题编号 | 验收问题集 | 能反复测试。 |
scenario(场景) | 资料问答、订单查询、退款申请、权限越权等 | 覆盖业务风险 | 成功和失败场景都要有。 |
expected_behavior(期望行为) | 系统应该怎么处理 | 验收标准 | 不要求固定字面答案,但要求行为正确。 |
must_include(必须包含) | 回答或动作必须包含的要点 | 业务审核 | 关键政策和限制不能漏。 |
must_not_include(不能包含) | 不能出现的内容 | 风险控制 | 不出现无依据承诺或内部信息泄露。 |
pass_result(通过结果) | 通过、失败、需复测 | 发布门禁 | 未通过用例要有修复记录。 |
release_gate(发布门禁) | 是否允许进入试点、生产或回滚 | 发布管理 | 不能只凭感觉上线。 |
制作步骤
下面是一条从 0 到可验收试点的制作路线。它适合作为学习项目,也适合作为商业项目的方案骨架。
第一步:做需求访谈和范围确认
先确认 6 类问题:
- 业务目标:减少重复咨询、提升新人客服一致性、缩短处理时间,还是增强质检复盘?
- 使用者:外部客户、一线客服、售后运营、主管、质检还是管理员?
- 资料范围:产品资料、售后政策、FAQ(常见问题)、话术、培训手册、历史工单分别在哪里?
- 系统范围:是否接订单、物流、工单、CRM(客户关系管理系统)和统一登录?
- 自动化边界:哪些只生成草稿,哪些可以自动执行,哪些必须人工确认?
- 验收方式:用哪些场景、问题集和日志证明系统可用?
不要在这些问题没回答之前讨论模型参数。模型只是实现手段,不是项目范围。
第二步:建立资料台账和治理规则
给每份资料建立资料台账:标题、来源、负责人、版本、状态、可见范围、生效时间、失效时间和质量标记。
资料状态建议至少包含:
| 状态 | 是否进入正式回答 | 说明 |
|---|---|---|
| 草稿 | 否 | 未审核资料不能作为企业承诺。 |
| 待审核 | 否 | 业务负责人还没确认。 |
| 已发布 | 是 | 可进入正式索引和回答。 |
| 需更新 | 视规则 | 可以提示风险或暂时降权。 |
| 已失效 | 否 | 只能保留审计,不用于新回答。 |
| 索引失败 | 否 | 需要修复解析或分块。 |
资料治理是综合项目的地基。地基不清,后面调再多模型也没有意义。
第三步:设计文档解析和标准中间格式
文档解析要解决“原始资料如何变成可处理内容”。你不需要在本章写解析代码,但要定义解析输出应该包含什么:
- 正文内容。
- 标题层级。
- 表格内容。
- 图片或附件说明。
- 原文位置。
- 资料版本。
- 可见范围。
- 解析质量标记。
解析结果必须能追溯回原文。否则用户问“依据在哪里”,系统只能说“来自某个文件”,这不够验收。
第四步:设计分块、Embedding(嵌入向量)、索引和重排
分块不是随便按字数切。客服资料里,售后政策、产品参数、FAQ(常见问题)和投诉流程的结构不同,分块策略也不同。
推荐原则:
- 分块要保留标题路径和资料版本。
- 一个片段尽量包含完整业务结论。
- 表格资料要保留列名和行含义。
- 旧版本和新版本不能混成一个片段。
- 外部可见和内部可见资料不能混在同一个检索范围。
- 检索后要做重排和阈值判断。
- 低置信度、冲突和无引用要拒答或转人工。
索引完成后,不要只问一句“能不能答”。要用验收问题集检查命中、引用、拒答和权限。
第五步:设计查询意图识别和路由
综合 Agent 不能把所有问题都丢给同一条链路。
| 查询意图 | 示例 | 推荐路径 |
|---|---|---|
| 企业资料问答 | “A 产品保修多久?” | RAG。 |
| 业务状态查询 | “我的订单到哪了?” | 工具调用。 |
| 写入动作 | “帮我建个投诉工单。” | 工具计划 + 人工确认或低风险执行。 |
| 高风险争议 | “你们必须赔我多少钱?” | 转人工或审批。 |
| 通用解释 | “什么是保修?” | 普通回答或引导到企业政策。 |
| 权限敏感 | “内部补偿规则是什么?” | 权限检查,不可见则拒答。 |
这一步会产生 query_intent(查询意图)。后面所有模块都依赖它,所以分流结果要写入日志,便于纠错。
第六步:设计 RAG(检索增强生成)回答链路
RAG 链路至少包含 7 个动作:
- 根据租户和角色确定可检索资料范围。
- 根据查询意图生成检索请求。
- 召回候选片段。
- 重排并过滤低质量片段。
- 判断资料是否足够、是否冲突、是否过期。
- 生成
answer_draft(回答草稿)和citation_refs(引用来源)。 - 根据风险决定直接展示、客服确认、拒答或转人工。
这里的关键不是让回答更长,而是让回答有依据、有边界、有引用。
第七步:设计工具调用和 MCP(模型上下文协议)接入
工具链路要先分级:
| 工具类型 | 示例 | 处理方式 |
|---|---|---|
| 只读查询 | 查订单、查物流、查工单状态 | 有权限可直接执行,记录日志。 |
| 低风险写入 | 创建工单草稿、添加备注 | 可生成草稿,必要时客服确认。 |
| 高风险动作 | 退款、发券、外部联系、关闭投诉 | 必须审批,不允许模型直接执行。 |
| 管理工具 | 修改资料状态、发布索引、调整权限 | 仅管理员可用,并记录审计。 |
当工具数量多、客户端多、需要复用时,可以把工具能力通过 MCP 组织起来。MCP 解决“工具如何标准化暴露”,但不解决“谁可以调用、何时审批、失败如何兜底”。这些仍然要由业务系统设计。
第八步:用 LangGraph(智能体状态图框架)组织工作流
当流程变成多步骤,就需要显式状态。
一个退款咨询可能这样流转:
- 识别用户问题为退款相关。
- 检索退款政策。
- 调用订单工具查询订单状态。
- 判断是否满足基础条件。
- 生成客服回复草稿。
- 如果用户要求提交申请,生成工单草稿。
- 等待客服确认。
- 记录结果和质检信息。
每一步都要写入 workflow_state(工作流状态)。失败时要知道是检索失败、工具失败、审批未通过,还是用户需要补充信息。
第九步:决定是否需要多智能体
多智能体适合职责差异明显的场景。例如:
- Router(路由)智能体:判断查询意图和风险。
- Knowledge(知识)智能体:处理资料检索和引用。
- Tool(工具)智能体:生成工具计划并检查权限。
- Ticket(工单)智能体:整理工单草稿和转人工信息。
- QA(质检)智能体:复盘回答质量和引用准确性。
如果项目还很小,一个主流程足够,不要为了“多智能体”而拆。拆分后必须有交接字段、主控规则和日志。否则系统会更难调试。
第十步:设计前端工作台
前端不是把聊天结果显示出来就结束。客服工作台至少要有这些区域:
| 区域 | 展示内容 | 作用 |
|---|---|---|
| 会话区 | 用户问题、系统草稿、客服确认、历史上下文 | 让客服理解当前对话。 |
| 引用区 | 资料标题、版本、片段摘要、可见范围 | 让客服验证依据。 |
| 工具区 | 工具计划、输入摘要、风险等级、执行结果 | 让客服知道系统准备做什么。 |
| 审批区 | 待确认动作、审批状态、审批说明 | 控制高风险动作。 |
| 转人工区 | 转人工原因、建议处理人、工单摘要 | 支持接管。 |
| 质检区 | 质量评分、用户反馈、问题标签 | 支持复盘。 |
| 日志区 | trace_id(追踪编号)、发布版本、耗时、错误 | 支持排错。 |
面试时,你可以强调:工作台不是为了好看,而是为了让 AI 的建议可检查、可修改、可接管。
第十一步:部署、可观测性和成本控制
试点版也要考虑运行问题。最低要求包括:
- 环境隔离:开发、测试、生产配置分开。
- 密钥管理:模型密钥、数据库密码、工具凭证不写进页面或文档。
- 健康检查:知道 API(应用程序接口)、向量数据库、工具服务是否可用。
- 日志追踪:每次请求有
trace_id(追踪编号)。 - 成本记录:模型调用、Embedding(嵌入向量)、重排、工具耗时可见。
- 限流策略:防止异常请求拖垮服务或费用失控。
- 备份和回滚:资料、索引、配置和发布版本可以恢复。
部署不是最后一天才想的事。字段契约、日志和发布版本从一开始就要留位置。
第十二步:设计安全、发布质量和商业验收
发布前要跑验收问题集,而不是靠开发者自己试几句。
验收至少覆盖:
- 正常资料问答。
- 无资料拒答。
- 资料冲突。
- 过期资料。
- 外部用户越权问题。
- 内部客服资料问题。
- 订单查询工具。
- 工单草稿工具。
- 高风险退款或补偿。
- 转人工。
- 工具失败。
- 发布回归。
商业验收还要确认培训、交接、维护和变更流程。否则客户会把后续新增需求继续当成“没做完”。
和后续章节关系
本章是第 2 卷工程实战篇的收束章,因此它和“后续章节”的关系不是继续展开某个技术细节,而是把读者带到第 3 卷行业迁移和求职作品集。
| 后续内容 | 本章提供什么基础 |
|---|---|
| 第 3 卷行业案例 | 用本章的制作路线迁移到电商、教育、医疗、企业内训、销售支持等行业。 |
| 50 个项目案例 | 每个项目都可以套用需求、资料、工具、权限、验收和风险拆解。 |
| 作品集项目 | 本章提供主项目讲法和追问回答框架。 |
| 求职面试模块 | 把技术能力讲成业务目标、系统方案、验收标准和复盘能力。 |
| 商业接单 | 把一句需求拆成范围、报价、里程碑、验收和维护。 |
如果第 2 卷前面章节是“零件”,本章就是“装配说明和验收总图”。
版本与资料来源
本章是工程实战篇收束章,不提供完整源码,不讲 Python(编程语言)、TypeScript(类型化脚本语言)、JavaScript(脚本语言)或 JSON(结构化数据格式)语法,重点讲综合知识库 Agent 的制作路线、字段契约、系统边界、失败兜底、发布质量和面试表达。
资料依据:
- 本书第 2 卷前序章节:RAG 边界、文档解析、资料治理、分块、Embedding(嵌入向量)、索引、重排、向量数据库、MCP、LangGraph(智能体状态图框架)、多智能体、前端工作台、部署、可观测性、安全、发布质量和商业验收。
- OpenAI(模型服务商) API 文档:https://developers.openai.com/api/docs
- OpenAI(模型服务商) Embeddings(嵌入向量接口)文档:https://developers.openai.com/api/docs/guides/embeddings
- LangGraph(智能体状态图框架)文档:https://langchain-ai.github.io/langgraph/
- Model Context Protocol(模型上下文协议)文档:https://modelcontextprotocol.io/
- Qdrant(向量数据库产品)文档:https://qdrant.tech/documentation/
- OWASP Top 10 for LLM Applications(大语言模型应用十大安全风险):https://owasp.org/www-project-top-10-for-large-language-model-applications/
过时风险:模型能力、Embedding(嵌入向量)模型、向量数据库、MCP 生态、LangGraph(智能体状态图框架)接口、云部署方式和安全合规要求都会变化。进入真实项目开发或商业交付前,必须重新核对当前官方文档、客户系统权限、资料授权、模型成本和行业合规要求。