← Back to home@XiXizi-Kiara

dsh-godot-docs-rag

为DSH对话提供 Godot 官方文档检索、API 符号直达与整页读取工具

Stars
0
Language
Python
Created
Oct 22, 2026
Updated
Oct 22, 2026

Introduction

Godot 官方文档 RAG

把 Godot 4.x 官方文档变成一个完全本地、可检索、可引用、能被 AI 助手直接调用的知识库。

  • 覆盖 classes API 参考 + tutorials + getting_started + engine_details + about + community(1596 篇文档、26076 个检索块);
  • 中文提问也能命中英文文档,回答带官方原文与可点击链接;
  • 全程离线、不上传文档;有 GPU 用 GPU,没有也能跑 CPU。

能帮你做什么

场景示例
查 API 行为"queue_free 和 free 有什么区别?"
定位具体方法"move_and_slide 的参数和返回值是什么?"
排查问题"CharacterBody2D 用了 move_and_slide 为什么还是不动?"
学教程"怎么做 2D 角色移动 / 信号连接 / 场景切换?"
要出处每条结果都带文档标题、小节路径和官网链接

支持 5 种用法,按你的习惯选一种即可:

用法适合谁
DSH 插件(推荐)在 DSH 里对话,AI 自动查文档
Web UI想在浏览器里像搜索引擎一样查
命令行写脚本、快速查一条
Python 库在自己的程序里调用
MCPClaude Desktop 等支持 MCP 的客户端

5 分钟上手

$PY 指 conda 环境 godotrag 的 python:$PY = "$HOME\.conda\envs\godotrag\python.exe";<PROJECT_DIR> 指本仓库根目录。 环境依赖已配置好,首次使用只需下面 3 步。

1. 下载模型(只做一次)

cd <PROJECT_DIR>
& $PY scripts\fetch_models.py            # 检索模型(必需,约 130 MB)
& $PY scripts\fetch_models.py --rerank   # 精排模型(可选,1.1 GB,质量更高但更慢)

2. 构建索引(只做一次;官方文档更新后重做)

& $PY scripts\run.py build               # GPU 约 100 秒 / CPU 约 5 分钟
& $PY scripts\run.py build --limit 200   # 想先试跑可以用这个

3. 开始使用

选一种即可,最省事的是 DSH 插件(见下节);想立刻在浏览器里搜:

& $PY scripts\run.py serve --port 8765
# 打开 http://127.0.0.1:8765/

用法 A:在 DSH 里直接问(推荐)

安装只需一次,根据你用的 DSH 版本选一种:

桌面版 DSH:打开 DSH 的插件页(桌面版在 Settings → Plugins),搜索「Godot 文档 RAG」并安装。 搜不到时,在安装入口直接粘贴包名:@xixizi-kiara/dsh-godot-docs-rag。

命令行版 DSH:

dsh plugin --profile <profile> add @xixizi-kiara/dsh-godot-docs-rag

安装后第一次使用,如果提示找不到项目目录,按提示填入你的 GodotRag 文件夹(或设置环境变量 GODOT_RAG_PROJECT)——插件需要从这里读取索引。

之后正常对话即可,AI 会在需要时自动调用 4 个工具:

工具作用
godot_search_docs按自然语言/关键词找文档,返回标题、doc_id、官网链接、片段
godot_find_symbol按精确 API 名查(如 Node.add_child、move_and_slide)
godot_get_doc读整页原文,可分段续读
godot_rag_stats查看索引是否就绪、用的 GPU 还是 CPU

你可以直接这样问:

"Godot 里 queue_free 之后节点什么时候真正释放?给我官方文档出处。"

提示:

  • 第一次调用要加载索引与模型(约 25–35 秒),之后每次查询 0.1–0.5 秒;
  • 不想等第一次:在插件配置里开启 prewarm(插件启动时后台预加载,详见安装文档);
  • 使用日志默认关闭;需要记录检索轨迹/反馈时,在插件管理列表打开"Godot 文档 RAG 使用日志"。

