RAYCONTENTECH · 内容技术中心

OG-RAG AI 知识检索服务
EXE 部署与操作用户手册

系统版本 handleData v5.13 · handleOriginData v2.6 交付形态 Windows EXE(免 Python 环境) 文档版本 2026-08-25 适用场景 DITA / Word / PDF / Markdown / HTML 文档库的 AI 语义检索与问答
本手册与 Python 源码版手册的差异
本手册面向 EXE 交付部署:所有 Python 脚本均已打包为独立可执行文件,目标机器无需安装 Python 与任何依赖。原手册中的 python handleData_v5.13.py、python handleOriginData.py 等命令,在本版中分别对应 OG-RAG-Service.exe 与 OG-RAG-Pipeline.exe 子命令,配置规则(.env、缓存、DB 配套原则)完全沿用。

01系统架构总览

EXE 交付版由 三个可执行文件 构成完整链路,外加一个嵌入模型目录与一套数据文件:

Oxygen AI Positron
编辑器 AI 插件(客户端)
OG-RAG-Access-Proxy.exe
接入代理 · OG-RAG 注入 · 工具拦截
转发 Moonshot(Kimi)API
OG-RAG-Service.exe
RAG 核心服务(:5200)
FAISS · BM25 · 超图 · 视觉
OG-RAG-Pipeline.exe
流水线工具(命令行)
extract / reindex / hypergraph
数据文件
metadata.db · faiss_index.bin
og_hypergraph.pkl · 缓存文件
OG-RAG-Service.exe
启动时加载索引与超图
嵌入模型 model_distiluse/distiluse-base-multilingual-cased-v2 为外置目录,随包发布;Pipeline 的索引重建结果由 Service 在重启后加载。

三个 EXE 的分工

可执行文件对应源码端口职责
OG-RAG-Service.exe handleData_v5.13.py 5200 RAG 核心:语义检索(FAISS)、关键词检索(BM25)、OG-RAG 超图、视觉理解(GLM-4.6v)、管理后台 /admin
OG-RAG-Access-Proxy.exe kimi3proxy.py 5001 Oxygen AI Positron 接入层:自动注入 OG-RAG 检索片段、拦截检索类工具调用、转发 Moonshot API
OG-RAG-Pipeline.exe handleOriginData.py 等 —(命令行) 数据入库(extract)、向量索引重建(reindex)、超图重建(hypergraph);同时被管理控制台的流水线按钮调用

核心设计原则(与源码版一致,仍然适用)

原则说明
TOP_DIR 与 DB_PATH 必须配套TOP_DIR 决定扫描哪些文件;DB_PATH 决定存储与检索的数据库。二者必须对应同一业务域,否则检索命中错误数据
FAISS 缓存与 DB 行数绑定缓存合法性由 DB 行数校验。DB 更换后必须删除旧缓存,强制重建索引
一个场景一套 DB每个独立文档集合(Demo、生产、客户项目)应使用独立 DB_PATH
.env 与 EXE 同目录EXE 从自身所在目录读取 .env 与数据文件(相对路径),整目录可整体拷贝部署

02交付物与目录结构 EXE

交付包解压后即为完整运行环境,无需安装 Python、无需 pip install。目录结构(扁平布局,数据文件与 EXE 同级):

