ARTICLE · 1330130
AI台账助手——本地知识库技术文档
知识库本地应用特色总结(留档)
本文基于本仓库的记忆文件、部署文档(部署文档.md)、使用手册(USAGE.md)、近 60 条 git 提交以及相关代码(services/kb、services/docmeta、services/llm、services/docxtool 等)整理而成,用于记录本系统在"知识库的本地应用"上的核心特色,重点聚焦检索准确性与扩展功能两大方向。
一、本地化与工程形态(底层特色)
本系统是一个单文件、可离线、数据不出机的台账知识库,以单二进制 office_work.exe(Go + PHPWord,HTML/静态资源走 go:embed)形态运行,知识库存于单文件 SQLite(data/kb/cortex.db,底层 cortexdb:FTS5 + HNSW)。几个关键设计取向:
本地大脑优先:默认本机模型 gemma4:e4b(Ollama + 核显/CUDA 加速),含个人信息的帮扶材料默认不出机;云端(DeepSeek)仅作速度选项,且设置页顶部明确标注"全量出域"告警。公众号助手的 AI 成稿/模板生成同样跟随llm.active,选本机时主题与素材完全不出机,选云端时每次生成都要二次确认。词法向量而非语义向量:分块向量是 64 维词法哈希( lexicalVector),不是真实 embedding。这一约束决定了检索不能靠语义召回兜底,必须走"词法精修"路线——这正是第二部分全部工作的出发点。三层链路隔离:裸 POST /api/v1/search只测召回;/tasks/message走完整问答链路;accbench只测模型裸能力。三者不可互相替代,便于精确定位缺陷落在哪一通道。
二、检索准确性(核心特色)
针对"中文姓名/村名 + 大表册 + 同义词 + 错别字 + 多版本"的真实基层台账场景,系统做了一整套词法级确定性修复,而非依赖向量召回。
rrfFuse,rrfK=60) | ||
row_key 精确补召回 | row_key,建表达式索引,按精确值 SQL 补召回,不受候选截断影响 | |
kb_doc_titles | ||
synonymGroups | ||
ftsMatchPhrases | ||
isHeaderBoilerplate | ||
latest_onlykeepLatestPerHousehold)+ 村情整份材料按"村名|资料名"留最新(version_family.go,跨命名识别《一口清》新旧版);默认关闭,检索页仍可看全部历史 | ||
IsLikelyPersonName | ||
row_key/doc_id 表达式索引强制走索引;docRowsCache/chunkCountsCache/likeCache 缓存 + Warm 预热 |
一句话概括:系统把"中文姓名/村名检索"这种语义向量帮不上忙、却最容易出错的场景,用纯 SQL + 字典 + 同音 + RRF + 多版本治理的确定性工程手段,做到了可解释、可回归、不会因为猜错而静默答错。
三、扩展功能的特点
围绕"把材料用起来"而非"只存起来"的目标,扩展功能呈现几个鲜明特点:
多入口协同:管理后台 /admin、手机任务页/tasks、免登录"查询页"/q/<令牌>(令牌即凭证,用完即删)、公众号写作助手「发文章」/admin/mp(知识库的内容出口,详见第五节)。其中微信机器人是日常最高频入口,能力最完整,详见下文「四、微信机器人(最高频入口)」。资料全库共用,并自动带"最近上传/最近入库"两份上下文清单。直接改原 docx + 转 PDF:不走模板重填,而是 Word COM( docx_tool.py内嵌进 exe)在原件上改字、套 A4(超版心宽图等比缩入,防裁切)、加图注(逐图说明、同页居中)、导出 PDF;串行互斥 + 超时 tree-kill 孤儿进程 + WPS 回退,绝不误关用户自己开的 Word。指标中心 / 迎检材料(特色闭环):AI 读《考核清单》→ 材料类型打标(13 类闭集)→ 缺件/过期盘点 → 按户缺件下发 → 补录闭环标记 → 一键打包(Word 汇报 + Excel 缺件 + 每户产物)。强调只读溯源:每日只读 lint体检、按户时间线(只认正文业务时间,绝不用 mtime)、kb_changelog审计、答案引用校验——原文只读、元信息只增不改。去重与冲突治理:上传即 FindSame冲突检测(精确指纹/同户同名/资料族跨命名三依据),FindDuplicates三种分组(exact/household/title)保守提示,默认"都保留"防误删。快路径 + 云端脱敏: kb_query高置信查询跳过 agent 工具环,直接检索 top_k + 单轮生成(实测 284s → 12.4s);脱敏通道把身份证/手机号/银行卡(Luhn 校验位防误报)替换为占位符出域,本地还原并校验残留,云端不通熔断回落本机——问答快路径的脱敏不构成全局保护(设置页明确提示)。公众号助手另有一条独立的硬兜底:成稿/模板的所有输入与输出都过redact,且通道跟随llm.active+ 云端二次确认。MCP 工具与自动化:内置 file/excel/doc/web/zip 五组本机工具,主 exe 自身充当 MCP 服务端(无需额外 exe),后台热加载;配合定时提醒/催办、异步任务、自动备份( VACUUM INTO一致性快照,默认凌晨 3 点留 7 份)。离线地图:离线百度 GL 引擎 + annotations.db,不依赖 9091 后台;标注按几何中心画彩色点、房框只读保留;写接口刻意独立路径 + 登录白名单按路径精确匹配(防 POST/DELETE 被免登录公开)。
四、微信机器人(最高频入口)
微信助手是基层日常使用最频繁的入口:管理后台「系统设置 → 机器人接入」逐个扫码绑定(iLink Web 登录,二维码以 base64 直接回前端展示),每个机器人对应一个 iLink 账号、一套独立凭证与交互日志。
登录后发给机器人的任何消息都进入 AI 任务系统——不再是"发关键词直接查资料"的固定路由,而是模型理解意图后,可能查库、读刚发的文件、查采集数据,也可能执行授权内的操作(生成 Word、导出台账、订阅报告)。
多人怎么共用:iLink 协议只处理一对一的用户消息,代码里没有群聊/群消息分支(handleMessage 只认 messageTypeUser),所以不能拉群;工作队成员把任一机器人加为好友私聊即可,各自发消息各自答。会话与任务按发送者 FromUserID 分开,但这是会话隔离,不是数据隔离——知识库、上传目录、最近上传全库共享,同一份资料不会重复入库。多机器人只是「多绑几个微信号」,不改变共享口径;加任意一个都能查到同一批资料。
隔离边界与生命周期:列表存 data/wechat/bots.json;仅凭证与日志按机器人隔离(credentials-.json、logs-.jsonl、raw_items-.jsonl),data/uploads/wechat// 按用户分目录但不按 bot 分。异步推送靠「用户→机器人」映射落盘 data/wechat/user_bots.json(0600),重启后第一次就能找对号,不必等用户再发一条消息。
停用/删除实例会取消该实例专属的可取消 ctx 并等待消息循环真正退出(30 秒退避也能打断);删除时把凭证/日志/raw 归档到 data/wechat/archived/-<时间戳>/(不真删、同名重建不会继承旧登录态)。
服务关停统一取消并等待三个定时扫描器(备份/提醒/报告)收尾,避免与关库抢写锁。
下面 1–4 是能力主线(单机器人与多机器人下完全一致);公众号写作助手是另一条内容出口,见第五节。
1. 两种问答形态
任务化 agent 模式(主路径):消息进入 agent 工具环( MaxRounds=6),多轮查库 / 读文件 / 生成文档,可完成"查资料 → 起草填报规则 → 生成 Word 模板"这类复合任务。单轮 RAG(降级路径):agent 不可用或 LLM 未配置时,退回 kb_search + 大模型综合的单轮检索回复;模型仍未配置则再退回"原文片段罗列"。机器人永远有回应;长回复由sendChunks分批发送(每条 ≤1950 字、最多 5 条、相邻间隔 350ms 防限流),不再把一条长回复截断成半截消息。
2. agent 工具环能力集(挂接即启用)
kb_search | file 参数可定向到某份文件查,避免全库混入其他文档内容 | |
kb_stats | ||
list_word_configsgen_word | ||
list_task_data | ||
create/list/delete_report_schedule | ||
map_find_household | ||
mcp.json |
门控式意图理解:消息含 ≥2 个问题或超长时,先用 1 次云端 LLM 把乱输入拆成"逐题 + 短语关键词"的结构化检索计划注入 agent 首轮,agent 照计划逐题单独 kb_search、按序编号作答、每题标注来源、查不到不编造;轮数随问题数放大并封顶 40 防失控。简单输入完全不走这一步,快路径零开销。
3. 附件自动入库(高频刚需)
聊天里发来的文件/图片自动解析入库,并按扩展名分流:
文档(Word/Excel/PDF,含老版 .xls/.doc走 docling 纯 Go 解析);图片走本地 OCR(RapidOCR):先判"普通照片"跳过(防把风景照脑补成乱码入库),再做质量门禁(乱码率过高且内容过短则拒收),避免脏数据污染检索库; 压缩包 .zip/.tar.gz/.tgz/.rar/.7z自动解压逐篇入库(rar/7z 走纯 Go 库无 cgo;含 GBK 文件名还原、子目录建父目录、包内同名冲突直接覆盖旧版)。
入库三道关卡(保守防误删):
①内容指纹去重——同一份原样重发直接跳过,若库里旧标题是 GBK 乱码则按本次正确文件名修正;
②冲突检测——同户/同名但内容不同(改版重传)登记"待决事项"并问用户:1️⃣替换旧版(旧原件移入归档夹、不删除)→2️⃣两版都留→3️⃣只存档不入库(默认);
③正常入库。原件永远先存档再入库(以后重解析/换分块策略靠 source_path 反查),并把"最近上传"备忘落库(每用户最多 3 份、重启不丢),支撑"这个文件"的指代定向。
4. 一句话做成公开查询页(微信口令快车道)
发一份 Excel + 说"做成查询页",机器人把这张表变成只读、可筛选分页的公开网页(/q/<32位令牌> 免登录白名单,令牌即凭证、用完删),微信原生发图推送二维码;支持改名口令、删除口令(连数据表一起 DROP)。双指令快车道(改名/筛选/删除)+ LLM 人话兜底,让手机上不发后台也能自助出公开表。
安全与隐私治理
后台开关 allow_upload控制是否允许聊天上传;写操作(生成、删除、订阅取消)经确认闸门,明确"确认/取消"语义,其他内容一律不视为同意。微信上传件对网页端可见是有意为之:知识库是全局单库,同一份资料微信入库后网页任务照样能检索、读全文,不要求再发一遍。 工具环里"知识库资料严禁用 mcp_pdf_*/mcp_file_read_file读源文件"(不在本机磁盘),从提示词纪律层堵住读盘误调用。内容出口的出域闸门:公众号助手的 AI 成稿/模板生成按 llm.active选端点,云端模式必须带allow_cloud(页面每次生成前弹窗确认)才放行,绕过页面直调接口一律 400;所有输入与 AI 输出过redact硬兜底,prompt 里的隐私红线只是软约束,推送草稿前仍需人工复查。
五、公众号写作助手(知识库的内容出口)
顶栏「发文章」(/admin/mp,排在「问 AI」之后、不属于「出 Word」组)把知识库材料变成可直接进公众号草稿箱的文章:
5 套出厂模板 + 自建模板: guide-steps / magazine / notice / tech-dark / report五套内置 HTML 模板,源码以text/plain只读回传、预览走 sandbox iframe;可用 AI 按一句要求生成新模板,预览确认后另存,出厂模板禁覆盖禁删。模板正文不写填写说明,避免残留进成品。AI 成稿 + 人工修订闭环:选模板 → 填主题/素材/附加要求 → 产出标题、摘要、正文 HTML;成稿可在可视化预览( contenteditable)与源码间双向切换修改,确认无误后才推草稿箱。系统只调微信草稿 API(素材上传、draft/add、batchget、delete),没有发布/群发能力。按需取材并脱敏:勾选「用知识库取材」后按主题检索( latest_only防串版本);检索结果与用户手粘的素材、主题、模板 HTML 在发送前统一过redact(身份证/手机/银行卡号 → 占位符),AI 输出的标题/摘要/正文再脱敏一次。prompt 另写隐私红线:人名一律 xx、地名泛化为 xx村/xx乡、完整格式号码绝不出现。通道跟随 llm.active:成稿与 AI 生成模板都走Complete()(按当前启用的端点选路),不再固定CompleteOn("cloud")。本机 = 输入不出机;云端 = 页面二次确认 + 服务端requireCloudConfirm强校验allow_cloud。本机小模型写长 HTML 较慢/质量略低,这是「数据不出机」的代价,页面已明示。凭据单一入口:AppID/AppSecret 存 config.yaml的mp段(gitignore + 0600),唯一写入口是「系统设置」的公众号凭据卡;/admin/mp只显示只读状态并跳转。AppID 默认只读展示(防浏览器把网站账号自动填进 AppID 框),前后端双重格式校验(wx+16 位十六进制 / 32 位十六进制),AppSecret 永不回显明文、只回带首尾片段的掩码。
六、总体判断
本系统在本地知识库应用上最突出的特色,是在"无语义向量、纯词法"的约束下,用一套确定性的工程手段(精确补召回 + 同音纠错 + 同义词 + RRF 融合 + 多版本治理 + 人名闸门)把中文基层台账的检索准确率做到可解释、可回归、不静默出错;
扩展功能则围绕"迎检/帮扶"业务闭环,把入库、检索、生成、改稿、盘点、脱敏出域串成一条数据不出机优先、但又能借云提速的可控链路。
整理时间:2026-11-07,补充公众号写作助手与多机器人生命周期:2026-11-08















































