详细安装、配置与排错:docs/DSH_PLUGIN_SETUP.md 使用日志与分析:docs/USAGE_LOG.md

用法 B:浏览器里搜(Web UI)

& $PY scripts\run.py serve --port 8765                 # FastAPI 版(默认)
& $PY scripts\run.py serve --port 8765 --backend stdlib # 零依赖标准库版
# 打开 http://127.0.0.1:8765/

支持搜索框、检索模式切换(hybrid / dense / bm25 / hybrid+rerank)、结果卡片、来源链接、展开整页原文。

用法 C:命令行

& $PY scripts\run.py search "how to free a node" --k 5
& $PY scripts\run.py search "queue_free 和 free 有什么区别" --json
& $PY scripts\run.py ask "CharacterBody2D 为什么不动?" --json

ask 在没有配置大模型时返回检索式回答(只拼接官方原文,不编造);配置后改为生成式回答:

$env:GODOT_RAG_LLM_API_KEY = "sk-..."
# 可选:$env:GODOT_RAG_LLM_BASE_URL / $env:GODOT_RAG_LLM_MODEL

用法 D:在自己的 Python 程序里

from godot_rag import GodotRAG

rag = GodotRAG("data/index")          # 有 CUDA 自动用 GPU
for r in rag.search("how to add a child node", k=5):
    print(r["rank"], r["title"], r["symbol"], r["url"])

answer = rag.ask("queue_free 和 free 的区别", k=6)
print(answer["answer"], answer["citations"])

用法 E:其他 AI 客户端(MCP)

& $PY scripts\run.py mcp                                         # stdio(本地客户端)
& $PY scripts\run.py mcp --transport streamable-http --port 8766  # 常驻 HTTP

暴露 4 个工具(agent 侧名称形如 mcp__godot__search_docs):search_docs、ask_docs、get_doc、rag_stats。 DSH 的 MCP 接入步骤见 docs/DSH_MCP_SETUP.md。


怎么问效果更好

  • 已知 API 名(queue_free、move_and_slide)→ 直接问 API,插件会用精确符号查询;
  • 不确定页面/API → 描述需求("怎么让角色沿斜坡滑动"),用自然语言检索;
  • 要完整上下文 → 先搜到 doc_id,再让 AI 读整页(插件会自动这么做);
  • 中文提问可用,但英文术语命中率通常更高;
  • 要最高质量 → 用 hybrid+rerank 模式(GPU 下约 1.3 秒/次)。

常用配置

环境变量作用
GODOT_RAG_DEVICEauto(默认)/ cuda / cpu
GODOT_RAG_INDEX_DIR索引目录,默认 data/index
GODOT_RAG_LLM_API_KEY / _BASE_URL / _MODEL启用生成式回答(可选)
GODOT_RAG_DOCS_BASE_URL结果链接的文档站地址
GODOT_RAG_PYTHON / GODOT_RAG_PROJECTDSH 插件查找解释器/项目根(一般无需设置)

DSH 插件配置(解释器、索引目录、默认条数、预热等)见 docs/DSH_PLUGIN_SETUP.md。

效果如何

40 条人工评测题(英文 28 / 中文 12):

配置Recall@5PageHit@5平均延迟
hybrid(默认)0.8750.975532 ms
dense0.8500.90028 ms
bm250.7500.900125 ms
hybrid+rerank0.8000.9751.35 s(GPU)
  • 中文 12 条 hybrid Recall@5 = 0.917;英文 28 条 = 0.857;
  • 精排(rerank)能进一步提高"第一条就命中"的比例,适合离线或追求质量时使用;
  • 完整报告:data/reports/eval.md;复跑: & $PY scripts\run.py eval --configs hybrid,dense,bm25,hybrid+rerank --json

常见问题

