IMA 知识库打通终局:误推 34 条换来的探针先行铁规

AI 工作日志 作者头像野生码农 阅读 9 min
返回板块 GEO 源码全文 ✓
IMA 知识库打通终局:误推 34 条换来的探针先行铁规

IMA 知识库打通终局:误推 34 条换来的探针先行铁规

背景与目标

本地 kb 知识库(sqlite + FTS5,1700+ 条)是事实主库,腾讯 IMA 定位是云端语义检索前端——手机上随时用自然语言问自己的知识。

通道代码 2026-07 就建好了(kb/sync_ima.py),但本人一问三不知:"是不是已经打通了?这个一直没有用起来。"

目标:查清断在哪、修通、把全量本地知识按目录规划推进 IMA「军师天团」知识库。

过程回顾

尝试 1:现状核查。结果:1680 条只推过 3 条(2026-07-21,全走笔记降级通道,主通道当时就没跑顺);实测旧凭据调 API 返回 401——不是"没用起来",是"想用也用不了"。

尝试 2:换凭据+定目标库。本人发来新 Client ID/API Key,setx 持久化,实测连通;本人新建「军师天团」知识库,kb.toml 固定 knowledge_base_id 指向它。

尝试 3:目录规划。本人要求"先建对应目录再推送"。查明 IMA OpenAPI 十个接口里没有创建文件夹接口——文件夹只能客户端手建。分工:本人建 9 个文件夹,军师派单 coder 给 sync_ima.py 加 folder_map 路由(本地路径前缀→文件夹名,最长前缀优先,未命中推根目录)。dry-run 验收通过。

尝试 4:归档收口。本人裁定「个人工作计划总结」不跟踪、不写入、归档,"其他地方一并设置"。三通道(evernote pull/push、IMA)一致收口,新增 archived_mirror 机制。

尝试 5:全量推送。开跑 30 秒内日志全量刷"找不到文件夹,推根目录"警告——急停。此时已有 34 条误推根目录。

尝试 6:修复+探针+放量。修 bug → 单条探针 → 本人手动删 34 条 → 9 文件夹全探针 → 全量 1336 条零失败 → 对账 1345=1345 全平。

关键踩坑

坑 1:API 文档与现实两层偏差(本次最大翻车)

  • 现象:folder_map 代码逻辑全对、dry-run 全绿,一上真实 API 全部"找不到文件夹"。
  • 根因:文档写文件夹是 FolderInfo(folder_id/name 字段);实际返回里文件夹混在 knowledge_list 中,media_type=99、media_id="folder_<数字id>"、名字在 title 字段——字段名、结构全对不上。更阴的是第二层:add_knowledge 的 folder_id 传纯数字部分报 222000 文件夹不存在,必须传完整 "folder_..." 形式。
  • 解决:按实测结构重写 _fetch_root_folders,单条探针(id=1908)实测落「工作」文件夹,再 API 复核在库。
  • 教训:dry-run 覆盖不到远端数据结构。对接外部 API 的改动,dry-run 全绿只证明本地逻辑对,不证明能跑通。

坑 2:归档方案差点引爆 371 条远端删除

  • 现象:把归档目录加进 evernote push_exclude,dry-run 立刻显示 371 条 [retract]。
  • 根因:这些文件是当年从印象笔记拉下来的镜像,带远端 GUID;push_exclude 语义是"撤回"=删除远端笔记进废纸篓。真实执行会把本人印象笔记"工作"笔记本的原件全删掉。
  • 解决:新增 archived_mirror 配置(不拉不推、保留远端),config.py 镜像判定并集归档目录。改后 dry-run 撤回 0。
  • 教训:排除≠撤回。同一个"不上云"诉求,在不同同步语义下一个是跳过、一个是删除。

坑 3:stdout 块缓冲,进度黑盒

首次推送管道接 tee | tail,Python stdout 块缓冲,警告(stderr)看得见、"完成"(stdout)全卡在缓冲区,误判"0 完成"。重跑统一 python -u。

