Files
group_fqcd_jr/docs/evidence/20260918-config-snapshot.json
T
张胜宇 5d0becb67d 客服 Agent 重构收口:五出口决策链 + 知识库档位隔离 + 前端入参边界(答辩演示版本)
一、客服 Agent 智能增强(正面回应"不智能、动不动就转人工")
- 决策链由 2 个出口扩到 5 个:E1 澄清 / E2 计算型 / E3 知识直返 / E4 证据约束生成 / E5 分级回退
- 转人工从"默认动作"降为最后一档 E5c,只保留 4 类白名单:
  P0 反诈 / P1 账户与个人数据 / P2 写操作与争议 / 用户明确要求人工
- 46 条金标实测(修复前 → 修复后):
  转人工率 43.5% → 10.9%;出口准确率 45.7% → 100%;事实正确率 69.6% → 100%
  禁忌违反 1 → 0;档位越权 / 无出处数字 / 误拒 四项零容忍全 0
- 安全不变量 INV-1~INV-5;零容忍规则未删,改的是挂载点
  (输出侧字面黑名单 → 检索层档位隔离 + 判定层合规词表 + 输出守护)

二、知识库:档位单点化与物理隔离
- 新增 app/core/knowledge_tier.py 作为档位规则唯一落点(G-03),
  knowledge_contracts.py 原定义块改为显式再导出(X as X,非副本)
- 档位过滤由 bool 默认值(fail-open)改为 tiers 必填集合(缺参即 TypeError)
- Milvus 侧四集合按 visibility 分区键物理隔离;双 schema 收敛为一套
- 新增 app/core/actor.py:访客三元组与匿名判定的唯一构造/判定点(G-01/G-01b)
- 新增 app/core/fund_fee_rules.py:费率计算纯函数

三、前端入参边界对齐(本轮 W11 新修,4 处"校验宽于存储")
- message 加 max_length=8000(与浮窗 widget.js 的 maxlength 一致)
- session_id 加 1—64;idempotency_key 上限 128 → 64(对齐列宽 String(64))
- feedback_type 加 max_length=32(对齐列宽 String(32))
- 8 条路径参数补 min_length=1 + max_length=64 + 字符集正则
  ({session_id} / {run_id} / {handover_id})
- 改前超限值会落到 MySQL 才失败(500);改后一律 422 AGENT_INPUT_INVALID + 字段级定位
- 新增 tests/unit/api/test_frontend_boundaries.py(33 例),含"端点表 ↔ OpenAPI 全量对照"

四、投顾模块整体清除(D4.4 / D4.5)
- 删除投顾相关 controller / schema / model / repository / service 及门户页面
- tools/portal_api_check.py 同步作废 AD003/AD005/AD011/A047 四条用例与 advisor_t 登录
  (端点与账号均已不存在,此前稳定报 3 条假红)

五、验证(提交前实测)
- pytest -q:1856 passed / 2 skipped / 0 failed
- ruff check app tools tests:19(= 基线);mypy app:2(= 基线)
- 前端接口契约体检 portal_api_check.py:38 项,通过 34,失败 0,跳过 4
- 全链路冒烟 e2e_smoke_test.py --read-only:31/31
- HTTP 全链路探针 http_probe.py:11/11 succeeded
- 跨文档一致性 _consistency.py:GATE PASS
- 真机边界复验 12 条:12/12 符合预期