OG-RAG-Release/                    ← 交付根目录(可整体拷贝到任意位置)
├─ OG-RAG-Service.exe              ← RAG 核心服务(:5200)
├─ OG-RAG-Access-Proxy.exe         ← Oxygen 接入代理(:5001)
├─ OG-RAG-Pipeline.exe             ← 流水线工具(命令行)
├─ START-Service.bat               ← 一键启动服务
├─ START-Proxy.bat                 ← 一键启动代理
├─ .env                            ← 配置文件(首次使用前必须填写密钥)
├─ admin.html                      ← 管理控制台页面(浏览器打开)
├─ model_distiluse/
│   └─ distiluse-base-multilingual-cased-v2/   ← 嵌入模型(注意嵌套层级)
├─ metadata.db                     ← 文档元数据库(随交付内容而定)
├─ faiss_index.bin                 ← FAISS 向量索引
├─ og_hypergraph.pkl               ← OG-RAG 超图
└─ doc_ids.npy / doc_texts.npy / df_meta.pkl / bm25_cache.pkl / combined_text_version.txt
密钥需首次填写
交付包中的 .env 已脱敏:MOONSHOT_API_KEY、OPENAI_API_KEY 等密钥字段为空并带有 TODO 注释。首次启动前必须填入有效密钥,否则代理无法调用大模型。
磁盘空间要求
构建与运行均需预留空间:构建机约 8 GB 可用空间(虚拟环境 + PyInstaller 缓存 + 三个 EXE);部署机约 1.5 GB(三个 EXE + 模型目录 + 数据文件)。构建缓存默认重定向到构建目录下的 .build_cache,不占用 C 盘。

03快速开始

解压交付包
将 OG-RAG-Release 目录整体拷贝到目标位置(如 F:\OG-RAG-Release)。路径中避免中文与空格之外的特殊字符。
填写 .env 密钥
编辑 .env,填入 MOONSHOT_API_KEY(代理调用 Kimi 必填)与 OPENAI_API_KEY(服务调用本地 LLM 必填),确认 DB_PATH、TOP_DIR 指向本机实际路径。
启动 RAG 服务
双击 START-Service.bat。首次启动若缓存与 DB 行数不匹配会自动重建索引(数万文档约需数分钟),窗口保持开启。
启动接入代理
双击 START-Proxy.bat。Oxygen AI Positron 的请求经由它注入知识库内容后转发大模型。
验证链路
浏览器访问 http://127.0.0.1:5200/health(服务)与 http://127.0.0.1:5001/health(代理),按第 06 章验收标准核对。

04配置文件 .env 详解

.env 位于 EXE 同级目录,Service 与 Proxy 两个 EXE 共用同一份文件。修改后需重启对应 EXE 生效。

4.1 核心必填项

# ─── LLM 接入(Service 使用)───────────────────────────────────────────
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_API_BASE=http://localhost:5003/v1    # 本地 LLM 代理地址(DeepSeek / Kimi 等)
DEFAULT_MODEL=deepseek-v4-flash           # 使用的模型名称

# ─── 文档数据库(最重要,见下方警告)────────────────────────────────────
DB_PATH=metadata.db                        # SQLite 数据库(相对 EXE 目录,或绝对路径)
TOP_DIR=F:/your-project/docs             # 文档根目录(Pipeline 扫描此目录)
关键规则:DB_PATH 与 TOP_DIR 必须对应同一个文档集合
若 TOP_DIR 指向 AUTODEMO,DB_PATH 就必须是 AUTODEMO 专属的数据库。绝对不能用 TOP_DIR=AUTODEMO + DB_PATH=生产库,否则检索将命中完全无关的历史数据。

4.2 接入代理项(Oxygen 集成必需)EXE

# ─── Moonshot / Kimi 上游(Proxy 使用)─────────────────────────────────
MOONSHOT_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   # 必填,无默认值

# ─── OG-RAG 注入开关(Proxy 使用)──────────────────────────────────────
OGRAG_ENABLED=true          # 启用 OG-RAG 检索
OGRAG_INJECT=true           # 自动向每次对话注入检索片段(默认 false,必须显式开启!)
OGRAG_ENDPOINT=http://127.0.0.1:5200   # 指向 Service
OGRAG_DB_PATH=metadata.db   # DB 直查路径(与 DB_PATH 一致)
PROXY_HOST=0.0.0.0          # 代理监听地址;仅本机使用可改 127.0.0.1
OGRAG_INJECT 默认是 false
这是 Oxygen 集成中最常见的"看起来没生效"根因。交付包的 .env 已写为 true;若自行重建配置,务必显式设置。验证方法见第 06 章 /health 验收。