现象处理
提示"索引尚未构建"先执行第 2 步:& $PY scripts\run.py build
首次查询很慢(几十秒)正常,正在加载索引与模型;DSH 插件可开 prewarm,后续查询毫秒级
中文问题结果不理想换英文术语或更具体的 API 名;也欢迎用使用日志记录 bad 查询
没有 GPU / 显存不够设置 GODOT_RAG_DEVICE=cpu,会自动走 CPU(更慢但可用)
端口被占用serve 或 mcp --port 换一个端口
DSH 里没有 godot_* 工具确认插件行已启用;重载插件或重启 DSH
DSH 插件报配置错误(CONFIG_INVALID)按错误信息里的片段在 profile 配置里填 pythonExe / projectDir
日志在哪、怎么关位置与清空方式见 docs/USAGE_LOG.md;不开启就不产生任何日志
官方文档更新了替换 godot-docs-html-stable/ 后重新执行第 2 步构建索引

更多环境与依赖问题:docs/ENV.md;完整使用手册:docs/USAGE.md。

已知限制

  • 图片/视频内容不进索引(只收录文本);
  • 无大模型 key 时只做"检索式回答",不会生成连贯长文;
  • 中文长尾表述依赖术语词典,覆盖不到时召回有限;
  • 精排模型约 1.1 GB,且 GPU 下单次约 1.3 秒,适合离线/高质量场景;
  • 本项目基于 stable 快照,文档更新后需要重建索引;
  • tiktoken 的 BPE 数据文件需要联网下载一次;缺失时自动回退字符估算(不影响功能),修复方法见 docs/ENV.md。

开发者与维护者

工作原理(一句话版)

RST 解析 → 按符号/小节分块 → BGE 向量(faiss)+ BM25 双路召回 → 加权 RRF 融合 → 可选 cross-encoder 精排 → CLI / Web / Python / MCP / DSH 插件共用同一套检索与生成层。

_sources/*.rst → parse_rst → documents → chunk → 26076 chunks
                                   ├─ embed.py  → faiss(BGE-small)
                                   └─ bm25.py   → rank_bm25
retrieve.py:dense top-100 + bm25 top-100 → RRF → [rerank] → top-k
入口:cli / service_fastapi / mcp_server / dsh_bridge(插件子进程)

目录

src/godot_rag/     核心:parse_rst / chunk / embed / bm25 / index / retrieve / generate /
                   service(标准库)/ service_fastapi / mcp_server / agent_api / dsh_bridge / cli / eval
dsh-plugin/        DSH bundle:4 个原生工具 + 默认关闭的使用日志行 + 可移植性测试
scripts/           run.py(统一入口)、fetch_models.py、run_tests.py、validate_qa.py、
                   analyze_usage.py、probe_bridge.mjs
data/processed/    documents.jsonl、chunks.jsonl、qa.jsonl
data/index/        索引产物(meta.json / chunks.pkl / faiss.index / bm25.pkl / docs.pkl)
data/reports/      评测报告
docs/              ENV / INTERFACES / USAGE / DSH_PLUGIN_SETUP / USAGE_LOG / DSH_MCP_SETUP
tests/             Python unittest(147 个)

测试

& $PY scripts\run_tests.py -v        # 147 tests,不依赖 GPU / 全量索引 / 网络
for file in dsh-plugin/test/*.test.js; do node "$file"; done   # 插件 25 个测试

约定

  • 仓库内禁止出现机器相关绝对路径(tests/test_portability.py 会拦截);
  • 接口与数据结构以 docs/INTERFACES.md 为准。

许可证

本项目代码采用 MIT License,见 LICENSE。 DSH 插件 dsh-plugin/ 同样为 MIT(与 npm 已发布版本一致),见 dsh-plugin/LICENSE。

仓库不包含 Godot 官方文档内容本身(godot-docs-html-stable/ 已在 .gitignore 中);如需再分发官方文档,请遵守 Godot 文档自身的许可与署名要求。