← 项目索引

研发 FAQ 助手

工程实践 · 脱敏逻辑视图

目标与范围

面向研发人员回答流程与环境问题,把可执行步骤、可复制命令和验收方法放在同一份答案里。回答来源是只读代码库、只读集群信息、飞书文档和 agmem 知识库;来源不足时说明缺口,避免生成看似可用却无法核实的命令。

组件与架构

问答服务通过导航门户提供入口,常见流程沉淀为内置 FAQ;需要当前值的问题再访问只读工具或知识库。SSE 将回答和工具调用逐步传给前端,来源随结果展示;预热 Agent 池降低每次都从头准备执行环境的重复工作。

研发 FAQ 助手逻辑架构研发提问与门户 → FAQ 与知识检索 → 只读工具边界 → 步骤 / 命令 / 验收。脱敏逻辑图,不表示部署节点数量或完整网络拓扑。研发 FAQ 助手 · 逻辑视图研发提问与门户FAQ 与知识检索只读工具边界步骤 / 命令 / 验收逻辑关系示意 · 不包含内部地址与生产配置
依据已有项目材料整理的逻辑图;方框表示职责,不表示独立服务数量。

执行流程

收到问题后先判断是否属于已沉淀的流程,能够直接回答的内容优先返回。追问某个文件或命令的当前准确值时,再进行有限回读。答案按编号步骤、命令代码块、验收点组织,并注明来源,让用户能按顺序执行并判断结果。

工程取舍

执行边界采用默认拒绝:只允许满足结构约束的只读命令,拦截敏感路径和工作区外访问。助手可以解释变更命令,但不会代替用户执行写入。此取舍保留答疑价值,同时把实际变更责任留在已有发布与授权流程内。

验证边界

既有材料包含提交代码问答、逐条来源展示和工具约束说明。白名单并不等同于完整安全证明;此页只描述已有执行约束与来源机制,不声称助手能够覆盖全部研发问题或自动完成生产操作。

agmem 知识检索与增量更新

FAQ 的知识检索由 agmem 提供。本地 Agent 可通过 agmemd 比较历史问题向量;问答服务也可直接调用云端。两种入口共享知识索引,但缓存作用域与向量模型分别管理。以下展开本地比较、云端查询分支与知识更新逻辑。

agmem 项目详情 · 缓存、索引与版本一致性 ↗

本地缓存比较与云端分支检索本地客户端先校验知识版本,再以本地向量比较同目录缓存。命中直接返回,未命中调用云端。云端先比较精确缓存,再生成查询向量比较近义缓存,最后进入共享混合索引。云端直连客户端不经过本地守护。 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 更新按各自去重规则进入 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 目标正文同目录轮次冻结前缀,复用上下文;仅清洗已入队的变更先入队新版不等于原子换版:旧点删除与新点写入分步完成删除 / 移动等知识生命周期操作同样推进知识版本 下一次查询读取新版本本地 / 服务端缓存版本不匹配不复用旧结果 → 重检索并回填不向客户端全量同步知识库本地保存的是查询结果缓存 知识源到索引是增量处理;云端到本地通过版本检查协调结果复用。
新增或编辑时间变化的文档进入异步清洗。知识条目落库后推进版本;本地在下一次查询中发现变化,不需要下载整个知识库。