4.3 服务与门户配置

FLASK_SECRET_KEY=your-secret-key-here
FLASK_PUBLIC_URL=https://www.raycontentech.com   # 服务公网地址,用于生成图片/文件 URL
PORTAL_DOC_BASE=https://www.raycontentech.com/leiPage/#/dashboard/workplace
PORTAL_PRO_ID=                                    # 门户项目 ID(可选)
OUTPUT_DIR=F:/outputDir                          # WebHelp 输出目录(可选)

4.4 视觉理解(图片问答)

VISION_API_KEY=your-glm-api-key
VISION_API_BASE=http://127.0.0.1:8000/v1         # 视觉模型代理地址
VISION_MODEL=glm-4.6v
VISION_MAX_TOKENS=1400
VISION_TIMEOUT=99

不配置 VISION_API_KEY 时,图片问答功能自动禁用,其他功能不受影响。

4.5 检索调优参数

MAX_CONTEXTS=15                        # 注入 LLM 的最大文档片段数
MAX_CONTEXT_CHARS=8899                 # 单文档上下文最大字符数
MAX_STEPS_CHARS=2900                   # steps 字段截断长度
EXPAND_CONFIDENCE_THRESHOLD=0.55       # 低于此置信度时触发查询扩展
OG_TOP_K=8                             # OG-RAG 超图检索 top-k
MODEL_LOCAL_PATH=model_distiluse/distiluse-base-multilingual-cased-v2
MODEL_LOCAL_PATH 必须指到内层模型目录
模型目录是两层嵌套结构:外层 model_distiluse/ 只是容器,真正的模型文件(含 config.json)在内层 distiluse-base-multilingual-cased-v2/。MODEL_LOCAL_PATH 必须指到含 config.json 的那一层,否则启动日志会出现模型加载失败。相对路径相对于 EXE 所在目录解析。

05数据入库与索引维护 EXE

源码版的三个脚本(handleOriginData.py、update_index.py、build_hypergraph.py)在 EXE 版中合并为 OG-RAG-Pipeline.exe 的三个子命令。在交付目录下打开命令行执行:

子命令对应源码脚本作用何时使用
OG-RAG-Pipeline.exe extract handleOriginData.py 扫描 TOP_DIR,解析文档,写入 DB_PATH 新增/修改文档后;首次部署建库
OG-RAG-Pipeline.exe reindex update_index.py 依据 DB 重建 FAISS / BM25 索引缓存 删除旧缓存后强制重建;索引损坏时
OG-RAG-Pipeline.exe hypergraph build_hypergraph.py 重建 OG-RAG 超图(og_hypergraph.pkl) 文档结构关系变化后

5.1 支持的文档格式

格式扩展名解析说明doc_type
DITA Topic.dita, .xml提取 title / shortdesc / conbody / steps / 图片topic
DITA FAQ.dita(含 faq section)按 section 拆分问答对faq
DITA 参数表.dita(含 <dl> 参数列表)每个 <dlentry> 独立成行parameter
Word.docx按标题层级分块,提取表格和图片word
PDF.pdf按页/章节分块pdf
Markdown.md按 ## 标题分块markdown
HTML.html, .htm提取 title / meta / 正文段落html

5.2 标准入库流程

# 第 1 步:入库(扫描 TOP_DIR → 写入 DB)
OG-RAG-Pipeline.exe extract

# 第 2 步:重建索引(生成 FAISS / BM25 缓存)
OG-RAG-Pipeline.exe reindex

# 第 3 步:重建超图(可选,OG-RAG 关系增强)
OG-RAG-Pipeline.exe hypergraph

# 第 4 步:重启 Service 使新索引生效

5.3 正常入库输出示例

============================================================
handleOriginData v2.6 (HTML enhanced)
  DB=metadata.db  TOP_DIR=F:/git/AI/AUTODEMO
============================================================
  [DITA] 1.5.2 定期维护保养.dita → 1 topic + 28 parameter rows
  [MD]   WHY.md → 3 chunks
