← 项目索引

agmem · 分层知识检索

知识增量处理 · 语义缓存 · 版本一致性

目标与范围

把文档与人工录入的知识转化为带来源的可检索条目,供研发 FAQ 和本地 Agent 复用。相同问题通过精确缓存减少模型调用,近义问题通过向量比较复用检索结果,知识变化通过版本校验阻止旧缓存继续返回。

本地如何比较缓存

用户侧 agmemd 先获取云端知识版本,再用本地模型生成问题向量;在同一目录范围内,扫描 SQLite 缓存中的历史问题向量,取余弦相似度最高的一条。只有相似度严格超过阈值且知识版本相同,才返回已有结果。云端服务则先比较精确缓存,未命中后才生成查询向量,比较近义缓存或进入共享索引。

本地缓存比较与云端分支检索本地客户端先校验知识版本,再以本地向量比较同目录缓存。命中直接返回,未命中调用云端。云端先比较精确缓存,再生成查询向量比较近义缓存,最后进入共享混合索引。云端直连客户端不经过本地守护。 01 / 查询路径:命中即返回,未命中才继续 用户设备 · agmemd 本地守护 问题 + 目录范围读取云端 KB version本地 ONNX 生成问题向量 比较 SQLite 历史问题同 dir 内逐条计算余弦相似度取最高分;相似度严格 > 阈值且 cached version = current version 命中 → 返回已有结果更新 LRU 访问时间不执行云端知识检索 未命中 / 知识版本变化过线但版本过期:删除旧缓存 版本接口失败 → 502本地模型未就绪 → 503不使用未校验的旧答案兜底 云端 · agmemserv(也接受客户端直接访问) ① 精确缓存 + 版本一致key = SHA-256(dir | question)命中:跳过 embedding ② 云端 embedding + 近义缓存未命中才生成查询向量余弦过阈值 + 版本一致 命中 → 返回检索结果精确 / 近义任一命中均跳过 Qdrant 查询经 agmemd 返回时:回填本地结果 / 版本 + LRU 精确命中未命中命中未命中调用上游 /api/ask ③ 共享 Qdrant 索引dense + BM25 sparse → RRF关闭 hybrid 时退回 dense 检索过滤分数 → 字面 / 语义重复折叠 返回 + 两处独立缓存服务端写查询缓存经 agmemd 的请求同时写本地结果与版本;LRU 默认阈值 0.8,可配置本地与云端向量分别生成并非共享同一向量空间服务端版本读取失败时跳过缓存,继续索引检索
命中分支直接返回。经本地守护与直接调用云端是两种入口;本地命中仍需一次云端版本校验,并不等同于离线回答。

云端如何新增与更新知识

Wiki 同步通过文档编辑时间判断变化,只读取新增或更新文档的正文并分段入队。手动写入按原文去重;Wiki 换版保留与旧版相同的段,避免删除旧版本后丢失未修改内容。异步 Worker 保存原文向量,清洗出独立知识条目,校验事实锚点,再写入向量与稀疏索引;完成记录后推进知识版本。

云端知识新增、更新与缓存失效Wiki 比较编辑时间,仅新增或变化文档读取正文。手动写入与 Wiki 更新按各自去重规则进入 MySQL 队列。Worker 写入原文向量后清洗为独立知识条目,验证锚点,再 embedding 和 upsert,完成记录并增加知识版本。缓存下次读取版本时失效,不下发整个知识库。 02 / 写入路径:增量采集 → 清洗索引 → 版本门控 飞书 Wiki 增量同步新增文档 / obj_edit_time 增大 → 读取正文未变 → 跳过正文与清洗;全树扫描成功后处理移除长文分段,新版本先入队,再删除旧条目 显式写入 / 脚本导入POST /docs → 目录、原文与来源文档名常规写入:同批与库内相同原文去重Wiki 换版:保留与旧版同文的段,只做批内去重 MySQL:文档、任务与任务条目记录来源、原文、状态与审计;Worker 异步领取任务 原文入索引原文 embedding → original 点Qdrant upsert;保留原文溯源 清洗 + 分条 + 事实校验冻结上下文前缀,模型提取知识每条附带文档来源;过滤空条目校验原文事实锚点,缺失则重清仍缺失进入失败 / 重试路径 知识条目入索引逐条 embedding + 可选 sparseQdrant upsert clean 点MySQL CompleteCleanedKB version + 1 更新语义与清洗上下文L0 规则 → L1 知识快照 → L2 目录 / 父链 → L3 目标正文同目录轮次冻结前缀,复用上下文;仅清洗已入队的变更先入队新版不等于原子换版:旧点删除与新点写入分步完成删除 / 移动等知识生命周期操作同样推进知识版本 下一次查询读取新版本本地 / 服务端缓存版本不匹配不复用旧结果 → 重检索并回填不向客户端全量同步知识库本地保存的是查询结果缓存 知识源到索引是增量处理;云端到本地通过版本检查协调结果复用。
共享索引保存知识条目,本地缓存保存历史查询结果。版本增长使旧结果在后续查询时失效,增量同步发生在知识源与云端之间。

工程取舍

一致性与故障边界

架构依据实际查询、同步与清洗代码整理。文档换版采用先入队再删旧,索引写入与版本更新分步执行,属于异步可见的更新流程。语义相近不保证答案等价,需要结合知识域评估阈值;本页不把单次检索耗时或缓存命中率作为普遍性能承诺。