Files
DEMO-AGENT/docs/需求分析/5.audit模块需求分析.md

6.6 KiB
Raw Blame History

Audit 模块需求分析

1. 模块定位

apps.audit 在本题中绝不能只被理解为“对话历史”。对于注册申报资料准备与审核系统,它的定位应当是:

合规审查留痕与复核中心

因为本题输出的是“资料是否齐套、字段是否一致、哪里有合规风险”,这类结果天然需要留痕、可回溯、可解释。

2. 模块目标

本模块需要实现以下目标:

  1. 对每一次资料审核、字段抽取、完整性检查和风险预警形成可查询记录。
  2. 保留输入条件、处理范围、输出结果、证据来源和失败原因。
  3. 为演示“系统不是黑盒”提供直接支撑。
  4. 在不泄露敏感信息的前提下,支持问题追溯和结果复核。
  5. 为 Web 端与飞书端的多入口执行留存统一审计链路。

3. 为什么本题对审计要求更高

在普通问答 Demo 中,审计模块往往只是锦上添花。但在本题里,审计本身就是业务可信度的一部分,原因包括:

  1. 注册申报属于强监管场景,任何自动结论都应能追溯。
  2. 题面明确要求输出风险预警和处理建议,这些建议后续可能影响资料补正方向。
  3. 当前样例中已经出现跨文档冲突、二次申报、历史临床资料替换等复杂情境,没有审计留痕会很难解释系统为何得出某个结论。

4. 核心职责

4.1 执行留痕

记录每次任务执行的基本信息:

  • 执行时间
  • 操作人
  • 任务类型
  • 使用场景
  • 输入问题
  • 选中文档范围
  • 申报批次

4.2 处理结果留痕

记录:

  • 最终自然语言回答
  • 结构化结果
  • 风险清单
  • 回填字段结果
  • 缺失文件清单

4.3 证据留痕

记录:

  • 引用文档
  • 引用片段
  • 命中的法规条目或目录项
  • 使用的规则版本
  • 工具调用过程

4.4 异常留痕

记录:

  • 解析失败
  • 入库失败
  • 规则缺失
  • 模型调用失败
  • 输出冲突待人工确认

本题尤其需要保留失败和不确定状态,而不只是保存成功记录。

5. 审计对象定义

建议将审计对象扩展为以下几类:

  1. 资料目录汇总任务
  2. 完整性检查任务
  3. 字段抽取任务
  4. 一致性核查任务
  5. 风险预警任务
  6. 手工重试、重新入库、重新核查等操作

这样可以避免审计模块只能记录“聊天问答”,却看不到文件处理和重跑过程。

6. 审计记录字段需求

6.1 基础字段

  • audit_id
  • task_type
  • scenario_id
  • project_id
  • submission_batch_id
  • created_at
  • status

6.2 输入字段

  • 用户输入问题
  • 执行参数
  • 选中文档 ID 列表
  • 章节点范围
  • 规则版本
  • 模型名称
  • 触发入口类型Web / 飞书群聊 / 飞书评论 / 飞书应用会话)
  • 飞书会话或消息标识

6.3 输出字段

  • 最终摘要
  • 结构化输出 JSON
  • 风险等级
  • 是否通过
  • 是否存在人工复核项
  • 缺失项数量
  • 冲突项数量

6.4 证据字段

  • 引用文档信息
  • 引用片段
  • 工具调用结果
  • 命中规则项
  • 风险评分明细

6.5 错误字段

  • 错误类型
  • 错误信息
  • 失败阶段
  • 是否可重试

7. 与题面强相关的审计需求

7.1 对完整性检查结果留痕

当系统判断“缺少临床评估报告”或“缺少某项监管声明”时,应能回查:

  • 是依据哪一版规则判断的
  • 当前已识别到哪些资料
  • 哪些资料被判定未命中

7.2 对一致性冲突留痕

当系统判定:

说明书与申请表中的产品名称不一致

则审计中必须保留:

  • 冲突字段名
  • 冲突值
  • 对应来源文档
  • 判定时间
  • 所属审核范围

当前项目目标是通用试剂盒注册审核智能体,因此审计还必须能够说明“这些文档为什么会被纳入同一轮一致性核查”,否则冲突结论容易失真。

7.3 对历史申报说明的审计价值

CH1.9 涉及历史受理号、撤回、临床数据替换等事项,若系统在风险报告中引用这部分内容,应在审计中保留相关证据链,方便后续说明“为什么标记为历史事项风险”。

8. 页面需求

8.1 审计列表页

列表页不应仅展示“问了什么问题”,还应体现业务摘要。建议展示:

  • 执行时间
  • 任务类型
  • 项目 / 批次
  • 状态
  • 风险等级
  • 缺失项数
  • 冲突项数
  • 是否需人工复核

8.2 审计详情页

详情页建议展示:

  • 输入问题与参数
  • 结果摘要
  • 结构化结果
  • 引用证据
  • 工具调用
  • 原始输出
  • 错误信息
  • 脱敏后的上下文信息

9. 脱敏与安全要求

9.1 不能写入敏感密钥

这一点与 AGENTS 约定一致,日志中不能保存:

  • API Key
  • 密钥类环境变量
  • 不必要的鉴权头

9.2 业务敏感信息控制

虽然当前题目材料以产品注册资料为主,但后续真实环境中可能包含:

  • 企业联系人
  • 手机号 / 邮箱
  • 临床机构信息
  • 受理号

首版至少要具备“展示层脱敏”的设计意识。

9.3 原始输出保留边界

如果 LLM 原始输出中包含大量无效 prompt 内容或潜在敏感字段,应允许:

  • 存摘要,不存完整原文
  • 或仅对管理员展示原始输出

10. 与其他模块的边界

10.1 与 Chat 模块

Chat 是主要触发入口Audit 负责把执行结果沉淀为可追踪记录。

10.2 与 Documents 模块

Documents 提供文档处理事实Audit 负责记录这些事实如何被某次审核任务引用。

10.3 与 Agent Core 模块

Agent Core 负责产出结论与证据Audit 负责记录这些产出及其上下文。

11. 当前代码基线下的重构建议

11.1 建议保留

  • 审计列表与详情页骨架
  • 原始输出展示能力
  • 敏感信息脱敏思路
  • 成功与失败均记录的机制

11.2 建议增强

  1. 将“对话日志”扩展为“任务执行审计”。
  2. 增加项目批次、任务类型、章节点范围、规则版本等字段。
  3. 增加缺失项数、冲突项数、人工复核标记等业务指标。
  4. 增加法规命中项、字段来源和风险依据的留痕。
  5. 增加飞书触发来源、回传状态和责任人通知记录。

12. 验收标准

本模块验收时,应达到以下状态:

  1. 每次关键审核任务都能形成完整审计记录。
  2. 审计详情足以解释“系统为什么得出这个结论”。
  3. 成功、失败和待人工复核都可记录。
  4. 页面层可快速筛选高风险或异常记录。
  5. 敏感密钥不会进入审计内容。
  6. 审计中能够明确体现“任一高风险即不通过”的最终判定依据。