受Token限制时,如何用OpenAI Chat Completions API筛选数据库最优文档?
针对你的需求,有几种实用的方案可以在Token限制下从5-6份文档中选出最优匹配的一份:
嵌入向量匹配法
先用OpenAI的Embedding API(如text-embedding-ada-002)给每份完整文档生成对应的嵌入向量,把向量和文档关联存储起来。用户提出问题时,同样生成问题的嵌入向量,然后计算问题向量与每份文档向量的余弦相似度,直接选取相似度最高的文档传给Chat Completions API。因为只有5-6份文档,计算相似度的成本极低,甚至不用专门的向量数据库,本地简单计算就能完成。预生成摘要+快速筛选
提前给每份文档生成简短核心摘要(用Chat Completions API控制Token,比如要求生成100字以内的核心内容总结),同时提取文档的核心关键词。用户提问后,要么直接把问题和所有文档的摘要拼接(总Token量会远低于全文档)传给API,让它判断哪个摘要与问题最相关;要么先通过关键词匹配淘汰明显无关的文档,再把剩余文档的摘要或部分内容传给API做最终判断。文档片段拼接直接筛选
因为只有5-6份文档,你可以给每份文档截取关键片段(比如开头、结尾各150字,或核心段落),把这些片段和用户问题一起打包传给Chat Completions API,用明确的指令让它选出最相关的文档。比如指令可以写:“下方是5份文档的关键片段,以及用户的问题,请直接告诉我哪份文档最适合回答该问题,只需输出文档编号即可。文档1:[片段内容];文档2:[片段内容]... 问题:[用户问题]”。这种方式操作最简单,只要片段总Token不超过API限制即可。分块递进筛选
如果单份文档本身较长,可先把每份文档拆成若干小内容块,给每个块生成嵌入向量。用户提问时,先筛选出与问题最相关的几个内容块,再统计这些块所属的文档,选择关联块最多的那份文档作为最优结果。这种方式能更精准定位到文档的相关部分,避免因文档整体内容杂糅导致的匹配偏差。
内容的提问来源于stack exchange,提问作者nimesh

