> auto-coder==0.1.176 可用
背景
在上一篇,我们提供了文档长度自适应相关度的功能:llm-native RAG:auto-coder.rag 日拱一卒
对于特别大的文档,我们会自动做切分,一般单个segment 77k(窗口大小128K的情况),通常切分会带来效果上的掉点:
信息被切割,导致信息完整性缺失
召回是通过相关度排序的,如果同一篇内容的不同segment 被召回,那他们和原本在文章中的顺序而言,大概率乱序的。
这些都会导致回答的过程中强化大模型的幻觉甚至直接导致无法回答问题。
其中第一点,有一些其他的解决方案,我们后续会说明。这次我们重点关注乱序的问题。
方案
解决乱序目前有两个方案:
a) 方案一(保留位置):召回过程中,如果同一个文档有不同segement 都在召回列表中,那么可以根据文章中顺序来置换位置。
b) 方案二(当前实现):遍历文档,发现某文档的segment A,立即在召回列表中查找该文档的所有其他segments,对它们按原文顺序做重排序,并将重新排序后的多个segments插入到当前的segment A 位置中。
我们这以后选择了方案2, 因为方案一虽然解决了顺序问题,但是相当于人为的在一篇文章中裁剪掉一部分,然后插入了其他内容,也会极大的影响大模型的理解和判断。所以方案二不仅解决了顺序问题,还解决信息被其他内容胡乱插入的问题。
如何使用
该功能在新版本中默认开启,用户无感知。如果用户不希望开启这项优化,可以通过 --disable_segment_reorder 参数关闭。
pip install -U auto-coder
auto-coder.rag serve \
--tokenizer_path /Users/allwefantasy/Downloads/tokenizer.json \
--doc_dir /Users/allwefantasy/projects/ray/doc/source \
--rag_doc_filter_relevance 2
tokenizer 可以在这里下载:https://cdn.deepseek.com/api-docs/deepseek_v2_tokenizer.zip
然后通过 --doc_dir 指定文档目录即可。此时就可以使用兼容 openai 的客户端或者使用 openai sdk 使用了。
支持的文档类型:word,excel,ppt, pdf 以及任何文本文档