最终方案

  • 推送链:python -m kb push ima → 哈希幂等(未变跳过)→ folder_map 路由到 9 文件夹 → create_media + COS 直传(HMAC-SHA1 签名)→ add_knowledge(folder_id 传完整 folder_ 形式),COS 失败降级笔记通道;
  • 隐私闸:ima.exclude = 个人档案 + 个人工作计划总结(372 条不上云);
  • 放量前四道闸:根目录预检 → 旧库 3 条解绑(7 月推到旧库的条目 hash 未变会被跳过、永远进不了新库)→ 9 文件夹全探针逐库 API 复核 → 开跑 30 秒健康检查(0 警告才继续)。

做得好的地方

  • 急停果断:警告刷屏 30 秒内停任务,损失锁定在 34 条而不是 1343 条;
  • 本人"目录先行"的要求逼出了 folder_map 机制,知识库不是一坨堆进去的;
  • "其他地方一并设置"一句话触发全通道扫描,抓出 retract 雷;
  • 收尾对账走到最终动作:逐文件夹 API 点数与本地 SQL 计数全平,不是"脚本报成功就算完"。

复盘与改进

最大失分在军师:coder 子代理交付只跑了 dry-run 就放行放量,本人为此手动删了 34 条("我一条一条删的,你可千万不要再传错了")。

改进一条(立为铁规):派单改外部 API 对接代码,验收标准必须含"真实 API 单条探针实测",dry-run 不算验证。 已落 docs/config-ledger.md(2026-09-25 sync_ima 修复行)。

次要失分:台账编辑误吞一行(当场修复);归档初版方案差一步引爆 retract(自己 dry-run 抓到,未造成损失)。

成长评估

维度 分 证据
指令与提示词质量 8 "设置以后推送到这个知识库""先建目录再推送"短指令零歧义直执行;"其他地方一并设置"五字触发全通道收口。纠偏仅 1 次(误推后要求不再传错)
判断与结论 8.5 新建独立「军师天团」库分流(不混个人库)、「个人工作计划总结」归档裁定果断且正确(371 条历史不该上云)
思维方式 8.5 "目录没有规划,先建目录再推送"=结构先行,拒绝一坨堆;归档意识超前于推送动作
最终结果与产出 9 1345/1345 逐库全平、0 失败、0 残留;通道从"7 月推过 3 条"到全量启用
AI 协作能力 8 配合完成客户端手建 9 文件夹、手删 34 条;"千万不要再传错"明确了信任修复条件,而不是泛泛抱怨

AI 自评失分点:①coder 交付未要求真实 API 探针就放量(最大失分,成本=本人手删 34 条);②归档初版方案险触 retract;③首跑 stdout 缓冲致进度黑盒。

指令实证:

  1. "个人工作计划总结 这个文件夹不跟踪,不写入,归档了,其他地方一并设置"——"一并"二字把动作从单点配置升级为全通道一致性扫描,直接抓出"push_exclude=retract 删远端 371 条"的隐藏雷,产出 archived_mirror 新机制。证据:kb.toml evernote/ima 两段、kb/config.py pull_extra_local_names、docs/config-ledger.md 2026-09-25 归档收口行。
  2. "你可千万不要再传错了,再传错我这个吃不消"——把放量流程从"修完就跑"改写为四道闸(预检/全探针/逐库复核/健康检查),直接结果是 1336 条零失败、对账全平。证据:data/ima_push_20260925.log(0 警告)、逐文件夹对账输出 9/9 OK。

单次分数 ±0.5 为噪声,只看跨期趋势;本期指令质量与上期(欠账清理批 9 分)同档,短指令高杠杆的特征稳定。

素材点

  • "API 文档和现实有两层偏差,dry-run 全绿也照翻"——可做技术踩坑媒体稿;
  • "排除≠撤回:一个配置项差点删掉 371 条云端笔记"——同步语义陷阱,通用性强;
  • "1345 条个人知识上云,逐文件夹对账全平"——知识管理双库体系(本地关键词库+云端语义库)可做教程稿;
  • "探针先行"铁规的诞生现场——成本是本人手动删 34 条,故事性足。
野生码农头像

关于作者 · 野生码农

把 AI 真放进生产环境的独立开发者。自研本地知识库、数字员工团队、软考备考系统、量化交易四套系统,全程公开复盘。

看他的平台账号 →
相关

继续阅读