版本:v1.0 | 日期:2026-07-18 | 编写依据:F:iRobot\AISearch 目录实际文件清单 + 本项目历史会话中的实测验证结果
OG-RAG 是 Raycontentech 自建的企业知识检索系统,服务于 F:iRobot\AISearch(11,568 篇文档,含 XDocs 5.4 专有资料、DITA 语料、MCU 翻译QA样例等),核心特征是在传统向量+关键词混合检索之外,叠加了一层超图本体(hypergraph ontology)用于捕捉文档间的关系型知识——这是"本体增强"一词的实际所指,区别于普通RAG。
系统本身与接入它的LLM代理是解耦的两层:
handleData_v4.py)—— 独立于任何大模型,谁都可以接kimi3proxy.py / Kimi代理,:5001)—— 负责把OG-RAG检索结果转换成特定大模型能理解的上下文注入或工具调用结果这个解耦是"AI对话搜索模型无关"这个说法成立的基础,也是后续Oxygen/翻译平台能各自接入的前提。
以下表结构和行数来自本会话 inspect_db_schema.py 的实际探测结果,已验证:
| 表名 | 行数 | 核心字段 | 作用 |
|---|---|---|---|
metadata |
11,568 | id/path/title/shortdesc/context/doc_type/keywords/categories/chunk_index等26列 | 文档主表,检索的主要数据源 |
hypernodes |
46,097 | node_id/attr_key/value/topic_id/key_embed/val_embed | 本体节点——注意key和value都各自有独立向量(BLOB),意味着不仅"值"能语义匹配,"属性类型"本身也能语义匹配,这是比普通KV属性表更强的设计 |
hyperedges |
49,688 | edge_id/topic_id/group_name/weight | 超边——按group_name分组、带权重,不是简单的二元关系 |
edge_node_map |
243,911 | edge_id/node_id | 边-节点多对多映射——一条超边可以连接多个节点,这才是"超图"(hypergraph)而非普通图的原因 |
corrections |
0(当前为空) | source_text/corrected_text/source_lang/target_lang/domain/source_hash | 术语修正/翻译记忆表,schema已就绪但未灌数据 |
miss_log |
0 | query/user_role/top_score/ts | 检索失效反馈日志表,schema已就绪但未见写入记录 |
corrections表虽然当前是空的,但目录清单里存在与之配套的独立FAISS索引(corrections_faiss.bin/corrections_ids.npy/corrections_meta.json)和专用API路由文件(corrections_routes.py),说明这张表的设计意图是语义可检索的术语库,不是只能做字面LIKE匹配的简单对照表——这个能力尚未启用,因为表本身没数据。
注:model_distiluse确认是多语言embedding模型(distiluse-base-multilingual-cased-v2是sentence-transformers系列的标准多语言模型),这一点对第4节"翻译平台对接"很重要——理论上向量检索本身具备跨语言语义匹配能力,但这个能力在当前OG-RAG的/search端点里是否被用于跨语言检索,未经本会话验证。
og_retriever.py:推测承载混合检索逻辑(历史会话口述为"FAISS+BM25+hypergraph"三路融合,即hybrid_search_v5),未在本次核实源码fix_context_truncation.py,已应用,索引已重建)doc_type打分偏置:parameter类文档+0.45分排斥topic类文档(PATCH1,已应用,服务已重启生效)og_retriever.py具体打分权重(标题×4/终评×1.35/rerank×1.05)来自既往会话口述,本次未复核源码/search端点:本会话代理接入并验证过能返回结果(_ograg_http_search)/chat端点(门户演示用,历史会话口述其含DB关键词直查通道,与/search是两套检索逻辑)——这个差异本身未在本会话实测复核,仅作为历史发现记录corrections_routes.py:存在独立路由文件,具体端点/参数未测试admin_routes.py + AdminPanel.html/AdminPanel.jsx(管理控制台)、migrate_db.py/update_index.py/output_index.py(索引维护工具)、win_utf8.py(Windows编码兼容)、wsgi.py(生产部署入口)。_archive/目录里有大量带日期的历史版本(03/12~04/16一路到当前),说明这套系统持续迭代了至少数月。
corrections表有索引基础设施但0行数据,语义检索能力完全未经实测miss_log表0行,说明检索失效的运营反馈闭环目前没有被实际使用og_retriever.py混合检索的具体实现和打分公式本次会话未逐行核实,前几节所有相关表述基于既往口述,不是本会话读代码得出的/chat与/search两套逻辑的差异未实测复核这是唯一一层全程有实测验证、有日志/断言测试为证的部分,其余各层多少都有推测成分。
两条通道互补,不是二选一:
search_in_project/get_related_resources_overview_from_project等检索类工具时,代理拦截并路由到OG-RAG;写工具(save_document等)透传给Oxygen客户端本地执行,代理不碰OGRAG_INJECT=true时,每轮对话取最后一条用户消息,自动查OG-RAG,结果以system消息注入——不依赖模型是否"想到"要检索,强制生效| 版本 | 问题 | 修复 | 验证方式 |
|---|---|---|---|
| v1.2 | Oxygen残留gpt-5.5占位符导致上游404 |
模型白名单+自动回退 | 复现404日志后确认根因 |
| v1.3 | Oxygen发developer角色被误降级;流式请求下检索工具被透传回Oxygen内置RAG,自有OG-RAG被绕过 |
developer→system映射;流式请求含工具时切换缓冲模式再转SSE | 代码审查 |
| v1.4 | OG-RAG的/search打分体系有偏置,已知关键词命中文档排不进前列 |
新增SQLite直查通道,与HTTP结果合并,DB直查优先 | test_acceptance.py断言测试,首次运行失败(详见2.3) |
| v1.5 | v1.4的DB直查打分是naive词频求和,无停用词/IDF/大小写归一化,被通用词淹没 | 加停用词表+IDF加权+大小写归一化 | test_acceptance.py重跑通过 |
| v1.6 | 检索到了对的文档,但预览窗口600字符+5篇均分预算,大文档答案细节被截掉 | 预览窗口扩到2500字符,注入预算改为按排名非线性分配(第一名55%) | dump_injected_context.py溯源比对(详见2.3) |
| v1.7 | find_similar_reusable_content工具是硬编码假数据桩,从未真正接入OG-RAG |
接入真实检索,且改用HTTP hybrid优先(语义检索)而非DB直查(字面匹配),因为"新建文档"场景用词与既有文档字面不重合 | 代码修复,尚未实测验证(本次仅完成修复,验证方法已给出但未执行) |
这个过程本身是本文档最有实证价值的部分,值得写进设计文档作为"如何验证RAG真正生效"的方法论参考:
test_acceptance.py第一次运行失败,验收目标文档using_a_catalog.dita未进入DB直查返回的前10count()敏感)test_acceptance.py通过dump_injected_context.py把实际注入模型的system消息全文打印出来,逐token比对Oxygen真实答案里的10个特征细节,发现7个不在注入文本里——证明"检索到了正确文档"不等于"注入内容完整覆盖了答案",此前一轮判定为"PASS"是过早的结论,本文档予以修正get_document_content)本身处于权限被拒绝状态,无法确认是否是文件读取工具补上了缺失细节——最终建议的对照实验(OGRAG_ENABLED=false重新提问)尚未执行,结论待补用户在AI Positron对话里提问,Route B强制注入,Route A按需拦截工具调用。已用真实验收案例验证(XDocs catalog配置问题,见2.3),当前已知限制是大文档的注入完整性依赖v1.6的预算分配策略,未对所有文档规模做穷尽测试。
依赖条件:
OGRAG_ENABLED/OGRAG_INJECT环境变量正确配置结论(本次评估的核心发现):理论上,本体增强(hypergraph)能在字面用词不重合的情况下发现概念相关的既有内容,这是"新建文档找可复用素材"场景最需要的能力(新草稿的措辞不可能和既有文档字面重合)。但截至v1.6,专门服务这个场景的工具find_similar_reusable_content是硬编码假数据桩,从未真正接入OG-RAG——v1.7已修复代码,但尚未实测验证。
另需注意:Route B注入只在用户通过对话触发AI(如"帮我写一篇关于XX的topic")时生效,Oxygen纯UI"新建空白文档"动作不经过AI对话,不会触发任何RAG检索——这是"新建文档获益"必须加的限定条件,不能笼统宣称。
依赖条件(新增):
find_similar_reusable_content返回的channel字段是http_hybrid且命中正确文档)og_retriever.py的hybrid检索确实启用了hypergraph关系检索——这一层本身未核实Schema组件解析(get_sch_component_details/get_xsd_component_details)、AI动作管理、文档保存/校验等工具目前是mock实现或纯本地逻辑,与OG-RAG无关,不在本文档讨论范围。
corrections表):术语/既有译法查询,命中即强约束,可直接喂给讯谷的terminology参数ograg_search(),metadata表):语境/风格补充,弱约束,仅作背景参考代码已交付(ograg_translate_bridge.py),设计上模型无关,理论上任何走该代理的翻译请求都能获益。
corrections表当前0行。这意味着"术语一致性"这个最有价值的收益点,在种子数据灌入之前是0,不是"部分可用",是完全不可用。已交付配套方案:
seed_corrections.py:把XHSC/ABB既有QA审校产出(既往会话已确认这些流水线真实存在且在产出数据)导入corrections表validate_translation_rag.py:量化验证检索命中率,避免灌完数据后仍然是"设想生效"而非"实测生效"corrections表配套的独立FAISS索引(corrections_faiss.bin等)说明系统设计时就打算让这张表支持语义检索,不只是字面匹配。这意味着4.1节设计的"第一级:确定性LIKE匹配"只是当前ograg_translate_bridge.py用的临时策略,未来如果corrections_routes.py里的语义检索端点跑起来了,术语匹配的召回能力会比现在的字面LIKE匹配更强(能处理"源文措辞和术语库里存的版本不完全一致"的情况)——但这是尚未验证的潜力,不是当前已实现能力。
corrections表需要先灌入种子数据(当前0行,价值为0)/v1/translate端点需要实际支持接收terminology参数并让模型真正遵循(本会话只验证了"检索层能否挖出术语",未验证"模型是否采纳")corrections_routes.py的实际API可用性(未测试)| 项 | 状态 | 风险 |
|---|---|---|
| Kimi代理层(Route A/B/DB直查/IDF打分/预算分配) | 已验证生效 | 低——已有真实验收案例+断言测试 |
Oxygen新建文档复用(find_similar_reusable_content) |
代码已修复,未验证 | 中——需要实测才能确认hypergraph语义检索真的比字面匹配强 |
| 翻译平台对接 | 设计+代码已交付,corrections表为空 |
高——价值为0直到种子数据灌入且验证通过 |
OG-RAG服务本身(/search打分体系、PATCH3、hypergraph具体实现) |
部分修复,部分未验证 | 中——本文档大部分该层描述基于既往口述而非本次代码核查 |
miss_log反馈闭环 |
未使用 | 低优先级,但长期看是系统自我改进的关键缺失环节 |
OGRAG_ENABLED=false对照实验,补上2.3节遗留的未完成验证find_similar_reusable_content修复(Oxygen新建文档场景)corrections表种子数据并跑validate_translation_rag.py(翻译平台场景,当前价值瓶颈)og_retriever.py混合检索的实际打分逻辑与corrections_routes.py的语义检索端点(消除本文档里标注"未验证"的部分)miss_log记录机制,为后续检索质量优化提供真实数据而非推测详见独立文档 AI 搜索部署手册 V3.1(已作为附件提供),包含:
.env 不同。运行时生成文件(metadata.db、*.pkl、*.bin、*.npy)不需要跨租户同步,各租户独立重建。
面向文档工程师、技术主管、研发经理、项目经理 — 遮蔽技术底座,强调业务价值
本部分所有技术实现细节(模型名称、框架版本、端口号、文件路径、API密钥等)均已遮蔽或泛化,确保竞争对手无法通过此文档反推技术底座。业务决策者只需理解"能力"和"价值",无需关心"怎么实现"。
面向文档工程师、技术主管、研发经理、项目经理 — 遮蔽技术底座,强调业务价值
本部分所有技术实现细节(模型名称、框架版本、端口号、文件路径、API密钥等)均已遮蔽或泛化,确保竞争对手无法通过此文档反推技术底座。业务决策者只需理解"能力"和"价值",无需关心"怎么实现"。