============================================================
处理完成:  总文件数 2   DB总记录 31  (FAQ=0 Parameter=28 MD=3)
============================================================

5.4 管理控制台联动 EXE

浏览器打开交付目录中的 admin.html 管理控制台,其中的流水线按钮(数据提取 / 重建索引 / 重建超图 / 全流水线)正是调用 OG-RAG-Pipeline.exe 的对应子命令。因此:

  • OG-RAG-Pipeline.exe 必须与 OG-RAG-Service.exe 放在同一目录,否则控制台按钮无效;
  • 流水线执行期间避免同时手工运行同名子命令;
  • 控制台的"清除缓存"按钮调用 Service 的 /admin/clear_cache,只清查询缓存,不删索引。

5.5 入库字段说明

字段来源说明
titleDITA <title> / Word 标题 / MD #文档标题,检索权重最高
parent_titleditamap <title>所属书籍/手册名称,影响 Oxygen 链接生成
shortdescDITA <shortdesc> / 正文前150字摘要,显示在检索结果卡片
contextconbody / 正文内容主体内容,注入 LLM
stepsDITA <step> / 参数描述操作步骤或参数说明
keywords<keyword> / 自动提取关键词,影响 BM25 检索权重
doc_type自动判断topic / faq / parameter / word / markdown / pdf / html
images<image href> / Word media图片路径列表,服务通过 /img/ 端点提供

06服务启动与验证

6.1 启动顺序

