!Open In Colab](https://githubtocolab.com/snexus/llm-search/blob/main/notebooks/llmsearch_google_colab_demo.ipynb)
pyLLMSearch - 高级 RAG
这个软件包的目的是提供一个便捷的问答(RAG)系统,使用基于 YAML 的简单配置,能够与本地多文档集进行交互。特别关注了系统各组件的改进 以及基本的基于 LLM 的 RAG ——更好的文档解析、混合搜索、启用 HyDE 的搜索、聊天记录、深度链接、重新排序、定制嵌入能力等。该包设计用于与定制的大型语言模型(LLMs)一起工作——无论是来自 OpenAI 还是本地安装的模型。
功能
-
支持的格式
- 内建解析器:
.md
- 基于逻辑组件(如标题、副标题和代码块)划分文件。支持清理图片链接、添加自定义元数据等附加功能。.pdf
- 基于 MuPDF 的解析器。.docx
- 自定义解析器,支持嵌套表格。
- 其他常见格式由
Unstructured
预处理器支持:- 格式列表见这里。
- 内建解析器:
-
支持多个文档集,并通过集合筛选结果。
-
能够增量更新嵌入,无需重新索引整个文档库。
-
从文件夹中的文档生成密集嵌入,并将其存储在向量数据库中(ChromaDB)。
- 支持以下嵌入模型:
- Hugging Face 嵌入。
- 基于 Sentence-transformers 的模型,例如
multilingual-e5-base
。 - 基于 Instructor 的模型,例如
instructor-large
。
- 支持以下嵌入模型:
-
使用 SPLADE (https://github.com/naver/splade) 生成稀疏嵌入,以支持混合搜索(稀疏 + 密集)。
-
支持“检索和重新排序”策略的语义搜索,见这里。
- 除了原始的
ms-marco-MiniLM
交叉编码器外,还支持更现代的bge-reranker
。
- 除了原始的
-
支持 HyDE(假设文档嵌入) - 见这里。
- 警告:启用 HyDE(通过配置或 Web 应用)可能会显著改变结果的质量。启用前请务必阅读论文。
- 根据我的实验,在用户无法使用主题的领域特定语言表达问题时,启用 HyDE 显著提高了输出质量——例如在学习新主题时。
-
支持受
RAG Fusion
启发的多查询,详见 https://towardsdatascience.com/forget-rag-the-future-is-rag-fusion-1147298d8ad1- 启用多查询时(通过配置或 Web 应用),原始查询将被替换为相同查询的 3 个变体,从而弥合术语差距,并根据文章“提供不同的角度或视角”。
-
支持带有问题上下文的可选聊天记录
-
允许与嵌入文档进行交互,内部支持以下模型和方法(包括本地托管的模型):
- OpenAI 模型(ChatGPT 3.5/4 和 Azure OpenAI)。
- HuggingFace 模型。
- Llama cpp 支持的模型——完整列表见这里。
- AutoGPTQ 模型(暂时禁用,因依赖项损坏)。
-
通过 OpenAI API 与 LiteLLM + Ollama 互操作,支持数百种不同的模型(见 LiteLLM 的模型配置)
-
其他功能
- 简单的 CLI 和 Web 界面。
- 深度链接到文档部分——跳转到 PDF 的某一页或 markdown 文件中的标题。
- 能够将响应保存到离线数据库以供未来分析。
- 实验性 API