feat(aihr): add evidence grading, clarification loop and route exits to ask agent
- narrow amount-semantics clarification to adjudicative intents only - persist pending clarification on conversation and resolve follow-up replies as ANSWERED/GAVE_UP/NEW_TOPIC (max one round per field) - add AihrEvidenceGradingService: FULL/PARTIAL/GUIDANCE/ROUTE arbitration, policy-claim post-validation, reference answers labeled as non-formal - unblock retrieval source gating; tag citations with evidence tier, keep PUBLISHED/HUMAN_VERIFIED/effective-date authorization gates - replace operator-facing no-evidence copy with actionable route exits (human help, direct finance channel, web research) - allow fragment-less down feedback for own NO_EVIDENCE queries so ROUTE answers can escalate to human help (fragment_id nullable) - migrations: aihr_20260804_pending_clarification_mysql8.sql, aihr_20260804_feedback_fragment_nullable_mysql8.sql
This commit is contained in:
@@ -60,7 +60,7 @@ curl -fsS "$API_BASE/api/aihr/agent/messages/media" \
|
||||
-F 'externalConsent=false'
|
||||
```
|
||||
|
||||
文字问题去空白后必须为 1–1000 字;媒体接口的 `question` 为空时使用“请分析附件内容”。请求不接受身份、角色、`toolCode`、知识空间 ID、SQL 或任意 URL。响应继续使用若依信封,`data.status` 只会是 `COMPLETED/NEEDS_INPUT/NEEDS_CONFIRMATION/NO_EVIDENCE/FORBIDDEN/UNAVAILABLE/FAILED`,按钮分别读取 `actionDraft/clarification/resources/nextActions`,不得解析 `answer` 猜状态。
|
||||
文字问题去空白后必须为 1–1000 字;媒体接口的 `question` 为空时使用“请分析附件内容”。请求不接受身份、角色、`toolCode`、知识空间 ID、SQL 或任意 URL。响应继续使用若依信封,`data.status` 只会是 `COMPLETED/NEEDS_INPUT/NEEDS_CONFIRMATION/NO_EVIDENCE/FORBIDDEN/UNAVAILABLE/FAILED`,按钮分别读取 `actionDraft/clarification/resources/nextActions`,不得解析 `answer` 猜状态。知识问答答案由服务端统一仲裁证据分级:`data.evidenceLevel` 为 `FULL/PARTIAL/GUIDANCE/ROUTE`(旧路径可为空),`ROUTE` 对应 `NO_EVIDENCE`,其余对应 `COMPLETED`;`data.uncoveredPoints` 列出没有正式依据的点;`data.nextActions` 形状为 `[{type, channel, label}]`,`type ∈ HUMAN_HELP/DIRECT_CHANNEL/WEB_RESEARCH`,`channel` 仅 `DIRECT_CHANNEL` 时有值(如 `direct_finance`)。`GUIDANCE` 答案显式标注“以下为参考经验,非正式制度依据”。澄清与 `NO_EVIDENCE` 互斥;服务端把待澄清事项挂起在 30 分钟短会话上,下一轮回复按“已回答/放弃/新话题”闭环,同一澄清最多问一轮。
|
||||
|
||||
政策边界在检索前由服务端确定性执行:明确存在版本/规则冲突时返回 `NEEDS_INPUT`,不得自行裁决或拼接;明确无依据时返回 `NO_EVIDENCE`,不得用经验补全政策事实;跨项目、他人敏感信息、无权附件或未发布制度返回 `FORBIDDEN`。移动端 Agent 对涉及制度、权限、费用、安全职责或必留记录的问题,服务端会在规划改写前固定为正式政策模式,客户端不能选择或绕过;MySQL 模糊/全文召回、Qdrant 命中回表和最终引用装配均只接受 `aihr_knowledge_source_governance` 中当前有效的 `FORMAL_POLICY + APPROVED` 附件,并校验审批时 `docId` 快照一致、版本和原文件 SHA-256 登记完整。已覆盖的试点政策领域还会在进入模型前和最终引用装配时执行问题领域锚点相关性复核,只有来源合规且与问题领域匹配的片段才能参与回答;返回客户端的引用摘要围绕同一命中锚点截取,不能只展示无关的文档开头。正式问题不混入个人/项目记忆;治理表缺失、未审批、已失效、版本或哈希为空、领域不相关,以及最终引用重校验失败时统一返回 `NO_EVIDENCE`。普通“经验话术怎么说”等建议问题仍可检索经授权经验材料,但不得包装为制度。访谈、经验萃取、seed 或 AI 输出不得登记为正式政策来源。
|
||||
|
||||
@@ -358,6 +358,8 @@ POST /api/knowledge/quality/rollout/spaces/{knowledgeId}/generation-rollback
|
||||
|
||||
员工“没解决”反馈可携带本轮知识查询 `requestId`。服务端只接受该请求实际召回且属于当前租户的 fragment,创建 `DOWNSTREAM_ANSWER_DISPUTED` 再审问题,不自动撤回资料。后台复核接口 `POST /api/knowledge/answer-feedback/{id}/review` 只接受 `{action: "KEEP"|"WITHDRAW", note: "..."}`:`KEEP` 将争议标为误报并保留资料,`WITHDRAW` 必须由已认证审核人填写理由并调用统一生命周期撤回,随后触发向量 DELETE outbox。
|
||||
|
||||
ROUTE(零引用 `NO_EVIDENCE`)答案的转人工链路允许 `fragmentIds` 为空的 `down` 反馈:必须携带 `requestId`,服务端校验该请求在 `aihr_knowledge_query_log` 中存在、`user_id` 归当前提交人且审计 `status=NO_EVIDENCE`;满足则写入一行 `fragment_id=NULL` 的反馈(NULL 不参与唯一键去重,服务端先查重、重复提交更新同一行),不生成片段质量单。`verdict=up` 或无 `requestId` 仍不允许空片段;有证据的查询拒绝无片段反馈。对应迁移为 `backend/script/sql/update/aihr_20260804_feedback_fragment_nullable_mysql8.sql`。
|
||||
|
||||
质量监控由 `AihrKnowledgeQualityMonitoringService` 按租户定时扫描。`metrics` 返回资产生命周期、开放问题、待裁决重复/冲突、24 小时查询证据覆盖率、生产来源可追溯率和索引一致性;`alerts` 返回稳定 reason code、严重级别、首次/最近发生时间、累计次数、证据和解决状态。监控只报警和自动关闭已恢复告警,不批准、发布、合并、替代或删除资产。Actuator 健康组件名为 `aihrKnowledgeQuality`;迁移未执行时返回 `UNKNOWN`,存在生产血缘缺口、索引漂移、死信、过期发布资产或查询证据缺口时返回 `DOWN`。对应新增表迁移为 `backend/script/sql/update/aihr_20260808_data_quality_monitoring_mysql8.sql`。
|
||||
|
||||
规则演进第一批接口只保存版本化规则草稿、人工/黄金集期望与影子结果的对照、误放行/误隔离指标以及风险抽样复核。规则动作只允许 `FLAG/REVIEW/QUARANTINE`,不允许批准、发布或删除;服务端只允许 `DRAFT -> SHADOW -> PAUSED/RETIRED` 及 `PAUSED -> SHADOW/RETIRED`,在独立自动执行安全门、真实黄金集和灰度回滚能力完成前拒绝进入 `CANARY/ACTIVE`。影子评估和抽样结果不修改 `aihr_data_asset`、质量问题、审核决定或索引。对应迁移为 `backend/script/sql/update/aihr_20260811_rule_evolution_mysql8.sql`。
|
||||
|
||||
Reference in New Issue
Block a user