idea_world_labDEV JOURNAL
2026年7月28日星期二

2026-07-28 Source Flow Debugger 实际源码搜索报告

目的

在已有记录中,仅写到实际的 Godot 项目被划分为 134 个块进行搜索,且相关文档出现在上位结果中。仅凭这一描述,无法得知每个块返回了什么,返回的 JSONL 是否真的存在于 SQLite 中,或者更直接的文档是否因为排名被压制而未被检出。

本报告将以下三个问题分开记录。

  1. Source Flow Debugger 在每个块中返回了哪些 JSONL 候选?
  2. 返回的候选是否与已提交到 SQLite 的经过验证的原始 JSONL 完全相同?
  3. 在 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: 包含 PackedByteArraymap.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 PlaneSemanticLabel
  • class OpenXRSpatialComponentPlaneSemanticLabelList

hexagonal_map 块中没有这两种输入模式。因此本次执行中 label_prototypes 为 0 项,并非遗漏,而是直接结构依据过滤起作用的结果。

当前结论

  • 返回候选与 SQLite 原文之间的数据一致性已确认。
  • 代表性的项目设置、TileSet、TileMapLayer、移动函数搜索已将直接相关文档置于上位。
  • 并非所有块都已填满候选上限 80 项,候选缩减仍不足。
  • 在简短类声明和单函数调用中,直接文档被后移的情况已被发现。
  • 结构映射仅凭相关标记即可进入候选,Qwen 在关闭状态下无法对批准作出结论。

下一次重新运行的依据

当 Qwen 接口再次就绪,使用相同提交和相同的 134 个块进行以下补充。

  1. 对每个结构候选进行 Godot 3Godot 4无关依据不足 分类
  2. PackedByteArray -> byte[] 等语言上下文不匹配的候选进行拒绝判定
  3. 在已使用目标 API 的块中是否拒绝迁移应用候选
  4. 对无关的 negative control JSONL 的拒绝判定
  5. 在 embedding 与 reranker 前后直接文档排名的变化

输出物