替代方案 D:BM25 + 嵌入 并行
流程
raw chunkText
-> BM25 top 50
-> embedding top 50
-> 候选 union
-> 混合分数
-> JSONL 返回
-> Qwen direct-evidence 验证角色分配
BM25 捕获的内容:
Input.is_action_pressed
AnimatedSprite2D
position.clamp
screen_size
Vector2.ZEROembedding捕获的内容:
player movement
2D movement tutorial
moving inside screen
animation based on movementQwen direct-evidence validator的作用:
检查检索的 JSONL 中是否有直接匹配当前块的字符串/模式依据
丢弃无关的 JSONL优点
- 字符串搜索和语义搜索的弱点相互补足。
- 即使没有 Qwen,第一轮候选的质量也会提升。
- 保持 raw chunk 条件。
- 即使没有硬编码的 Godot API signal extractor 也能开始。
缺点
- 需要进行分数融合调优。
- BM25 分数和向量分数的尺度不同。
- 如果没有 reranker,排序可能会不稳定。
- 不能完全阻止 false positive。
基准 chunk 中预期的结果
上位候选:
first_2d_game / coding_the_player
same page / clamp section需要降低或在验证中废弃的候选项:
first_3d_game / player_movement_code
unrelated api_mapping
unrelated label_prototypesPoC 模拟
同时在两个路径中搜索基准块。
raw chunkText
-> BM25 top 50
-> embedding top 50
-> 候选 union
-> 重复 合并
-> Qwen direct-evidence 验证BM25 top 候选示例:
| 候选 | BM25 捕获的原因 |
|---|---|
first_2d_game / coding_the_player |
Input.is_action_pressed、move_left、move_right、AnimatedSprite2D.play/stop 直接匹配 |
first_2d_game / clamp section |
position.clamp、Vector2.ZERO、screen_size 直接匹配 |
first_3d_game / player_movement_code |
输入处理和 normalized 移动标记重叠 |
embedding top 候选示例:
| 候选 | embedding 捕获的原因 |
|---|---|
first_2d_game / coding_the_player |
2D 玩家移动和动画的含义相近 |
first_2d_game / clamp explanation |
将玩家限制在屏幕内的含义相近 |
first_3d_game / player_movement_code |
玩家移动的含义相近 |
animation docs |
在 moving 状态下动画播放/停止的含义相近 |
候选 union 之后会显示如下。
candidate A:
source: BM25 + embedding
evidence: Input.is_action_pressed, AnimatedSprite2D.play/stop
expected: accept
candidate B:
source: BM25 + embedding
evidence: position.clamp, Vector2.ZERO, screen_size
expected: accept
candidate C:
source: BM25 + embedding
evidence: Input.is_action_pressed, move_left, move_right, normalized
missing: AnimatedSprite2D, Vector2, screen_size
expected: lower or reject
candidate D:
source: embedding only
evidence: semantic movement/animation similarity
direct string match: weak
expected: validator decision needed在将 Qwen direct-evidence validator 传递时,依据以下标准进行判断。
SOURCE_CODE 中的实际字符串/API 调用以及 JSONL 的 source_api、source_pattern、match_terms、required_when_seen_in_code、before_code,或者 docs_chunks 的 content/code_blocks/api_symbols 是否直接匹配?在 PoC 中要确认的日志
此方案因为 union 过程重要,需要展示以下内容。
1. BM25 候选列表
2. embedding 候选列表
3. union 后去除重复的结果
4. 每个候选是来自 BM25 还是来自 embedding
5. 直接字符串依据列表
6. Qwen 验证器的 是/否眼前的结论:
BM25直接上传 API 依据,
embedding 补充说明型候选。
但是仅靠 union 会留下 false positive,因此需要 validator。判定
## 现实的中间阶段
实战最低推荐线如果直接将 reranker 附加上去有压力,可以先比较这个替代方案。