2026-07-28 Source Flow Debugger 实际源码搜索报告
目的
在已有记录中,仅写到实际的 Godot 项目被划分为 134 个块进行搜索,且相关文档出现在上位结果中。仅凭这一描述,无法得知每个块返回了什么,返回的 JSONL 是否真的存在于 SQLite 中,或者更直接的文档是否因为排名被压制而未被检出。
本报告将以下三个问题分开记录。
- Source Flow Debugger 在每个块中返回了哪些 JSONL 候选?
- 返回的候选是否与已提交到 SQLite 的经过验证的原始 JSONL 完全相同?
- 在 SQLite 中确认的直接依据是否已经排在上位,还是需要提升排名?
由于 Qwen 接口已中止,本次仅执行了搜索与 SQLite 对照。未记录 Qwen 的 Godot 版本分类及候选批准·拒绝结果,也不把出现搜索候选视为最终验证成功。
固定输入
- 仓库:
godotengine/godot-demo-projects - 许可证:MIT
- 提交:
cae8dc567a56d3e7936f171bcb85f0ccb9634ad0 - 项目:
2d/hexagonal_map - 输入文件:
project.godot,map.tscn,tileset.tres,tileset_edit.tscn,troll.gd,troll.tscn - 输入文件数:6
- 生成块数:134
- AST 块:3
- 直接块:131
使用的 SQLite 为
outputs/godot-rag-sqlite/godot-rag.sqlite3,运行时包含
docs_chunks 2,265 条、api_mapping 1,133 条、
label_prototypes 2 条以及 embedding 3,399 条。
运行状态
| 步骤 | 状态 | 本次运行的意义 |
|---|---|---|
| SQLite FTS5 + Okapi BM25 | 执行 | 搜索了全部 134 个块 |
| embedding | 未执行 | 未设置查询 embedding API 密钥 |
| reranker | 未执行 | 未设置 provider API 密钥 |
| Qwen validator | 未执行 | Qwen 接口已中止 |
因此下面的排名并非整体 F 策略的最终排名,而是 lexical/BM25 阶段的结果。
整体对照结果
| 项目 | 结果 |
|---|---|
| 块 | 134 |
| 每块返回的 BM25 候选 | 80 |
| 与 SQLite 对照的返回候选 | 10,720 |
| 去重后的候选 | 844 |
| 在 SQLite 中找不到的候选 | 0 |
provenance 不是 verified 的候选 |
0 |
返回的 raw_json 与 SQLite 原文不同的候选 |
0 |
docs_chunks 返回 |
10,713 |
api_mapping 返回 |
7 |
label_prototypes 返回 |
0 |
返回数据的一致性是正确的。Source Flow Debugger 显示的表格和 ID 在 SQLite 中再次查询时,10,720 条记录全部存在,且 provenance 为 verified,返回的记录与存储的 raw_json 也相同。
但这并不意味着搜索质量全部达标。由于 134 个块全部填满了候选上限 80 条,lexical 候选未能充分收敛。此外,因文件名 anchor 保护,BM25 分数更低的文档在 9 个块中被提升至第 1 位。
代表块结果
检索良好的案例
| 块 | 输入摘要 | 返回结果 | SQLite 对照 |
|---|---|---|---|
| 1 | project.godot 文件格式说明 |
Manually editing project.godot 1 位 |
同 ID 与原文确认 |
| 13 | TileMapLayer, tile_map_data, TileSet |
TileMapLayer 属性 1 位,方法 2 位,TileData 3 位 |
全部为已验证的 docs_chunks |
| 42 | TileSetAtlasSource, texture region |
TileSetAtlasSource 1 位,TileSetSource 2 位 |
直接类依据确认 |
| 125 | _physics_process, Input.get_axis, move_and_slide |
Physics process 1 位,2D movement 文档 5~7 位,CharacterBody2D 8 位 |
移动·物理相关文档共存 |
| 130 | CharacterBody2D 节点 |
CharacterBody2D 类 1 位 |
直接类依据确认 |
块 1 的第 1 位文档并非仅凭 BM25 分数获得,而是因为 project.godot lexical anchor 保护而保留的。此情况下文件格式说明与实际完全匹配,保护是有效的。
需要改进排名的案例
块 123: extends CharacterBody2D
- 实际第 1 位:
Collision exceptions CharacterBody2D类文档: 第 17 位KinematicBody2D -> CharacterBody2D映射: 第 6 位
SQLite 中虽然有准确的 CharacterBody2D 类文档,但被排在更宽泛的碰撞·移动
文档之后。这不是数据缺失,而是排名问题。对于简短的声明块,需要将完全匹配的类名和结构字段比普通上下文标记更强地处理。
块 124: tan(deg_to_rad(30))
- 实际第 1 位:
Setting up the spring arm and camera Evaluating expressions: 第 2 位和第 3 位
第 1 位文档中也有 deg_to_rad 的使用示例,虽然并非完全无关,但解释调用本身的文档被 3D 教程抢先。需要重新排序,以区分直接的 API 说明和简单的使用示例。
需要 Qwen 再次验证的结构候选
块 13: 包含 PackedByteArray 的 map.tscn
PackedByteArray -> byte[] 映射排在第 48 位。保存的 JSONL 说明了 C# 集合迁移,但输入是 GDScript 场景资源。标记匹配但语言和使用上下文不同,搜索阶段不应直接批准。
块 130: 已经使用 CharacterBody2D 的节点
KinematicBody2D -> CharacterBody2D 映射排在第 3 位。该映射与版本判别有关,但当前块中没有旧 API KinematicBody2D。不应作为迁移警告批准的候选,Qwen 应同时查看 JSONL 与原始块,将其归类为 Godot 4 依据或无需应用。
这两个案例的 SQLite JSONL 原文已原样保存在机器可读报告的 reviewCases 中。
label_prototypes 为 0 项的原因
SQLite 的原型只有以下两项。
enum PlaneSemanticLabelclass OpenXRSpatialComponentPlaneSemanticLabelList
hexagonal_map 块中没有这两种输入模式。因此本次运行中 label_prototypes 为 0 项并非遗漏,而是直接结构依据过滤器生效的结果。
当前结论
- 返回候选与 SQLite 原文之间的数据一致性已确认。
- 代表性的项目设置、TileSet、TileMapLayer、移动函数搜索已将直接相关文档放入上位。
- 并非所有块都达到候选上限 80 项,候选缩减不足。
- 在简短类声明和单函数调用中,更直接的文档被排到后面的情况已被发现。
- 结构映射仅凭相关标记即可进入候选,Qwen 在关闭状态下无法对批准与否作出结论。
下一次重新运行的基准
当 Qwen 接口再次可用时,使用相同提交和相同 134 个块,添加以下内容。
- 对每个结构候选进行
Godot 3、Godot 4、无关、依据不足分类 - 对
PackedByteArray -> byte[]等语言上下文不匹配的候选进行拒绝判断 - 在已经使用目标 API 的块中是否拒绝迁移应用候选
- 对无关的 negative control JSONL 的拒绝判断
- 在 embedding 与 reranker 前后的直接文档排名变化
2026-08-01 F 策略与 Qwen 再次验证
将相同的外部仓库提交和 2d/hexagonal_map 原始 6 个文件重新放入
Source Flow Debugger GUI。基于最新块划分,生成了共 146 个块。按照 BM25、embedding、union、reranker 的顺序执行的整体搜索审计中,146 个块全部完成,SQLite 中未出现缺失的返回记录、未验证的 provenance、与原文不同的 JSONL。
| 实际文件 | 块 | 确认范围 |
|---|---|---|
project.godot |
20 | 全部混合搜索、全部 Qwen 验证、失败块单独重新验证 |
map.tscn |
6 | 全部混合搜索与 Qwen 验证 |
tileset.tres |
54 | 全部搜索审计、atlas source 与最终资源代表验证 |
tileset_edit.tscn |
54 | 全部搜索审计、根节点与 sprite 节点代表验证 |
troll.gd |
3 | 全部混合搜索与 Qwen 验证 |
troll.tscn |
9 | 全部混合搜索与 Qwen 验证 |
将搜索与验证分开的结果
CharacterBody2D声明和节点返回了类文档以及KinematicBody2D -> CharacterBody2D映射。Qwen 只采纳目标 API 与实际块匹配的映射作为版本依据,判定为Godot 4。PackedScene、Node2D、Sprite2D、TileSetAtlasSource等正常返回了相关类文档,但这些文档未能证明代码的主版本排他性,因而标记为依据不足。run/main_scene设置与Setting the main scene文档以及 SQLite 原文完全匹配。因自然语言说明未直接重复设置标记,首次验证被拒绝;后续补充规则,使结构化键值与作用被文档直接解释时视为相关依据,验证规则得到完善。doc_version或godot_version_tags仅是文档收集的版本信息,并未自动证明代码的版本排他性。仅当 JSONL 正文直接说明主版本差异时,才确认版本,验证规则已相应完善。
通过 SQLite 全面对照确认的数据空白
以下表达在 GUI 上位候选不准确,导致重新检索 SQLite 的 docs_chunks、api_mapping、label_prototypes 全部 raw_json。所有包含准确表达的记录均为 0 项。
- scene resource header
- script external resource declaration
- project format version setting
- untyped declaration warning setting
- window stretch aspect setting
- default clear color setting
这些案例说明 SQLite 中已有正确的 JSONL,只是搜索未命中,而不是缺少依据。因此验证器未将 无关 随意改为 Godot 3 或 Godot 4。
验证规则的修改分布在提交 d504f50、2222634 中,并已通过 33 项 Source Flow Debugger 测试。规则中未将特定代码语法、API 名称、设置键列入白名单。