展开本页目录
开始前准备什么
- 下载本题完整练习包,区分待实现 starter 与作者完成 reference。
- 按README准备本题原生依赖;所有输入均为原创或明确标注的本地fixture。
- 本地练习不需要付费模型Key;真实模型调用未执行,MiniLM题另有明确实际推理说明。
- 准备源码集合
- 建立FTS5索引
- 查询关键符号
- 映射真实行号
- 拒绝坏查询
- 重建变更索引
- 保存离线工具
原创输入、待完成starter、作者reference及实际运行产物,依README本地准备依赖。
环境要求、具体操作、产物核对与未运行范围。
1. 准备源码集合
输入为六份原创Python、TypeScript和说明文件。按路径与行号拆成记录,练习只索引明确列出的源码,不包含生成目录、依赖或私人代码。
2. 建立FTS5索引
使用SQLite FTS5创建虚拟表,path和line为UNINDEXED元数据,源码文本参与倒排索引。它是离线关键词检索,不是语义向量RAG。
本地启动与复现
cd reference
python3 verify.py3. 查询关键符号
用 MATCH 搜索 invoice_total,再通过 snippet 给命中词加标记并按rank排序。查询结果应指向定义和说明中的真实位置。
4. 映射真实行号
对每一条结果,用原始文件路径和行号回读对应行,确认该行确实包含目标符号。不能把全文命中以后随意标一个文件首行。
5. 拒绝坏查询
故意提交未闭合引号查询,SQLite必须返回可解释错误。用户输入的FTS查询语法需要单独处理,不能让异常把整个界面当作空结果。
6. 重建变更索引
把 billing.py 定义改为 receipt_total 后重建索引,再搜索旧符号。旧定义路径必须消失,说明重建没有把旧行残留当作最新代码。
7. 保存离线工具
运行 verify.py 可在内存中生成索引并核对行映射;下载包不分发运行时SQLite数据库。Claude Code可按合同补充目录扫描与增量更新,但本题未运行该账号会话。
怎样确认已经完成
- MATCH结果的路径/行号逐条回读源码,snippet只展示命中片段。
- 未闭合引号查询返回明确错误,不显示空成功。
- 重命名并重建后旧定义不残留,新符号可检索。
常见问题
不接模型也能给代码库做本地搜索吗?
可以,用SQLite FTS5建立倒排索引即可搜索符号与文本。本题是离线关键词搜索,不是语义RAG。
搜索命中了文件,怎么直接定位到实际那一行?
建索引时保存相对路径和真实行号,查询后再次回读源行核对,snippet仅用于展示命中片段。
哪些部分实际运行,哪些需要独立验证?
SQLite FTS5原生MATCH/snippet/rank与源码行映射实跑,错误查询被拒绝,重建后旧定义不残留。 目标AI助手账号生成、云平台部署和生产环境不在本次执行范围。




