- 分支内容对齐 qyqy_develop b6ec3aa,树完全一致(同步后 git diff 为空) - 覆盖本轮全部交付:客服 Agent 重构(安全路由 / 五出口 / 记忆与画像 / RAG 全链路) + 开发文档 62 份编号体系(D1.1 v1.17 索引) + 新增 D2.10-客服Agent端到端答辩文档-2026-09-21.html - 基线:e239eb7(2026-09-17 品牌口径统一快照),本提交为其直接后继
211 lines
6.6 KiB
JSON
211 lines
6.6 KiB
JSON
{
|
||
"round": "W10 / H-05 收口复核",
|
||
"date": "2026-09-19",
|
||
"method": "真连 Milvus(describe_collection)+ 真实检索双向验证",
|
||
"items": {
|
||
"1_visibility_partition_key_not_null": {
|
||
"evidence": {
|
||
"fin_basic_collection": {
|
||
"num_partitions": 16,
|
||
"visibility_is_partition_key": true,
|
||
"visibility_nullable": null,
|
||
"visibility_max_length": 16,
|
||
"has_visibility_field": true,
|
||
"field_names": [
|
||
"chapter",
|
||
"content",
|
||
"doc_id",
|
||
"doc_no",
|
||
"effective_date",
|
||
"embedding",
|
||
"expire_date",
|
||
"family_id",
|
||
"intent",
|
||
"param_class",
|
||
"reviewer",
|
||
"section",
|
||
"source_file",
|
||
"source_url",
|
||
"tags",
|
||
"title",
|
||
"version",
|
||
"visibility"
|
||
]
|
||
},
|
||
"fin_faq_collection": {
|
||
"num_partitions": 16,
|
||
"visibility_is_partition_key": true,
|
||
"visibility_nullable": null,
|
||
"visibility_max_length": 16,
|
||
"has_visibility_field": true,
|
||
"field_names": [
|
||
"chapter",
|
||
"content",
|
||
"doc_id",
|
||
"doc_no",
|
||
"effective_date",
|
||
"embedding",
|
||
"expire_date",
|
||
"family_id",
|
||
"intent",
|
||
"param_class",
|
||
"reviewer",
|
||
"section",
|
||
"source_file",
|
||
"source_url",
|
||
"tags",
|
||
"title",
|
||
"version",
|
||
"visibility"
|
||
]
|
||
},
|
||
"fin_product_collection": {
|
||
"num_partitions": 16,
|
||
"visibility_is_partition_key": true,
|
||
"visibility_nullable": null,
|
||
"visibility_max_length": 16,
|
||
"has_visibility_field": true,
|
||
"field_names": [
|
||
"chapter",
|
||
"content",
|
||
"doc_id",
|
||
"doc_no",
|
||
"effective_date",
|
||
"embedding",
|
||
"expire_date",
|
||
"family_id",
|
||
"intent",
|
||
"param_class",
|
||
"reviewer",
|
||
"section",
|
||
"source_file",
|
||
"source_url",
|
||
"tags",
|
||
"title",
|
||
"version",
|
||
"visibility"
|
||
]
|
||
},
|
||
"fin_policy_collection": {
|
||
"num_partitions": 16,
|
||
"visibility_is_partition_key": true,
|
||
"visibility_nullable": null,
|
||
"visibility_max_length": 16,
|
||
"has_visibility_field": true,
|
||
"field_names": [
|
||
"chapter",
|
||
"content",
|
||
"doc_id",
|
||
"doc_no",
|
||
"effective_date",
|
||
"embedding",
|
||
"expire_date",
|
||
"family_id",
|
||
"intent",
|
||
"param_class",
|
||
"reviewer",
|
||
"section",
|
||
"source_file",
|
||
"source_url",
|
||
"tags",
|
||
"title",
|
||
"version",
|
||
"visibility"
|
||
]
|
||
}
|
||
},
|
||
"verdict": "PASS:四个集合的 `visibility` 均为**分区键**(`is_partition_key=true`)、`max_length=16`、`num_partitions=16`;写入侧空值被拒(见 1b 行为实测)。注:pymilvus 的 `describe_collection` 不回传 `nullable` 字段(为 null),故 NOT NULL **不以元数据断言**,改以行为实测为准。"
|
||
},
|
||
"2_retrieval_partition_pruning": {
|
||
"mechanism": "分区键模式下 Milvus 只支持可下推为分区裁剪的表达式;`app/core/knowledge_contracts.visibility_expression()` 产出 `visibility in [...]`,由 `knowledge_search_service.search()` 作为 `filter` 下发。",
|
||
"bidirectional_test": {
|
||
"query": "各类基金的起投金额分别是多少?",
|
||
"visitor_tiers": [
|
||
"public"
|
||
],
|
||
"visitor_top": [
|
||
{
|
||
"doc": "PROD-001-05",
|
||
"vis": "public",
|
||
"score": 0.7329
|
||
},
|
||
{
|
||
"doc": "PROD-003-05",
|
||
"vis": "public",
|
||
"score": 0.7247
|
||
},
|
||
{
|
||
"doc": "PROD-005-05",
|
||
"vis": "public",
|
||
"score": 0.7132
|
||
},
|
||
{
|
||
"doc": "PROD-007-03",
|
||
"vis": "public",
|
||
"score": 0.7108
|
||
}
|
||
],
|
||
"visitor_sees_registered": false,
|
||
"customer_tiers": [
|
||
"public",
|
||
"registered"
|
||
],
|
||
"customer_top": [
|
||
{
|
||
"doc": "FAQ-0020",
|
||
"vis": "registered",
|
||
"score": 0.8717
|
||
},
|
||
{
|
||
"doc": "PROD-001-05",
|
||
"vis": "public",
|
||
"score": 0.7329
|
||
},
|
||
{
|
||
"doc": "PROD-003-05",
|
||
"vis": "public",
|
||
"score": 0.7247
|
||
},
|
||
{
|
||
"doc": "PROD-005-05",
|
||
"vis": "public",
|
||
"score": 0.7132
|
||
}
|
||
],
|
||
"customer_sees_registered": true
|
||
},
|
||
"verdict": "PASS:同一条 `registered` 档内容,访客档检索**看不到**、客户档**看得到**"
|
||
},
|
||
"3_over_fetch_cancelled": {
|
||
"evidence": "全仓 `rg -i 'over_fetch|over-fetch'` 在 app/tools/tests 下**零命中**(分区裁剪后 TopK 不再被不可见条目占满)",
|
||
"verdict": "已取消"
|
||
},
|
||
"4_two_schema_scripts_converged": {
|
||
"build_schema_definitions": {
|
||
"setup_milvus_knowledge_collections.py": 1
|
||
},
|
||
"importers": {
|
||
"load_knowledge_milvus.py": [
|
||
"import setup_milvus_knowledge_collections as collections_setup # noqa: E402",
|
||
"from setup_milvus_knowledge_collections import FIELD_LIMITS # noqa: E402"
|
||
]
|
||
},
|
||
"num_definitions": 1,
|
||
"single_source": "tools/setup_milvus_knowledge_collections.py",
|
||
"verdict": "PASS:`build_schema` 全仓只有 **1 处**定义(`setup_milvus_knowledge_collections.py`),`load_knowledge_milvus.py` 反向 import 它复用 `build_schema`/`FIELD_LIMITS` ⇒ 同名集合「两套字段」已收敛为一套"
|
||
},
|
||
"5_tier_change_is_ops_action": {
|
||
"doc": "见 `D2.1` §10.3 SOP 与 `tools/setup_milvus_knowledge_collections.py` 文件头注释(分区键模式下 Milvus 禁止手工 `create_partition`:`disable create partition if partition key mode is used`,新增档位值 = 直接写入数据、由 Milvus 自动分布,**不是**建分区动作)",
|
||
"verdict": "已落文"
|
||
},
|
||
"1b_write_side_fail_closed_probe": {
|
||
"method": "按生产同款 schema 建临时集合并插入一条缺 `visibility` 的行;无论成败都 drop 临时集合",
|
||
"collection": "h05_partition_probe_tmp",
|
||
"insert_without_visibility": "REJECTED: DataNotMatchException: <DataNotMatchException: (code=1, message=Insert missed an field `visibility` to collection without set nullable==true or set default_value)>",
|
||
"fail_closed": true,
|
||
"tmp_collection_dropped": true,
|
||
"verdict": "PASS:写入侧拒绝空分区键(fail-closed)"
|
||
}
|
||
},
|
||
"conclusion": "H-05 五项全部达标:① 分区键(+ 写入侧空值拒绝,行为实测);② 检索分区裁剪(`registered` 档内容访客看不到、客户看得到);③ `over-fetch` 已取消(全仓零命中);④ 双 schema 收敛(`build_schema` 全仓单点,loader 反向 import);⑤ 档位值变更口径已落文。⇒ `H-05` 由「未通过」改判为 **达标**。⚠️ **与 DoD ⑤ 原文的差异(如实登记)**:分区键模式下 Milvus 禁止手工 `create_partition`,所以「档位值变更 = 建分区」的表述不成立 —— 正确口径是「新增档位值直接写入,由 Milvus 自动分布」。"
|
||
} |