1. 页面概览
AI 决策审计页是 AIP 管理后台的 AI 决策级审计轨迹查询入口,路由 /admin/ai-audit,仅管理员可访问。普通审计日志按用户/事件查询,本页则聚焦 NLQ 决策链路:后端直查 audit_log 表并过滤 ref_type='ai_decision' 的记录,把一次智能查询的 retrieve / text2sql / execute / visualize 等决策步骤按 trace_id(ref_id)串成可回放的决策链。页面支持按 Trace ID 精确过滤与 limit/offset 分页,可展开查看每一步的 action_details JSON。
页面还集成「审计定时归档」配置(Stage 3 B3-7.3):超过保留天数的审计事件每日定时归档为 JSON Lines 文件并从热区清理,开关、保留天数与 cron 调度表达式在本页直接维护。
2. 访问入口
2.1 路由与菜单
path /admin/ai-audit、name AdminAIAudit、title AI 决策审计;挂载在父路由 /admin(AdminLayout)下,侧边栏菜单项「AI 决策审计」。源码 action/web/src/views/AIAuditPage.vue。
2.2 认证与权限
父路由 requiresAuth: true, requiresAdmin: true;后端 /ai-audit 挂 admin 组,非管理员直接 403(AUX-01 测试覆盖)。请求经 aipClient.js 附带 aip_token。
2.3 端口与 API 前缀
AIP 后端 18080,前缀 /aip-api(baseURL /aip-api/v1,Vite 代理重写为 /api/v1)。
3. 界面布局
AI 决策审计 [刷新]
[操作结果提示 alert(可关闭)]
审计定时归档:☑启用定时归档 保留天数[90] 调度表达式(cron)[0 3 * * *]
[保存归档配置]
筛选条:Trace ID[____] 每页条数[20/50/100] [查询][重置] [上一页]第N页[下一页]
AI 决策轨迹:ID | 时间 | 用户ID | 引用类型 | Trace ID(ref_id) |
步骤(step_type) | 结果 | 决策详情(展开/收起)
- 审计定时归档:归档开关、保留天数、cron 三个配置项,保存后写入 settings 表并重排调度。
- 筛选条:Trace ID 精确过滤 + 每页条数 + 上一页/下一页分页。
- AI 决策轨迹:决策链表格,每行「展开/收起」查看该步骤
action_detailsJSON。
4. 交互元素
| 控件 | 位置 | 含义与作用 |
|---|---|---|
| 启用定时归档 | 归档配置卡 | 总开关,关闭后反注册 audit:archive 调度;默认开启 |
| 保留天数 | 归档配置卡 | 超过该天数的事件被归档清理,number min=1,默认 90 |
| 调度表达式(cron) | 归档配置卡 | 每日执行表达式,占位 0 3 * * *(每天 3 点) |
| 保存归档配置按钮 | 归档配置卡 | PUT /audit/archive-config,成功提示"审计归档配置已保存" |
| Trace ID 输入框 | 筛选条 | 决策轨迹精确过滤,空则查全部 |
| 每页条数下拉框 | 筛选条 | 20/50/100,默认 20 |
| 查询 / 重置按钮 | 筛选条 | 查询回第 1 页拉取;重置清空并回第 1 页 |
| 上一页 / 下一页 | 筛选条 | 分页切换;上一页第 1 页禁用,下一页按当前页条数判断 |
| 刷新按钮 | 页面头部 | 按当前条件重新拉取决策链 |
| 展开 / 收起按钮 | 表格每行 | 展示该步骤 action_details 格式化 JSON |
5. 后端关联
5.1 端点表
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /ai-audit | 查询 AI 决策级审计轨迹,query 支持 trace_id/limit/offset |
| GET | /audit/archive-config | 查询归档开关/保留天数/调度表达式 |
| PUT | /audit/archive-config | 更新归档配置,缺省字段保留现值;禁用时反注册调度 |
5.2 请求与响应
GET /ai-audit 成功返回 {"logs": [...]},每条含 id、user_id、timestamp、event_type、action_details、result、ref_type、ref_id(即 trace_id)、step_type。后端 limit 默认 50、offset 负值归 0。归档配置响应 {code:0, data:{enabled, retention_days, schedule}}。
5.3 关键机制
/ai-audit为"只读视图"语义,不建第二张事实表,直接过滤ref_type='ai_decision';step_type细化到 retrieve / text2sql / execute / visualize 等,同一trace_id的多条记录组成完整决策链。- 归档 job 名
audit:archive,默认每天 3 点执行,按 settings 配置的保留天数清理超期热数据并落 JSON Lines 文件。 - 后端位置:
handleAIDecisionAudit在action/products/aip/server/handlers.go;归档配置端点由action/platform/audit/archive_job.go的RegisterRoutes提供,默认配置DefaultArchiveConfig(启用、90 天、每日 3 点)。
6. 权限与安全
- 认证:JWT Bearer Token(
aip_token),401 自动登出跳登录页。 - 管理员专属:前端
requiresAdmin守卫 + 后端 admin 组双重校验,非管理员 403(AUX-01 测试固化)。 - 审计防篡改:审计写入经哈希链串行化,被篡改可被链式校验发现;归档只导出超期记录到文件并清理热区,不修改未到期记录。
7. 常见问题与排错
问题 1:查询某 Trace ID 返回空
- 现象:填入 trace_id 后"暂无 AI 决策审计记录"。
- 原因:Trace ID 精确匹配且大小写敏感;或该次决策发生在埋点之前。
- 处理:清空 Trace ID 查全量确认存在,再从详情复制准确 trace_id。
问题 2:保存归档配置失败
- 现象:点「保存归档配置」提示"保存审计归档配置失败"。
- 原因:请求体 JSON 非法(如 cron 格式异常)或归档 job 未启动。
- 处理:确认 cron 格式;查后端
auditArchiveJob启动告警,必要时先GET /audit/archive-config看生效值。
问题 3:归档开关打开但热数据不减少
- 现象:开启定时归档后列表仍有大量旧记录。
- 原因:归档按
retention_days计算,仅超期记录被清理,且到调度点才执行。 - 处理:确认保留天数,等待下一个 cron 触发点,或查归档 job 运行日志。
8. 已知缺陷与边界
| 项 | 说明 |
|---|---|
| 无模糊搜索 | Trace ID 仅精确匹配 |
| 前后翻页 | 无页码跳转;下一页可用性由"当前页条数 == limit"推断,末页可能多翻一页 |
| 归档无手动触发 | 只配置调度,不提供立即归档(手动归档在 Foundry 审计页) |
| 事件类型不可见 | 表格仅展示 ref_type/step_type,event_type 需展开详情查看 |