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 前后直接文档排名的变化