From 859c89898e9f56732d6e9eeb5cb4637c15c1e03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=BF=E4=BA=91=E7=A7=8B=E6=9C=88?= <15273589815@163.com> Date: Tue, 15 Sep 2026 09:08:02 +0800 Subject: [PATCH] =?UTF-8?q?=EF=BB=BF=E8=A1=A5=E5=85=85=20purge=20--apply?= =?UTF-8?q?=20=E7=9A=84=E7=9C=9F=E6=9C=BA=E9=AA=8C=E8=AF=81=E8=AF=81?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对账当时报 0 条死向量,--apply 分支没有真实样本。手工造了一个真实死向量 (上传后等向量写好,直接改库置 expired 且不投删除事件)跑通闭环: 对账发现 1 条 → 投递成功 1/0 → Worker 消费 → 复核归零。 --- .../演示用/知识库向量对账与清理-2026-09-15.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/演示用/知识库向量对账与清理-2026-09-15.md b/docs/演示用/知识库向量对账与清理-2026-09-15.md index 488b4cf..26054fe 100644 --- a/docs/演示用/知识库向量对账与清理-2026-09-15.md +++ b/docs/演示用/知识库向量对账与清理-2026-09-15.md @@ -86,6 +86,27 @@ Outbox 幂等语义一个都不绕。 问:基金申购后多久能确认 → 处置:直接回答 top1=0.8453 次优=0.6336 gap=0.2117(高置信) ``` +### ③ 的"检测 → 修复 → 复核"闭环也实测过 + +对账当时报 0 条死向量,`--apply` 路径**没有真实样本可跑**。为了不把一个没跑过的分支交出去, +手工造了一个**真实的死向量**:上传一份测试文档 → 等 Worker 写好向量 → **直接改库**把它的 +`status` 置为 `expired` 且**不投**删除事件(这正是历史上那批行的真实形态)。 + +``` +$ python tools/purge_expired_knowledge_vectors.py +对账发现 1 条已过期知识仍有向量(检索侧不看 status,它们仍在参与排序): + · fin_product_collection: 1 条 → ['206'] +[dry-run] 未投递。加 --apply 真投(每条一次 POST /api/v1/knowledge/{id}/vector-cleanups)。 + +$ python tools/purge_expired_knowledge_vectors.py --apply --wait 20 +投递完成:成功 1 / 失败 0 +等 20 秒让 Worker 消费删除事件 … +复核:仍有向量的已过期行 0 条 ← 向量确实被清掉了 +``` + +⇒ "对账发现问题 → 批量补投 → 复核归零"整条链路可用。验证用的测试行(id 204/205/206) +是**已过期且无向量**的行,既不影响检索也不影响对账结论(`死向量 0` 就是证据)。 + --- ## 3. 对账结果:`python tools/reconcile_knowledge_vectors.py`