第 2.10.3 节:把工具审批卡片和前端状态接入复核流程
工具审批卡片和前端状态只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够写出工具审批卡片和前端状态的验收样例、通过/不通过标准、判断阈值和风险说明。
实现步骤或决策流程
推荐技术流
本章不要求读者立刻掌握某个前端框架。推荐技术流是从“界面能力”倒推,而不是从“我要用哪个框架”出发。
| 阶段 | 推荐做法 | 重点 |
|---|---|---|
| 原型阶段 | 用静态页面或低代码原型画出工作台 | 先确认信息架构和状态,不急着写复杂交互。 |
| MVP(最小可行产品)阶段 | 使用 React(前端框架)或类似组件化框架 | 拆出对话、引用、工具卡片、审批卡片和状态组件。 |
| 接口联调阶段 | 用稳定字段契约连接后端 | 不把后端原始日志直接暴露给用户。 |
| 试点阶段 | 加入权限提示、转人工、质检反馈和管理配置 | 验证真实客服流程能不能跑通。 |
| 生产阶段 | 加入监控、可访问性、审计日志、错误分级和配置开关 | 让系统可维护、可追责、可扩展。 |
推荐技术组合可以这样理解:
| 能力 | 可以选择的技术方向 | 本章关注点 |
|---|---|---|
| 页面框架 | React(前端框架)、Vue(前端框架)、Svelte(前端框架)等 | 不讲语法,只要求组件边界清楚。 |
| 数据请求 | REST(表现层状态转移接口风格)接口、Server-Sent Events(服务器发送事件)、WebSocket(双向通信协议) | 能展示流式状态和中间事件。 |
| 状态管理 | URL(统一资源定位符)参数、本地状态、服务端会话状态 | conversation_id(对话编号)和任务状态不能丢。 |
| UI(用户界面)组件 | 对话列表、卡片、徽标、表格、抽屉、弹窗 | 每个组件对应一个业务事实。 |
| 可观测性 | Trace ID(追踪编号)、日志摘要、前端错误上报 | 用户操作和后端链路能串起来。 |
新手要记住:前端技术栈不是本章重点。真正的重点是,你能不能把 Agent(智能体)系统的状态设计成用户看得懂、客服接得住、管理员查得到的界面。
字段契约
前端和后端之间必须有稳定字段契约。没有契约,前端只能猜后端状态,后端也不知道前端需要展示什么。
下面这张表是本章的核心交付物,覆盖客服 Agent 工作台最小字段。
| 字段 | 中文含义 | 前端展示位置 | 来源 | 设计原因 |
|---|---|---|---|---|
conversation_id(对话编号) | 一段多轮客服对话的编号 | 对话详情、日志摘要、客服接管页 | 会话系统生成 | 串联多轮消息、工具调用、转人工和质检。 |
message_id(消息编号) | 单条消息编号 | 消息气泡、反馈记录、引用定位 | 消息服务生成 | 让每条回答可追踪、可反馈、可复盘。 |
role(角色) | 消息发送者身份 | 消息头像或标签 | 用户、Agent、客服、系统 | 区分用户、模型、人工客服和系统提示。 |
content_summary(内容摘要) | 消息或工具结果的简短摘要 | 对话列表、客服接管摘要、日志摘要 | Agent 或后端摘要服务 | 让客服快速理解上下文,避免阅读全部原文。 |
citations(引用来源) | 回答依据的资料列表 | 回答下方、引用抽屉、质检页 | RAG(检索增强生成)检索层 | 降低黑箱感,支持依据检查和资料更新。 |
tool_call_card(工具调用卡片) | 工具调用的可视化信息 | 对话流中间、工具时间线 | Tool Calling(工具调用)层 | 展示工具名称、状态、输入摘要、输出摘要和错误。 |
approval_card(审批卡片) | 高风险动作的审批信息 | 对话流、审批中心、主管页 | 审批中心 | 支持人工确认、拒绝、修改和审计。 |
state_badge(状态标识) | 当前消息或任务状态 | 消息右上角、任务进度条 | 状态机或任务系统 | 让用户知道处理中、需要补充信息、审批中、失败或完成。 |
error_banner(错误提示条) | 用户可见错误提示 | 对话顶部、卡片内部、页面顶部 | 后端错误映射层 | 把技术错误转换成可理解、可操作的提示。 |
handoff_status(转人工状态) | 人工接管进度 | 转人工面板、对话底部 | 工单系统或客服系统 | 告诉用户是否已排队、已接管、已完成或失败。 |
permission_notice(权限提示) | 权限不足或字段隐藏说明 | 引用卡、工具卡、管理页 | 权限系统 | 解释为什么看不到资料、不能调用工具或需要登录。 |
trace_id(追踪编号) | 串联一次请求链路的编号 | 日志摘要、客服内部视图、错误详情 | 可观测性系统生成 | 排查问题时连接前端操作、后端检索、工具和日志。 |
feedback_score(反馈评分) | 用户或质检对回答的评价 | 回答底部、质检页、统计面板 | 用户反馈或质检系统 | 衡量回答质量,驱动优化和复盘。 |
这些字段不是为了“显得专业”,而是为了让前端知道该展示什么、何时展示、给谁展示、失败时怎么展示。
对话消息字段
| 字段 | 含义 | 展示建议 |
|---|---|---|
message_id(消息编号) | 单条消息唯一编号 | 不一定给普通用户看,但要用于反馈和日志。 |
role(角色) | user、assistant、human_agent、system 等 | 用户端用头像或标签表达,管理员端可显示完整角色。 |
content_summary(内容摘要) | 消息摘要 | 客服接管时优先展示摘要,再允许展开全文。 |
state_badge(状态标识) | drafting、answering、needs_info、completed 等 | 避免用户误以为系统卡死。 |
feedback_score(反馈评分) | 点赞、点踩、1 到 5 分或质检分 | 反馈要绑定具体消息,而不是只绑定整段对话。 |
引用来源字段
| 字段 | 含义 | 展示建议 |
|---|---|---|
| source_title(来源标题) | 资料标题 | 显示给用户和客服。 |
| source_type(来源类型) | 政策、订单、工单、FAQ(常见问题)等 | 帮用户判断依据性质。 |
| source_version(来源版本) | 资料版本或生效时间 | 防止引用过期资料。 |
| snippet_summary(片段摘要) | 命中内容摘要 | 不直接暴露无权限原文。 |
| permission_notice(权限提示) | 是否隐藏部分字段 | 普通用户看到“部分内部字段已隐藏”。 |
工具调用卡片字段
| 字段 | 含义 | 展示建议 |
|---|---|---|
| tool_name(工具名称) | 查询订单、创建工单等 | 用业务名称,不用内部接口名。 |
| tool_action_summary(动作摘要) | 工具要做什么 | 例如“查询订单发货状态”。 |
| tool_status(工具状态) | pending、running、success、failed、blocked | 用状态标识和进度提示。 |
| tool_input_summary(输入摘要) | 关键输入 | 只展示脱敏后的订单号、问题类型等。 |
| tool_output_summary(输出摘要) | 工具返回摘要 | 成功时展示结果,失败时展示可理解原因。 |
| trace_id(追踪编号) | 链路编号 | 普通用户不必看,客服和管理员可见。 |
审批卡片字段
| 字段 | 含义 | 展示建议 |
|---|---|---|
| approval_id(审批编号) | 审批单编号 | 审批中心和日志可见。 |
| proposed_action(拟执行动作) | Agent 建议执行的动作 | 用业务语言展示,例如“发起退款申请”。 |
| evidence_refs(证据引用) | 支撑审批的资料和工单 | 审批人可以展开查看。 |
| risk_reason(风险原因) | 为什么需要审批 | 例如涉及资金、外部联系或敏感投诉。 |
| approval_status(审批状态) | pending、approved、rejected、expired | 直接影响工具是否能继续。 |
| approval_card(审批卡片) | 前端聚合后的卡片对象 | 对话流和审批中心复用。 |
读图重点:审批卡不是确认按钮:pending 期间工具必须暂停;只有 approved 能进入执行,rejected、expired 和执行失败都要留下可复盘记录。
制作步骤
第一步:先画工作台信息架构
不要一开始就写聊天页面。先画出客服工作台需要哪些区域。
| 区域 | 必须回答的问题 |
|---|---|
| 对话区 | 用户和 Agent 说了什么?当前回答状态是什么? |
| 引用区 | 回答依据哪些资料?资料是否过期或无权限? |
| 工具区 | 系统调用了什么工具?执行结果是什么? |
| 审批区 | 哪些动作需要人确认?审批状态是什么? |
| 转人工区 | 是否已转人工?谁接管?当前进度是什么? |
| 日志摘要区 | 这次对话怎么复盘?trace_id(追踪编号)是什么? |
| 管理配置区 | 管理员如何维护知识库、工具、权限和展示策略? |
第二步:列出所有前端状态
把成功、等待、失败、无权限、审批中、转人工、重试、完成都列出来。只设计成功路径是不够的。
建议至少准备:
- 用户提问中。
- Agent 处理中。
- 知识库检索中。
- 引用来源已返回。
- 工具调用中。
- 等待用户确认。
- 等待审批。
- 已转人工。
- 工具失败。
- 权限拒绝。
- 回答完成。
- 用户已反馈。
第三步:设计字段契约
字段契约要先于页面细节。否则前端会出现“页面想展示,但后端没有字段”的问题。
本章建议先完成这 4 张契约表:
- 对话消息字段。
- 引用来源字段。
- 工具调用卡片字段。
- 审批与转人工字段。
字段设计要说明来源、展示位置、权限等级和失败状态。特别是 trace_id(追踪编号)、conversation_id(对话编号)和 message_id(消息编号),不要到最后才补。
第四步:把后端事件映射成前端卡片
后端可能返回的是“检索开始、工具开始、工具成功、工具失败、审批创建、人工接管”等事件。前端要把这些事件组织成用户看得懂的卡片和状态。
| 后端事件 | 前端表现 |
|---|---|
| retrieval_started(检索开始) | 显示“正在查找相关资料”。 |
| retrieval_completed(检索完成) | 展示引用来源和资料版本。 |
| tool_call_started(工具开始) | 插入工具调用卡片。 |
| tool_call_failed(工具失败) | 在卡片中显示错误原因和兜底动作。 |
| approval_created(审批创建) | 展示审批卡片和等待状态。 |
| handoff_created(转人工创建) | 展示转人工队列和工单状态。 |
| answer_completed(回答完成) | 展示回答、引用、反馈和追问入口。 |
第五步:设计权限和可见性
同一份数据,不同角色看到的内容不一样。
| 信息 | 终端用户 | 客服 | 主管 | 管理员 |
|---|---|---|---|---|
| 引用来源标题 | 可见 | 可见 | 可见 | 可见 |
| 内部政策全文 | 不可见 | 按权限可见 | 可见 | 可见 |
| 工具输入摘要 | 脱敏可见 | 可见 | 可见 | 可见 |
| trace_id(追踪编号) | 一般隐藏 | 可见 | 可见 | 可见 |
| 审批理由 | 部分可见 | 可见 | 可见 | 可见 |
| 系统错误细节 | 不可见 | 摘要可见 | 可见 | 可见 |
| 敏感字段 | 脱敏 | 按权限展示 | 按权限展示 | 按权限展示 |
前端要配合权限系统做展示,但不能把权限判断只放在前端。
第六步:写兜底文案和人工接管策略
每类失败都要有用户能理解的文案。
| 失败类型 | 不推荐文案 | 推荐文案 |
|---|---|---|
| 工具超时 | “系统错误。” | “订单系统暂时没有返回结果,我可以帮你稍后重试或转人工处理。” |
| 无权限 | “403。” | “当前账号不能查看这份资料。如果你认为这是误判,可以联系管理员或转人工。” |
| 无引用 | “无法回答。” | “我没有找到可引用的资料,因此不能给出确定结论。建议补充资料或转人工确认。” |
| 审批中 | “处理中。” | “这个动作需要主管审批,审批完成前不会执行。” |
| 转人工 | “已提交。” | “已为你转人工,客服会看到本次对话摘要和已查询的资料。” |
第七步:准备验收样例
前端验收不能只看页面是否漂亮。至少准备这些样例:
- 有引用的成功回答。
- 无引用时拒绝编造。
- 查订单工具成功。
- 查订单工具超时。
- 创建工单前需要用户确认。
- 退款申请进入审批。
- 普通用户无法查看内部政策。
- 转人工后客服能看到对话摘要。
- 用户点踩回答后,质检页能看到反馈评分。
- 管理员能通过 trace_id(追踪编号)找到日志摘要。
和后续章节的关系
本章和后续章节关系很紧密。
| 后续内容 | 本章提供什么基础 |
|---|---|
| 可观测性与日志 | 前端要展示 trace_id(追踪编号)、错误摘要和用户反馈入口。 |
| 安全、权限、Guardrail(护栏)与审批 | 前端承载 permission_notice(权限提示)、approval_card(审批卡片)和兜底提示。 |
| 商业需求、报价与验收 | 工作台模块数量、审批流和管理配置会影响报价和交付范围。 |
| 综合知识库 Agent 制作方法 | 最终项目需要把对话、RAG、工具、转人工和质检串起来。 |
| 作品集项目 | 前端工作台是面试官最容易看懂的展示入口。 |
本章也会反向连接前面章节:
- 第 1.6 章 Tool Calling:工具调用卡片是工具治理在前端的呈现。
- Agent 状态、记忆与会话:conversation_id(对话编号)和状态标识来自会话状态设计。
- RAG 章节:citations(引用来源)让检索结果可解释。
- MCP(模型上下文协议)章节:工具和资源标准化后,前端要能展示工具目录和权限状态。
- LangGraph(智能体状态图框架)章节:状态图里的节点可以映射成前端进度和卡片。
版本与资料来源
本节聚焦 AI(人工智能)应用前端的信息架构、字段契约、状态设计、权限提示、日志摘要、兜底体验和面试表达。
资料依据:
- React(前端框架)文档:https://react.dev/
- MDN Web(网页) Docs(Web(网页)开发文档) Accessibility(可访问性):https://developer.mozilla.org/en-US/docs/Web/Accessibility
- W3C(万维网联盟) WAI-ARIA Authoring Practices(可访问富互联网应用实践):https://www.w3.org/WAI/ARIA/apg/
- OpenAI(模型服务商) Function Calling(函数调用)指南:https://developers.openai.com/api/docs/guides/function-calling
- OpenAI(模型服务商) Agents SDK(智能体软件开发工具包) Guardrails(护栏):https://openai.github.io/openai-agents-python/guardrails/
- Model Context Protocol(模型上下文协议)官方文档:https://modelcontextprotocol.io/
过时风险:前端框架、流式传输方案、Agent 运行时事件格式和供应商 SDK(软件开发工具包)会持续变化。进入真实项目开发前,必须重新核对所用框架、模型服务商、企业权限系统和客服平台的最新文档。