先启 Service
双击 START-Service.bat,等待索引加载完成(日志出现 Running on http://0.0.0.0:5200)。
再启 Proxy
双击 START-Proxy.bat(代理启动时会向 Service 发起检索,需 Service 已就绪)。
按需使用 Pipeline
OG-RAG-Pipeline.exe 为命令行工具,只在入库/重建时运行,无需常驻。

6.2 Service 正常启动日志

======================================================================
OG-RAG Portal-Ready Service v5.13 (+parameter Oxygen link fix)
======================================================================
  DB=metadata.db  Model=deepseek-v4-flash
  MAX_CONTEXTS=15  EXPAND_CONFIDENCE_THRESHOLD=0.55
  Vision: ENABLED (glm-4.6v)
======================================================================
Loading embedding model ...
  OK: MODEL_LOCAL_PATH              ← 模型路径正确才会有这行
OK jieba pre-warmed
  Cache valid: 23213 docs (Word/MD=57, Parameter=13490)
OK Indexes loaded (23213 docs)
[HypergraphBuilder] Loaded from og_hypergraph.pkl: 52082 nodes, 104250 edges
OK OG-RAG: 52082 nodes, 104250 edges
 * Running on http://0.0.0.0:5200

6.3 验收:Service /health(:5200)

GET http://127.0.0.1:5200/health
字段验收标准
statusrunning
documents与 Pipeline extract 输出的"DB总记录"一致,且 > 0
faiss / bm25均为 true
vision_enabled配置 VISION_API_KEY 后为 true

6.4 验收:Proxy /health(:5001)EXE

GET http://127.0.0.1:5001/health
{
  "status": "healthy",
  "version": "1.7-kimi-ograg",       ← 必须是 1.7,低于此版本说明端口被旧进程占用
  "ograg": {
    "enabled": true,
    "inject": true,                  ← 必须为 true,否则 Oxygen 拿不到 RAG 内容
    "endpoint": "http://127.0.0.1:5200",
    "db_exists": true
  }
}
端口占用陷阱(Windows 特有)
Windows 允许多个进程重复绑定同一端口。若机器上残留旧版 python 代理,netstat -ano | findstr :5001 会显示两个 LISTENING,新连接会被旧进程抢走——表现为 EXE 已启动但行为毫无变化。处置:按 PID 结束旧进程(Stop-Process -Id <PID> -Force),确认只剩一个监听者后再验证 /health 的 version 与 inject。

6.5 索引缓存管理

以下缓存文件位于 EXE 同级目录,更换 DB_PATH 后必须全部删除(或在管理控制台执行重建):

文件说明
faiss_index.binFAISS 向量索引
doc_ids.npy文档 rowid 列表
doc_texts.npy文档文本列表
df_meta.pkl元数据 DataFrame
bm25_cache.pklBM25 分词索引
combined_text_version.txtSchema 版本标记
:: 删除缓存(Windows,在交付目录下执行)
del faiss_index.bin doc_ids.npy doc_texts.npy df_meta.pkl bm25_cache.pkl combined_text_version.txt

6.6 注册为 Windows 服务(可选,生产推荐)

双击启动适合测试与演示;生产环境建议使用 NSSM 将两个 EXE 注册为 Windows 服务,实现开机自启与崩溃自愈:

nssm install OGRAG-Service "F:\OG-RAG-Release\OG-RAG-Service.exe"
nssm install OGRAG-Proxy   "F:\OG-RAG-Release\OG-RAG-Access-Proxy.exe"
nssm set OGRAG-Proxy DependOnService OGRAG-Service

07Oxygen AI 集成 EXE

Oxygen XML Editor 的 AI Positron 插件通过 :5001 接入代理使用本系统。代理对每次对话做两件事:

  1. 自动注入(OGRAG_INJECT=true):用用户问题检索 OG-RAG,把最相关的知识库片段作为系统消息注入上下文,模型回答时优先参考并注明来源;
  2. 工具拦截(OGRAG_INTERCEPT_TOOLS=true):模型调用 search_in_project、get_related_resources_overview_from_project 等 4 个检索类工具时,由代理直接在企业知识库执行并回传结果,无需客户端参与。

7.1 AI Positron 配置

在 Oxygen 的 Preferences → AI Positron 中,将 OpenAI 兼容端点指向代理:

配置项值
Base URLhttp://<服务器IP>:5001/v1(本机则为 http://127.0.0.1:5001/v1)
API Key任意非空字符串(鉴权由代理向上游完成)
Model默认即可(代理解析为上游模型)

7.2 客户端工具注意事项 重要

AI Positron 自带的 Run command line(命令行执行)等客户端工具不在代理可拦截的检索工具集合内。模型一旦选择它,就会改用 shell 命令检索本地项目文件,完全绕开 OG-RAG。代理日志会记录:

工具 ['run_command_line'] 含非检索类调用,透传给客户端执行

规避方法(二选一或并用):

  • 在 AI Positron 设置中禁用 Run command line 类工具;
  • 添加自定义指令:"检索项目内容时,只使用 search_in_project 等检索工具,禁止运行命令行。"
注入路径不依赖工具选择
只要 OGRAG_INJECT=true,知识库片段在每次对话前就已进入模型上下文——即使模型之后又自行调用工具,回答仍以注入内容为基础。工具拦截是锦上添花,自动注入是底线保障。

7.3 端到端验证

直接验证检索层
向 :5200/search 发送关键词(如"定期维护保养"),应返回 og_rag=true 且命中真实文档。
验证注入
在 Oxygen 提问后查看代理窗口日志,应出现 已注入 N 条 OG-RAG 检索片段 (xxxx 字符)。
验证工具拦截
日志出现 工具调用迭代 N(代理侧执行: [...]) 表示检索工具被代理正确拦截执行。
确认答案质量
模型最终回答应引用知识库文档并注明来源路径。
关于"找到了一些相关内容。让我查看…"这类半截回答
这是模型请求客户端工具(如 get_content_for_document_url,只有 Oxygen 能读本地文件)时的过渡语。真实 Oxygen 环境中编辑器会自动执行该工具并续完对话,属正常现象;只有在非 Oxygen 的测试脚本中才会看起来"没答完"。

08API 接口说明

8.1 Service 接口(:5200)

接口说明
POST /chatAI 问答主接口(支持 image_base64 图片问答)
POST /search纯检索接口(返回结构化命中列表)
GET /health服务状态与文档统计
GET /debug_indexFAISS / BM25 / OG-RAG 加载状态
GET /debug_score?q=关键词&rowid=123查看指定文档的检索得分与排名
GET /debug_param?kw=webhelp按关键词查找 parameter 类型文档
POST /debug_vision测试视觉理解模块
GET /debug_images?title=文档标题调试文档图片路径解析
POST /clear_cache清除查询缓存(不删除索引)
GET /cache_stats缓存状态统计
/admin/*管理后台:状态、入库、重建索引、全流水线、清除缓存(配合 OG-RAG-Pipeline.exe)

POST /chat 请求示例

{
  "query": "定期维护保养的时间间隔是多少?",
  "token": "user-session-001",
  "no_history": true
}
响应字段说明
answerHTML 格式的完整回答(含来源列表)
token会话 token
sources命中文档列表(title / url / doc_type)
og_ragOG-RAG 超图检索是否启用

8.2 Proxy 接口(:5001)EXE

接口说明
POST /v1/chat/completionsOpenAI 兼容对话端点(Oxygen AI Positron 接入点),自动注入 OG-RAG 内容并拦截检索工具
GET /health代理状态,含 ograg 段(enabled / inject / endpoint / db_exists)——集成排障第一入口
GET /usage当日用量统计
GET /tools已加载的 Oxygen 工具清单

注意:RAG 核心 Service 本身不提供 /v1/chat/completions;OpenAI 兼容端点只存在于 Proxy。对接第三方应用时一律接 :5001。

09多环境部署(Demo vs 生产隔离)

9.1 为什么需要隔离

生产库(如 ABB、XHSC 项目)包含数万条文档记录。若 Demo 演示指向同一库,检索将返回无关的生产数据,演示效果失真,客户数据也存在泄露风险。

9.2 隔离原则(EXE 版)

每个独立文档集合 = 一份独立的交付目录(EXE + .env + DB + 缓存)

EXE 从自身所在目录读取 .env 与数据文件,因此多环境隔离在 EXE 版中极为简单:整目录复制一份,改 .env 即可,各环境互不干扰。

9.3 推荐目录结构

F:/rag-environments/
├─ autodemo/                  ← Demo 环境(完整交付目录副本)
│   ├─ OG-RAG-Service.exe / OG-RAG-Access-Proxy.exe / OG-RAG-Pipeline.exe
│   ├─ .env                   ← DB_PATH=autodemo.db, TOP_DIR=./docs
│   ├─ autodemo.db
│   ├─ docs/                  ← TOP_DIR
│   └─ model_distiluse/ ...
├─ abb-production/            ← ABB 生产环境(另一份完整副本)
│   ├─ ... .env → DB_PATH=abb_metadata.db ...
└─ xhsc-localization/         ← XHSC 本地化环境
多环境同时运行的端口约定
同一台机器同时跑多套环境时,需为每套的 Service / Proxy 分配不同端口(改 .env 与启动参数),并同步修改 Proxy 的 OGRAG_ENDPOINT 指向本套 Service 端口。模型目录可在多套间通过绝对路径共享,节省磁盘。

9.4 切换环境步骤

停止当前环境的 Service 与 Proxy
启动目标环境目录下的 EXE
每个环境用自己目录的 .env,无需改任何配置。
验证 /health
确认 documents 数量与目标库一致。

10常见故障排查

故障 1:Oxygen 拿不到 RAG 内容(代理 /health 显示 inject=false)EXE

症状:Oxygen 提问正常返回,但回答不引用企业知识库;代理日志从无 已注入 N 条。

根本原因(按概率排序):

  1. :5001 被旧进程占用——机器上残留旧版 python 代理,Windows 允许重复绑定,新连接被旧进程抢走。判定:netstat -ano | findstr :5001 出现两个 LISTENING;/health 的 version 低于 1.7-kimi-ograg。处置:按 PID 结束旧进程,重启 EXE 代理。
  2. .env 中 OGRAG_INJECT 未显式设为 true(该开关默认为 false)。
  3. MOONSHOT_API_KEY 为空——代理无法调用上游,但此情形会报 401/鉴权错误而非静默。

故障 2:模型在 Oxygen 里用"Run command line"乱搜本地文件EXE

症状:代理日志出现 工具 ['run_command_line'] 含非检索类调用,透传给客户端执行。

原因:AI Positron 自带的命令行工具不在代理可拦截的检索工具集合内,模型选择它即绕开 OG-RAG。

修复:在 AI Positron 设置中禁用 Run command line,或加自定义指令强制使用检索工具(见第 07 章)。

故障 3:Moonshot 429 错误EXE

错误信息含义处置
insufficient balance / 余额不足账户欠费充值或更换 API Key
engine overloaded / 引擎过载上游临时过载稍后重试即可,无需改配置

故障 4:服务启动日志显示模型加载失败EXE

原因:MODEL_LOCAL_PATH 指向了外层 model_distiluse/ 目录,而真正的模型(含 config.json)在内层 distiluse-base-multilingual-cased-v2/ 子目录。

修复:将 MODEL_LOCAL_PATH 改为指到含 config.json 的那一层(见 4.5 节),重启 Service。

故障 5:管理控制台流水线按钮无响应EXE

原因:打包版中流水线按钮通过调用 OG-RAG-Pipeline.exe 实现。若该文件缺失、被杀软隔离,或与 Service 不在同一目录,按钮即失效。

修复:确认三个 EXE 同目录;检查杀软隔离区;或在命令行手工执行对应子命令(第 05 章)验证工具本身可用。

故障 6:AI 回答内容来自无关的旧项目数据

根本原因:DB_PATH 指向旧生产库,而非当前 TOP_DIR 对应的数据库。

修复:修正 .env 使二者配套 → 删除全部缓存 → OG-RAG-Pipeline.exe extract + reindex → 重启 Service。

故障 7:新增/修改的文档未被检索到

确认文档已入库
重新运行 OG-RAG-Pipeline.exe extract,观察日志中新文档是否出现。
重建索引
运行 OG-RAG-Pipeline.exe reindex(行数变化后旧缓存自动失效,手工重建更保险)。
重启 Service 并验证
用 /debug_score?q=新文档关键词 确认可被检索到。

故障 8:服务启动后 documents=0

原因:DB_PATH 指向的数据库文件不存在或为空。修复:确认 .env 中 DB_PATH 相对 EXE 目录解析后的实际位置,先运行 OG-RAG-Pipeline.exe extract 建库。

故障 9:每次启动都重建索引(Cache stale)

原因:combined_text_version.txt 中的 schema 版本与程序内置版本不一致(版本升级后正常现象)。这是自动重建机制,无需干预,重建完成后下次启动即可直接加载。

故障 10:视觉理解模块不可用

排查:确认 .env 已配置 VISION_API_KEY;用 POST /debug_vision 测试连通性;确认视觉代理(:8000)已启动。

故障 11:EXE 无法启动 / 提示 DLL 加载失败EXE

原因:交付包不完整(常见于传输中断或磁盘写满导致的文件损坏)。

修复:重新拷贝完整交付包;确认部署目录所在磁盘剩余空间 ≥ 1.5 GB;确认未在杀毒软件拦截日志中发现 EXE 被隔离。

11已知问题归档

BUG-001:DB_PATH 与 TOP_DIR 不匹配导致检索污染

项目内容
影响版本v5.0 ~ v5.13(配置问题,非代码 bug)
现象AI 回答引用与当前 TOP_DIR 完全无关的文档
根本原因TOP_DIR 仅控制文件扫描范围,不过滤检索范围;检索始终面向 DB_PATH 全库
解决方案为每个独立文档集合配置独立的 DB_PATH,参见第 09 章
状态设计行为,通过规范配置规避

BUG-002:parameter 行 Oxygen 官方链接持续失效

项目内容
影响版本v5.0 ~ v5.12
现象doc_type=parameter 的文档来源链接不是 oxygenxml.com
根本原因_PATH_TO_BOOK_TITLE 字典以原始路径为 key,查询时路径大小写/斜杠方向不一致导致查找失败
修复版本v5.13 — 新增 _normalize_path(),统一转为 posix 小写,存储与查询时均规范化
状态已修复

BUG-004:context_tok 集合导致 RAM 暴涨

项目内容
影响版本v5.9 ~ v5.10
现象启动后内存持续增长,大型 DB 下服务 OOM
根本原因_FAST_META 缓存中 context_tok 为 set 类型,大量文档时内存占用极高
修复版本v5.11 — 改用 context_preview 字符串,按需分词
状态已修复

EXE 版已内置修复的打包问题 EXE

问题说明
打包后流水线按钮失效frozen 模式下 sys.executable 指向 EXE 自身,无法再 python 方式调起脚本。交付版管理后台已改为调用 OG-RAG-Pipeline.exe 子命令,按钮功能完整
打包后数据文件找不到采用扁平布局 + 工作目录相对加载,START bat 会自动切换到 EXE 所在目录,双击任意位置启动均正常
模型目录嵌套加载失败构建工具自动检测 config.json 所在层级并写入正确的 MODEL_LOCAL_PATH

12运维检查清单

12.1 日常启动检查

  • .env 中 DB_PATH 与 TOP_DIR 指向同一业务域
  • DB 文件存在且非空(extract 日志中的"DB总记录" > 0)
  • MODEL_LOCAL_PATH 指向含 config.json 的内层模型目录
  • MOONSHOT_API_KEY / OPENAI_API_KEY 已填写且有效
  • :5001 与 :5200 各只有一个 LISTENING(netstat 验证,无旧进程残留)
  • Service /health 中 documents > 0 且 status=running
  • Proxy /health 中 version=1.7-kimi-ograg 且 ograg.inject=true

12.2 文档更新后操作流程

  • 将新文档复制到 TOP_DIR
  • 运行 OG-RAG-Pipeline.exe extract(或管理控制台"数据提取"按钮)
  • 确认入库日志中新文档出现
  • 运行 OG-RAG-Pipeline.exe reindex 重建索引
  • 重启 Service,访问 /health 确认 documents 数量已更新
  • 用 /debug_score?q=新文档关键词 确认可被检索到

12.3 切换 DB(环境切换)后操作流程

  • 修改目标环境目录 .env 中的 DB_PATH 和 TOP_DIR
  • 删除全部 6 个缓存文件(见 6.5 节)
  • 运行 OG-RAG-Pipeline.exe extract(如目标 DB 为新建)
  • 重启 Service 与 Proxy
  • 访问 /health 确认 documents 数量符合预期

13附录:字段与检索参考

13.1 doc_type 检索权重倍数

doc_type权重倍数适用场景
faq1.4×问答型内容,精确匹配用户问题
parameter1.35×参数说明,适合"有哪些参数"类查询
word / markdown / pdf / html1.25×非 DITA 格式,知识型内容
topic1.0×标准 DITA topic,基准权重

13.2 检索得分组成

总得分 = FAISS 语义得分 (×0.35)
       + BM25 关键词得分 (×0.25)
       + 字段精确匹配加分(title / parent_title / prodinfo / keywords / context)
       × doc_type 权重倍数

13.3 查询扩展触发条件

以下情况不触发查询扩展(即使置信度低于阈值):

  • 查询长度 ≤ 4 字且不含空格
  • 查询包含 : 或 =(参数名查询)
  • 查询与已知文档标题完全匹配

13.4 Oxygen 官方链接生成规则

parent_title 关键词生成路径
content fusionug-content-fusion
web author custom / webappug-waCustom
xml editor / user guideug-editor

生成链接格式:https://www.oxygenxml.com/doc/{guide}/topics/{slug}.html