给AI做资料问答,先把命中的原文带出来
搜“证据不足”,找到了两段:一段写处理规则,另一段只是拿这四个字举例。让AI回答资料里的问题时,先看检索交给它的究竟是哪几段,比只看到“命中2条”有用。
这份小例子用Python标准库和SQLite做中文连续短语检索,输出原文、段落ID和出处,再把候选交给AI阅读。附件中的六段“灯塔资料助手演示手册”是固定合成资料,不是真实产品规则;本次没有调用模型,交付的是检索步骤和可继续使用的证据输入。
先建一份库,再查两个词
解压附件,在材料目录运行:
python local_search.py build paragraphs.json demo.sqlite
python local_search.py search demo.sqlite "证据不足" --limit 3
python local_search.py search demo.sqlite "临时验证码" --limit 3 需要Python 3.10+,以及该Python使用的SQLite支持FTS5和trigram。只有版本号较新还不够,建库时会实际尝试创建索引;缺少功能就报错。本次运行环境是Python 3.12.14、SQLite 3.53.1,不用安装第三方Python包。
demo.sqlite 必须是新文件,已有库会拒绝覆盖。查询以只读方式打开它;库文件不存在就报错。这里索引的是每条记录的 body,标题和来源名只用于回查。
建库输出应显示 "paragraphs": 6。六段资料中,“证据不足”返回2条,顺序是P004、P002;“临时验证码”返回1条P001。--limit 3 是最多取3条,这次只返回实际匹配的段落。
命中的两段,要分开读
P004,来源为“灯塔资料助手演示手册(固定合成资料)”,第4段:
证据不足时,答案留空,证据列表留空,交给人工复核;不要把检索不到的内容写成“文档已经确认”。 P002,同一来源,第2段:
检索前先把问题缩成具体关键词,例如“向量检索”“证据不足”。本工具执行连续子串检索,不理解同义词,也不会自动拆解整句问题。 如果问题是“按这份演示手册,证据不足时该怎么处理?”,P004给了直接规定,P002没有。两个候选都包含关键词,能支持的结论却不同。
结果JSON保留 id、title、source、paragraph、完整 body 和排序值 score。SQLite的 bm25 在这里按从小到大排序;具体分值以所用SQLite和当前资料为准;分数不是答案正确概率,也不能把排第一当成已经核实。
包内 filled-prompt.txt 已放好具体问题和这次候选,可以直接阅读或交给自己的AI。完整可复用要求在 prompt.txt:只依据候选原文,结论附短引文及对应ID、来源和段号;没直接依据就留空并标记待复核,不编出处。填好的提示词是待发送的输入。
用自己的资料时
paragraphs.json 是UTF-8数组,每条有 id、title、source、paragraph、body。ID唯一,段号为正整数,其他字段是非空字符串。包内有完整六段输入;工具直接接收段落,不负责从PDF或Markdown抽取内容。
改完资料,要换一个新库名重新建库,后续也查新库:
python local_search.py build paragraphs.json demo-v2.sqlite
python local_search.py search demo-v2.sqlite "证据不足" --limit 3 修改JSON不会自动更新旧库。输出中的 source_json_sha256 对应建库时输入文件的字节快照,便于分辨版本,不能证明资料本身正确。
这版工具限制输入最多1MiB、1000段,每段正文最多4000字符,候选上限可设1至5条。先把自己的长资料整理成可回查的小段,再用这一套流程。
关键词要跟资料里的写法对得上
这里把整个查询作为连续字面短语匹配,默认不区分大小写,不会自动拆整句问题,也不做同义词扩展。问题写“依据不够”,原文只写“证据不足”,可能查不到。先从问题中选一个资料可能实际使用的术语,再检索。
FTS的MATCH语法有自己的运算符。脚本除了绑定SQL参数,还会把整个查询放进双引号、将内部双引号加倍,所以 A OR B 这样的内容会按完整短语处理。只绑定SQL参数,并不会自动关闭FTS表达式语法。
查询至少3个Unicode字符;例如“证据”只有两字,会明确报错退出2,提示换成更具体的连续词。三字以上却无匹配时,found: 0 是正常结果,只说明这次没检出,不能推断资料库一定没有答案。
本地实际跑过15项检查,包括两组中文查询及原文字段、bm25升序和数量上限、OR与双引号的字面匹配、空词和两字拒绝、无命中、已有库保护、实际只读连接拒写,以及输入和库文件哈希保持不变。缺少FTS5的错误处理分支用注入错误验证,当前机器的FTS5则已实际建库成功。
最终ZIP已在新目录独立解压,重新建库、两次查询并复跑验证器,15项全部通过。验证对象是本地检索和文件处理;运行 python verify.py 可复现。
下载完整检索脚本、六段资料、两组实际结果、证据提示词及已填样例、验证脚本与README(ZIP,7个文件)
参考:SQLite FTS5的trigram、MATCH与bm25文档,Python sqlite3文档、OpenAI Retrieval及引用指南,2026-10-25查阅。以上实现是本地关键词检索与原文候选导出,后续回答仍需逐条核对引用是否支持结论。