六、纪律与文档
- 可改文件白名单 A-09(docs/46)与底座会签申请单 A-10(docs/47,组 1—组 4 全部受理)
- 零 DDL:未新增/修改任何表结构,89 张业务表与基线一致
- 证据留痕:docs/evidence/**(含 46 条金标 score、快照、清除与重建记录)
- 未提交(刻意排除,见提交说明):仓库内 客服agent/ 与 开发文档/ 是 2026-09-16 前的
  过期副本(Todolist 440 行 vs 权威 D2.1 1167 行),权威正本在仓库外;
  _chunks_report.txt 是 tools/build_knowledge_chunks.py 生成的本地产物
2026-09-20 14:33:30 +08:00

1285 lines
39 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"config_release": [
{
"id": 2,
"release_no": "customer-service-phase1-public-kb-v1",
"title": "一期客服 Agent 公开知识检索配置",
"status": "superseded",
"active_slot": null,
"activated_at": "2026-09-11T02:11:13.661947"
},
{
"id": 50,
"release_no": "cs-tools-ba62cd7f820a",
"title": "客服 Agent 意图工具白名单",
"status": "draft",
"active_slot": null,
"activated_at": null
},
{
"id": 51,
"release_no": "cs-prompt-1ea20c5fdae4",
"title": "客服闲聊提示词",
"status": "draft",
"active_slot": null,
"activated_at": null
},
{
"id": 52,
"release_no": "cs-tools-ad4555b0e9b7",
"title": "客服 Agent 意图工具白名单",
"status": "draft",
"active_slot": null,
"activated_at": null
},
{
"id": 53,
"release_no": "cs-prompt-48313212a1d8",
"title": "客服闲聊提示词",
"status": "draft",
"active_slot": null,
"activated_at": null
},
{
"id": 54,
"release_no": "cs-tools-03cdca023679",
"title": "客服 Agent 意图工具白名单",
"status": "draft",
"active_slot": null,
"activated_at": null
},
{
"id": 55,
"release_no": "cs-tools-e2d8fe95ec55",
"title": "客服 Agent 意图工具白名单",
"status": "draft",
"active_slot": null,
"activated_at": null
},
{
"id": 56,
"release_no": "cs-tools-5ee805431182",
"title": "客服 Agent 意图工具白名单",
"status": "superseded",
"active_slot": null,
"activated_at": "2026-09-14T08:12:18.765545"
},
{
"id": 57,
"release_no": "cs-prompt-9957e6c0ff6a",
"title": "客服闲聊提示词",
"status": "superseded",
"active_slot": null,
"activated_at": "2026-09-14T08:12:31.687595"
},
{
"id": 58,
"release_no": "cs-tools-5d5f8d38b346",
"title": "客服 Agent 意图工具白名单",
"status": "active",
"active_slot": 1,
"activated_at": "2026-09-14T08:14:16.954013"
}
],
"platform_config_item_columns": [
{
"COLUMN_NAME": "id",
"DATA_TYPE": "bigint"
},
{
"COLUMN_NAME": "release_id",
"DATA_TYPE": "bigint"
},
{
"COLUMN_NAME": "namespace",
"DATA_TYPE": "varchar"
},
{
"COLUMN_NAME": "config_key",
"DATA_TYPE": "varchar"
},
{
"COLUMN_NAME": "value_json",
"DATA_TYPE": "json"
},
{
"COLUMN_NAME": "schema_version",
"DATA_TYPE": "varchar"
},
{
"COLUMN_NAME": "checksum",
"DATA_TYPE": "char"
},
{
"COLUMN_NAME": "created_at",
"DATA_TYPE": "datetime"
}
],
"platform_config_item_rows": [
{
"id": 5,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "customer_service:public_knowledge",
"value_json": "{\"allowed_tools\": [\"query_knowledge\"]}",
"schema_version": "v1",
"checksum": "23f633092352d8b69c5d50a89257b9b63360f185e490c88945c2f7caddfeac2d",
"created_at": "2026-09-11T02:11:13.625362"
},
{
"id": 6,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "customer_service:faq",
"value_json": "{\"allowed_tools\": [\"query_knowledge\"]}",
"schema_version": "v1",
"checksum": "23f633092352d8b69c5d50a89257b9b63360f185e490c88945c2f7caddfeac2d",
"created_at": "2026-09-11T02:11:13.625362"
},
{
"id": 7,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "customer_service:product_inquiry",
"value_json": "{\"allowed_tools\": [\"query_knowledge\"]}",
"schema_version": "v1",
"checksum": "23f633092352d8b69c5d50a89257b9b63360f185e490c88945c2f7caddfeac2d",
"created_at": "2026-09-11T02:11:13.625362"
},
{
"id": 8,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "customer_service:policy_explain",
"value_json": "{\"allowed_tools\": [\"query_knowledge\"]}",
"schema_version": "v1",
"checksum": "23f633092352d8b69c5d50a89257b9b63360f185e490c88945c2f7caddfeac2d",
"created_at": "2026-09-11T02:11:13.625362"
},
{
"id": 9,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "risk:risk_overview",
"value_json": "{\"allowed_tools\": [\"get_risk_overview\"]}",
"schema_version": "1",
"checksum": "410795625e9e8df4929240e673e34e359e9eb9778001d3f3c48a92352c036d20",
"created_at": "2026-09-13T10:06:23.717491"
},
{
"id": 10,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "risk:risk_search",
"value_json": "{\"allowed_tools\": [\"search_risk_alerts\"]}",
"schema_version": "1",
"checksum": "a7fbf64152f341d8356a5a10cf4a06d6b8cb0e68d728952fb9051af6b222f47d",
"created_at": "2026-09-13T10:06:23.717491"
},
{
"id": 11,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "risk:risk_evidence",
"value_json": "{\"allowed_tools\": [\"get_alert_evidence\"]}",
"schema_version": "1",
"checksum": "86d7cb73b3da2642cf7dcf40c75cfa8cdeb900a510e660c1255da94aa2d76aca",
"created_at": "2026-09-13T10:06:23.717491"
},
{
"id": 12,
"release_id": 2,
"namespace": "agent_tools",
"config_key": "risk:general",
"value_json": "{\"allowed_tools\": []}",
"schema_version": "1",
"checksum": "3f4f5cab877f5729ec36c4a29500aacdecba839adcbd36edd0cd9774a86e2c0b",
"created_at": "2026-09-13T10:06:23.717491"
},
{
"id": 13,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "risk:general",
"value_json": "{\"allowed_tools\": []}",
"schema_version": "1",
"checksum": "30ff4a89fd01524e00ef4cc7e30fe03b4cc9a2567b35d3f16ef37f4ae188afd3",
"created_at": "2026-09-14T08:12:18.144760"
},
{
"id": 14,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "risk:risk_evidence",
"value_json": "{\"allowed_tools\": [\"get_alert_evidence\"]}",
"schema_version": "1",
"checksum": "17a900d3496651a001196eb5181057165d3e3dc93cd55045df76c002130838a9",
"created_at": "2026-09-14T08:12:18.187245"
},
{
"id": 15,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "risk:risk_overview",
"value_json": "{\"allowed_tools\": [\"get_risk_overview\"]}",
"schema_version": "1",
"checksum": "3ded90ea80176cbd8bf64f6d718502e35ff9a8d7fa606b00b007a87826902936",
"created_at": "2026-09-14T08:12:18.222631"
},
{
"id": 16,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "risk:risk_search",
"value_json": "{\"allowed_tools\": [\"search_risk_alerts\"]}",
"schema_version": "1",
"checksum": "35452c765710bf99a5cd7a4691616e8ed47ca6ad6d5221941acbd509e1c07d92",
"created_at": "2026-09-14T08:12:18.262325"
},
{
"id": 17,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "customer_service:faq",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\", \"query_customer_profile\"]}",
"schema_version": "1",
"checksum": "7be260ef282c46c2e3f91c50f959d85392872f448aaabd668a933086c97a6344",
"created_at": "2026-09-14T08:12:18.297561"
},
{
"id": 18,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "customer_service:product_inquiry",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:12:18.350307"
},
{
"id": 19,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "customer_service:policy_explain",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:12:18.537590"
},
{
"id": 20,
"release_id": 56,
"namespace": "agent_tools",
"config_key": "customer_service:suitability_check",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"check_suitability\"]}",
"schema_version": "1",
"checksum": "199a73d808ce0cc6ded3ce754b488a998f5973657e8ccc4e2a9a2a5a98fcbfc8",
"created_at": "2026-09-14T08:12:18.576917"
},
{
"id": 21,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "customer_service:faq",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\", \"query_customer_profile\"]}",
"schema_version": "1",
"checksum": "7be260ef282c46c2e3f91c50f959d85392872f448aaabd668a933086c97a6344",
"created_at": "2026-09-14T08:12:31.111327"
},
{
"id": 22,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "customer_service:policy_explain",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:12:31.147428"
},
{
"id": 23,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "customer_service:product_inquiry",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:12:31.187379"
},
{
"id": 24,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "customer_service:suitability_check",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"check_suitability\"]}",
"schema_version": "1",
"checksum": "199a73d808ce0cc6ded3ce754b488a998f5973657e8ccc4e2a9a2a5a98fcbfc8",
"created_at": "2026-09-14T08:12:31.217940"
},
{
"id": 25,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "risk:general",
"value_json": "{\"allowed_tools\": []}",
"schema_version": "1",
"checksum": "30ff4a89fd01524e00ef4cc7e30fe03b4cc9a2567b35d3f16ef37f4ae188afd3",
"created_at": "2026-09-14T08:12:31.250213"
},
{
"id": 26,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "risk:risk_evidence",
"value_json": "{\"allowed_tools\": [\"get_alert_evidence\"]}",
"schema_version": "1",
"checksum": "17a900d3496651a001196eb5181057165d3e3dc93cd55045df76c002130838a9",
"created_at": "2026-09-14T08:12:31.283353"
},
{
"id": 27,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "risk:risk_overview",
"value_json": "{\"allowed_tools\": [\"get_risk_overview\"]}",
"schema_version": "1",
"checksum": "3ded90ea80176cbd8bf64f6d718502e35ff9a8d7fa606b00b007a87826902936",
"created_at": "2026-09-14T08:12:31.422133"
},
{
"id": 28,
"release_id": 57,
"namespace": "agent_tools",
"config_key": "risk:risk_search",
"value_json": "{\"allowed_tools\": [\"search_risk_alerts\"]}",
"schema_version": "1",
"checksum": "35452c765710bf99a5cd7a4691616e8ed47ca6ad6d5221941acbd509e1c07d92",
"created_at": "2026-09-14T08:12:31.460389"
},
{
"id": 29,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:general",
"value_json": "{\"allowed_tools\": []}",
"schema_version": "1",
"checksum": "30ff4a89fd01524e00ef4cc7e30fe03b4cc9a2567b35d3f16ef37f4ae188afd3",
"created_at": "2026-09-14T08:14:16.402820"
},
{
"id": 30,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:risk_evidence",
"value_json": "{\"allowed_tools\": [\"get_alert_evidence\"]}",
"schema_version": "1",
"checksum": "17a900d3496651a001196eb5181057165d3e3dc93cd55045df76c002130838a9",
"created_at": "2026-09-14T08:14:16.435955"
},
{
"id": 31,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:risk_overview",
"value_json": "{\"allowed_tools\": [\"get_risk_overview\"]}",
"schema_version": "1",
"checksum": "3ded90ea80176cbd8bf64f6d718502e35ff9a8d7fa606b00b007a87826902936",
"created_at": "2026-09-14T08:14:16.476417"
},
{
"id": 32,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:risk_search",
"value_json": "{\"allowed_tools\": [\"search_risk_alerts\"]}",
"schema_version": "1",
"checksum": "35452c765710bf99a5cd7a4691616e8ed47ca6ad6d5221941acbd509e1c07d92",
"created_at": "2026-09-14T08:14:16.506658"
},
{
"id": 33,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:faq",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\", \"query_customer_profile\"]}",
"schema_version": "1",
"checksum": "7be260ef282c46c2e3f91c50f959d85392872f448aaabd668a933086c97a6344",
"created_at": "2026-09-14T08:14:16.541439"
},
{
"id": 34,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:product_inquiry",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:14:16.574736"
},
{
"id": 35,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:policy_explain",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:14:16.719968"
},
{
"id": 36,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:suitability_check",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"check_suitability\"]}",
"schema_version": "1",
"checksum": "199a73d808ce0cc6ded3ce754b488a998f5973657e8ccc4e2a9a2a5a98fcbfc8",
"created_at": "2026-09-14T08:14:16.755766"
}
],
"cfg_item_colnames": [
"id",
"release_id",
"namespace",
"config_key",
"value_json",
"schema_version",
"checksum",
"created_at"
],
"active_release_items": [
{
"id": 29,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:general",
"value_json": "{\"allowed_tools\": []}",
"schema_version": "1",
"checksum": "30ff4a89fd01524e00ef4cc7e30fe03b4cc9a2567b35d3f16ef37f4ae188afd3",
"created_at": "2026-09-14T08:14:16.402820"
},
{
"id": 30,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:risk_evidence",
"value_json": "{\"allowed_tools\": [\"get_alert_evidence\"]}",
"schema_version": "1",
"checksum": "17a900d3496651a001196eb5181057165d3e3dc93cd55045df76c002130838a9",
"created_at": "2026-09-14T08:14:16.435955"
},
{
"id": 31,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:risk_overview",
"value_json": "{\"allowed_tools\": [\"get_risk_overview\"]}",
"schema_version": "1",
"checksum": "3ded90ea80176cbd8bf64f6d718502e35ff9a8d7fa606b00b007a87826902936",
"created_at": "2026-09-14T08:14:16.476417"
},
{
"id": 32,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "risk:risk_search",
"value_json": "{\"allowed_tools\": [\"search_risk_alerts\"]}",
"schema_version": "1",
"checksum": "35452c765710bf99a5cd7a4691616e8ed47ca6ad6d5221941acbd509e1c07d92",
"created_at": "2026-09-14T08:14:16.506658"
},
{
"id": 33,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:faq",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\", \"query_customer_profile\"]}",
"schema_version": "1",
"checksum": "7be260ef282c46c2e3f91c50f959d85392872f448aaabd668a933086c97a6344",
"created_at": "2026-09-14T08:14:16.541439"
},
{
"id": 34,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:product_inquiry",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:14:16.574736"
},
{
"id": 35,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:policy_explain",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"query_knowledge\"]}",
"schema_version": "1",
"checksum": "7f48a0a463cde537db2a0c64b3f2b522ba6b5541632aa75533d585058483124a",
"created_at": "2026-09-14T08:14:16.719968"
},
{
"id": 36,
"release_id": 58,
"namespace": "agent_tools",
"config_key": "customer_service:suitability_check",
"value_json": "{\"allowed_tools\": [\"search_knowledge\", \"check_suitability\"]}",
"schema_version": "1",
"checksum": "199a73d808ce0cc6ded3ce754b488a998f5973657e8ccc4e2a9a2a5a98fcbfc8",
"created_at": "2026-09-14T08:14:16.755766"
}
],
"model_endpoint_colnames": [
"id",
"endpoint_code",
"provider",
"model_name",
"base_url",
"secret_ref",
"capabilities",
"allowed_data_levels",
"context_window",
"timeout_ms",
"status",
"created_by",
"reviewer_id",
"reviewed_at",
"created_at",
"updated_at"
],
"model_endpoint_rows": [
{
"id": 1,
"endpoint_code": "knowledge-embedding-qwen-v3",
"provider": "qwen",
"model_name": "text-embedding-v3",
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"secret_ref": "env:QWEN_API_KEY",
"capabilities": "[\"embedding\"]",
"allowed_data_levels": "[\"public\"]",
"context_window": 8192,
"timeout_ms": 15000,
"status": "active",
"created_by": 9003,
"reviewer_id": 9003,
"reviewed_at": "2026-09-11T01:59:09.347614",
"created_at": "2026-09-11T01:59:09.347614",
"updated_at": "2026-09-11T01:59:09.347614"
},
{
"id": 2,
"endpoint_code": "deepseek-flash",
"provider": "deepseek",
"model_name": "deepseek-chat",
"base_url": "https://api.deepseek.com",
"secret_ref": "env:DEEPSEEK_API_KEY",
"capabilities": "[\"chat\", \"intent_classification\", \"risk_answer\", \"text_generation\"]",
"allowed_data_levels": "[\"internal\"]",
"context_window": 64000,
"timeout_ms": 30000,
"status": "active",
"created_by": 9003,
"reviewer_id": 9003,
"reviewed_at": "2026-09-13T10:06:23.717491",
"created_at": "2026-09-13T10:06:23.717491",
"updated_at": "2026-09-13T10:06:23.717491"
}
],
"model_routing_rule_colnames": [
"id",
"release_id",
"rule_code",
"agent_type",
"task_type",
"model_policy",
"primary_endpoint_id",
"fallback_endpoint_ids",
"condition_json",
"max_attempts",
"latency_budget_ms",
"priority",
"created_at"
],
"model_routing_rule_rows": [],
"milvus_collections": [
"fin_faq_collection",
"fin_policy_collection",
"fin_product_collection",
"materials_chunks",
"sanguo_chunks"
],
"milvus_detail": {
"fin_faq_collection": {
"fields": [
{
"name": "knowledge_id",
"type": "21",
"params": {
"max_length": 64
},
"is_partition_key": null,
"is_primary": true
},
{
"name": "embedding",
"type": "101",
"params": {
"dim": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "title",
"type": "21",
"params": {
"max_length": 256
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "snippet",
"type": "21",
"params": {
"max_length": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "tags",
"type": "21",
"params": {
"max_length": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "version",
"type": "21",
"params": {
"max_length": 64
},
"is_partition_key": null,
"is_primary": null
}
],
"other_keys": {
"collection_name": "fin_faq_collection",
"auto_id": "False",
"num_shards": "1",
"description": "",
"functions": "[]",
"aliases": "[]",
"collection_id": "468977979312384348",
"consistency_level": "2",
"consistency_level_name": "Bounded",
"properties": "{}",
"num_partitions": "1",
"enable_dynamic_field": "False",
"enable_namespace": "False",
"created_timestamp": "468981915387953162"
},
"row_count": 15,
"indexes": [
"embedding"
],
"index_desc_embedding": "{'metric_type': 'COSINE', 'index_type': 'FLAT', 'field_name': 'embedding', 'index_name': 'embedding', 'total_rows': 15, 'indexed_rows': 15, 'pending_index_rows': 0, 'state': 'Finished'}",
"partitions": [
"_default"
]
},
"fin_policy_collection": {
"fields": [
{
"name": "knowledge_id",
"type": "21",
"params": {
"max_length": 64
},
"is_partition_key": null,
"is_primary": true
},
{
"name": "embedding",
"type": "101",
"params": {
"dim": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "title",
"type": "21",
"params": {
"max_length": 256
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "snippet",
"type": "21",
"params": {
"max_length": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "tags",
"type": "21",
"params": {
"max_length": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "version",
"type": "21",
"params": {
"max_length": 64
},
"is_partition_key": null,
"is_primary": null
}
],
"other_keys": {
"collection_name": "fin_policy_collection",
"auto_id": "False",
"num_shards": "1",
"description": "",
"functions": "[]",
"aliases": "[]",
"collection_id": "468977979312384391",
"consistency_level": "2",
"consistency_level_name": "Bounded",
"properties": "{}",
"num_partitions": "1",
"enable_dynamic_field": "False",
"enable_namespace": "False",
"created_timestamp": "468981915964669957"
},
"row_count": 11,
"indexes": [
"embedding"
],
"index_desc_embedding": "{'metric_type': 'COSINE', 'index_type': 'FLAT', 'field_name': 'embedding', 'index_name': 'embedding', 'total_rows': 11, 'indexed_rows': 11, 'pending_index_rows': 0, 'state': 'Finished'}",
"partitions": [
"_default"
]
},
"fin_product_collection": {
"fields": [
{
"name": "knowledge_id",
"type": "21",
"params": {
"max_length": 64
},
"is_partition_key": null,
"is_primary": true
},
{
"name": "embedding",
"type": "101",
"params": {
"dim": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "title",
"type": "21",
"params": {
"max_length": 256
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "snippet",
"type": "21",
"params": {
"max_length": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "tags",
"type": "21",
"params": {
"max_length": 1024
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "version",
"type": "21",
"params": {
"max_length": 64
},
"is_partition_key": null,
"is_primary": null
}
],
"other_keys": {
"collection_name": "fin_product_collection",
"auto_id": "False",
"num_shards": "1",
"description": "",
"functions": "[]",
"aliases": "[]",
"collection_id": "468977979312384370",
"consistency_level": "2",
"consistency_level_name": "Bounded",
"properties": "{}",
"num_partitions": "1",
"enable_dynamic_field": "False",
"enable_namespace": "False",
"created_timestamp": "468981915702525957"
},
"row_count": 26,
"indexes": [
"embedding"
],
"index_desc_embedding": "{'metric_type': 'COSINE', 'index_type': 'FLAT', 'field_name': 'embedding', 'index_name': 'embedding', 'total_rows': 26, 'indexed_rows': 26, 'pending_index_rows': 0, 'state': 'Finished'}",
"partitions": [
"_default"
]
},
"materials_chunks": {
"fields": [
{
"name": "id",
"type": "5",
"params": {},
"is_partition_key": null,
"is_primary": true
},
{
"name": "content",
"type": "21",
"params": {
"max_length": 65535
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "type",
"type": "21",
"params": {
"max_length": 16
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "source",
"type": "21",
"params": {
"max_length": 256
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "page",
"type": "5",
"params": {},
"is_partition_key": null,
"is_primary": null
},
{
"name": "chunk_id",
"type": "5",
"params": {},
"is_partition_key": null,
"is_primary": null
},
{
"name": "image_path",
"type": "21",
"params": {
"max_length": 512
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "embedding",
"type": "101",
"params": {
"dim": 1024
},
"is_partition_key": null,
"is_primary": null
}
],
"other_keys": {
"collection_name": "materials_chunks",
"auto_id": "True",
"num_shards": "1",
"description": "RAG 知识库",
"functions": "[]",
"aliases": "[]",
"collection_id": "468669308763271583",
"consistency_level": "2",
"consistency_level_name": "Bounded",
"properties": "{}",
"num_partitions": "1",
"enable_dynamic_field": "False",
"enable_namespace": "False",
"created_timestamp": "468670424489132038"
},
"row_count": 1738,
"indexes": [
"embedding"
],
"index_desc_embedding": "{'metric_type': 'COSINE', 'index_type': 'FLAT', 'field_name': 'embedding', 'index_name': 'embedding', 'total_rows': 1738, 'indexed_rows': 1738, 'pending_index_rows': 0, 'state': 'Finished'}",
"partitions": [
"_default"
]
},
"sanguo_chunks": {
"fields": [
{
"name": "id",
"type": "5",
"params": {},
"is_partition_key": null,
"is_primary": true
},
{
"name": "content",
"type": "21",
"params": {
"max_length": 65535
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "chapter",
"type": "21",
"params": {
"max_length": 256
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "chunk_id",
"type": "5",
"params": {},
"is_partition_key": null,
"is_primary": null
},
{
"name": "source",
"type": "21",
"params": {
"max_length": 256
},
"is_partition_key": null,
"is_primary": null
},
{
"name": "embedding",
"type": "101",
"params": {
"dim": 1024
},
"is_partition_key": null,
"is_primary": null
}
],
"other_keys": {
"collection_name": "sanguo_chunks",
"auto_id": "False",
"num_shards": "1",
"description": "",
"functions": "[]",
"aliases": "[]",
"collection_id": "468669308764286544",
"consistency_level": "2",
"consistency_level_name": "Bounded",
"properties": "{}",
"num_partitions": "1",
"enable_dynamic_field": "False",
"enable_namespace": "False",
"created_timestamp": "468671098704363528"
},
"row_count": 1337,
"indexes": [
"embedding"
],
"index_desc_embedding": "{'metric_type': 'COSINE', 'index_type': 'FLAT', 'field_name': 'embedding', 'index_name': 'embedding', 'total_rows': 1337, 'indexed_rows': 1337, 'pending_index_rows': 0, 'state': 'Finished'}",
"partitions": [
"_default"
]
}
},
"env_variable_names": [
"ADVISOR_ROLLOUT_CUSTOMER_IDS",
"ADVISOR_ROLLOUT_ENABLED",
"APP_ENV",
"APP_NAME",
"DASHSCOPE_API_KEY",
"DEEPSEEK_API_KEY",
"JWT_ALGORITHM",
"JWT_AUDIENCE",
"JWT_CLOCK_SKEW_SECONDS",
"JWT_ISSUER",
"JWT_PRIVATE_KEY_PATH",
"JWT_PUBLIC_KEY_PATH",
"LOG_LEVEL",
"MESSAGE_BROKER_DLQ_TOPIC",
"MESSAGE_BROKER_OUTBOX_TOPIC",
"MESSAGE_BROKER_RUN_TOPIC",
"MESSAGE_BROKER_URL",
"MILVUS_TOKEN",
"MILVUS_URI",
"MODEL_DEFAULT_ENDPOINT",
"MODEL_FALLBACK_ENDPOINT",
"MODEL_ROUTER_CONFIG_REF",
"MYSQL_DSN",
"MYSQL_MAX_OVERFLOW",
"MYSQL_POOL_PRE_PING",
"MYSQL_POOL_SIZE",
"MYSQL_TX_ISOLATION",
"NEO4J_DATABASE",
"NEO4J_PASSWORD",
"NEO4J_URI",
"NEO4J_USERNAME",
"OFFSITE_ALIYUN_ACCESS_KEY_ID",
"OFFSITE_ALIYUN_ACCESS_KEY_SECRET",
"OFFSITE_ALIYUN_OCR_ENDPOINT",
"OFFSITE_ALIYUN_POLL_INTERVAL_SECONDS",
"OFFSITE_ALIYUN_REGION_ID",
"OFFSITE_ALLOWED_SENDERS",
"OFFSITE_DEEPSEEK_API_KEY",
"OFFSITE_DEEPSEEK_BASE_URL",
"OFFSITE_DEEPSEEK_ENABLED",
"OFFSITE_DEEPSEEK_MODEL",
"OFFSITE_DEEPSEEK_TIMEOUT_SECONDS",
"OFFSITE_IMAP_ENABLED",
"OFFSITE_IMAP_HOST",
"OFFSITE_IMAP_IDLE_ENABLED",
"OFFSITE_IMAP_IDLE_TIMEOUT_SECONDS",
"OFFSITE_IMAP_PASSWORD",
"OFFSITE_IMAP_PORT",
"OFFSITE_IMAP_USERNAME",
"OFFSITE_IMAP_USE_SSL",
"OFFSITE_MAILBOX",
"OFFSITE_MAIL_RETURN_RECEIVER",
"OFFSITE_MAIL_STORAGE_DIR",
"OFFSITE_MAIL_WORKER_BATCH_SIZE",
"OFFSITE_MAIL_WORKER_ENABLED",
"OFFSITE_MAX_RETRY_COUNT",
"OFFSITE_NOTIFICATION_SENDING_TIMEOUT_SECONDS",
"OFFSITE_OCR_ENABLED",
"OFFSITE_OCR_TIMEOUT_SECONDS",
"OFFSITE_RISK_RECEIVER_ID",
"OFFSITE_SETTLEMENT_RECEIVER_ID",
"OFFSITE_SMTP_DRY_RUN",
"OFFSITE_SMTP_ENABLED",
"OFFSITE_SMTP_HOST",
"OFFSITE_SMTP_PASSWORD",
"OFFSITE_SMTP_PORT",
"OFFSITE_SMTP_SENDER",
"OFFSITE_SMTP_TIMEOUT_SECONDS",
"OFFSITE_SMTP_USERNAME",
"OFFSITE_SMTP_USE_SSL",
"OFFSITE_WORKER_USER_ID",
"PROMOTION_IMAGE_BASE_URL",
"PROMOTION_IMAGE_ENABLED",
"PROMOTION_IMAGE_MODEL",
"PROMOTION_IMAGE_POLL_INTERVAL_SECONDS",
"PROMOTION_IMAGE_TIMEOUT_SECONDS",
"PROMOTION_MATERIAL_STORAGE_DIR",
"PROMOTION_MAX_PERFORMANCE_FILE_SIZE_BYTES",
"PROMOTION_MAX_PHOTO_SIZE_BYTES",
"PROMOTION_PDF_CONVERTER_PATH",
"PROMOTION_PDF_ENABLED",
"QWEN_EMBEDDING_API_KEY",
"RATE_LIMIT_ENABLED",
"RATE_LIMIT_KEY_PREFIX",
"RATE_LIMIT_MAX_REQUESTS",
"RATE_LIMIT_WINDOW_SECONDS",
"REDIS_CONNECT_TIMEOUT_SECONDS",
"REDIS_URL",
"RISK_ALERT_MAIL_DRY_RUN",
"RISK_ALERT_MAIL_ENABLED",
"RISK_ALERT_MAIL_RECIPIENTS",
"RISK_DAILY_REPORT_MAIL_DRY_RUN",
"RISK_DAILY_REPORT_MAIL_ENABLED",
"RISK_EVIDENCE_DIR",
"RISK_EVIDENCE_MAX_FILE_SIZE_MB",
"RISK_SCAN_INTERVAL_MINUTES",
"RISK_SCAN_POLL_SECONDS",
"RISK_SCAN_RETRY_LIMIT",
"RISK_SCAN_RUN_IMMEDIATELY",
"RISK_SCAN_SCHEDULE_ENABLED",
"RISK_SMTP_HOST",
"RISK_SMTP_PASSWORD",
"RISK_SMTP_PORT",
"RISK_SMTP_SENDER",
"RISK_SMTP_TIMEOUT_SECONDS",
"RISK_SMTP_USERNAME",
"RISK_SMTP_USE_SSL",
"SSE_CHUNK_CHARACTERS",
"SSE_HEARTBEAT_SECONDS",
"SSE_MAX_CONNECTION_SECONDS",
"TIMEZONE",
"WORKER_LEASE_SECONDS",
"WORKER_POLL_SECONDS",
"WORKER_RETRY_LIMIT"
],
"secret_ref_resolution": [
{
"endpoint_code": "knowledge-embedding-qwen-v3",
"secret_ref": "env:QWEN_API_KEY",
"resolvable": false
},
{
"endpoint_code": "deepseek-flash",
"secret_ref": "env:DEEPSEEK_API_KEY",
"resolvable": true
}
],
"setup_tool_probe": {
"exit_code": 2,
"stdout_tail": [
"存在同名不同结构的集合,已停止且未做任何覆盖,请人工确认:",
" - fin_faq_collection: 字段 snippet 长度不一致(实际 1024,期望 4000);字段 tags 长度不一致(实际 1024,期望 512);字段 version 长度不一致(实际 64,期望 16);缺少字段 intent",
" - fin_policy_collection: 字段 snippet 长度不一致(实际 1024,期望 4000);字段 tags 长度不一致(实际 1024,期望 512);字段 version 长度不一致(实际 64,期望 16);缺少字段 intent",
" - fin_product_collection: 字段 snippet 长度不一致(实际 1024,期望 4000);字段 tags 长度不一致(实际 1024,期望 512);字段 version 长度不一致(实际 64,期望 16);缺少字段 intent"
]
},
"source_chunks": {
"path": "knowledge/_chunks.jsonl",
"rows": 617,
"keys": [
"chapter",
"chars",
"collection",
"content",
"doc_id",
"doc_no",
"effective_date",
"expire_date",
"reviewer",
"section",
"source_file",
"source_url",
"tags",
"title",
"version",
"visibility"
],
"collection_dist": {
"fin_policy_collection": 281,
"fin_product_collection": 211,
"fin_faq_collection": 125
},
"visibility_dist": {
"public": 617
},
"brand_occurrences": {
"南方基金": 0,
"南方科技": 441,
"奶龙": 0,
"南方财富": 0
},
"brand_marker_zero": {
"南方基金": true,
"奶龙": true
}
},
"milvus_vs_source_gap": {
"fin_faq_collection": {
"milvus_rows": 15,
"source_rows": 125
},
"fin_policy_collection": {
"milvus_rows": 11,
"source_rows": 281
},
"fin_product_collection": {
"milvus_rows": 26,
"source_rows": 211
}
},
"collection_schema_variants": {
"official_setup_tool": [
"knowledge_id(64,PK)",
"title(256)",
"snippet(4000)",
"tags(512)",
"version(16)",
"intent(32,nullable)",
"embedding(1024)"
],
"temp_loader_script": [
"doc_id(64,PK)",
"title",
"content",
"chapter",
"section",
"tags",
"doc_no",
"version",
"source_file",
"visibility",
"embedding(1024)"
],
"live_milvus": [
"knowledge_id(64,PK)",
"title(256)",
"snippet(1024)",
"tags(1024)",
"version(64)",
"embedding(1024)"
]
},
"embedding_endpoint_probe": {
"chosen_model": "text-embedding-v3",
"chosen_dim": 1024,
"dim_contract": "app/core/knowledge_contracts.py VECTOR_DIM=1024",
"doc_basis": "D1.2-南方基金业务事实基座与虚构数据规范 §(embedding 维度 1024 / 通义千问 text-embedding-v3)",
"model_probe": {
"text-embedding-v3": {
"status": 200,
"dim": 1024
},
"qwen3.7-text-embedding-flash": {
"status": 200,
"dim": 1024
}
},
"env_fix_applied": "已向 group_fqcd_jr/.env 补 QWEN_API_KEY(与 QWEN_EMBEDDING_API_KEY/DASHSCOPE_API_KEY 同一把千问 key,115 字符)",
"finding": "实测两个模型名在 DashScope 均可用且均输出 1024 维:text-embedding-v3(现库+文档口径)与 qwen3.7-text-embedding-flash(tools 脚本口径)。故真正导致向量化失败的**只有** .env 缺 env:QWEN_API_KEY 这一个变量名;模型名不一致属口径分裂,不是致命错误,但必须收敛为一种(建议 text-embedding-v3)。",
"inconsistency_list": [
"tools/configure_embedding_endpoint.py:89,91 -> model=qwen3.7-text-embedding-flash, secret_ref=env:QWEN_EMBEDDING_API_KEY",
"tools/load_knowledge_milvus.py:36-38 -> EMBED_MODEL=qwen3.7-text-embedding-flash, EMBED_KEY=QWEN_EMBEDDING_API_KEY",
"app/core/knowledge_contracts.py:27 VECTOR_DIM=1024 注释写 text-embedding-v3 输出维度",
"现库 model_endpoint_config.id=1 -> model=text-embedding-v3, secret_ref=env:QWEN_API_KEY, context_window=8192, allowed_data_levels=[public]"
],
"post_fix_verification": {
"command": "get_memory_embedding_service().embed(resolve(agent_type='customer_service', task_type='embedding'), '基金赎回多久到账')",
"endpoint": "knowledge-embedding-qwen-v3 / text-embedding-v3 / env:QWEN_API_KEY",
"before_fix": "RecoverableAgentError: 所有已批准向量端点调用失败",
"after_fix": "EMBED_OK dim=1024",
"conclusion": "补齐 env:QWEN_API_KEY 后,知识检索向量化全链路恢复;这是一条独立于词表的『强制转人工』根因,已消除。"
}
}
}