项目介绍:llm-search
llm-search 项目是一个先进的问答系统(RAG),它的主要目标是通过简单的 YAML 配置,与本地文档集合进行交互,提供便捷的问答功能。该系统不仅限于基本的基于大型语言模型(LLM)的问答,还在多个方面进行了改进,包括更好的文档解析、混合搜索(hybrid search)、启用 HyDE 的搜索、聊天记录、深度链接、重新排序以及自定义嵌入的能力等。这个包可以兼容各类自定义大型语言模型,不论是来自 OpenAI 的模型还是本地安装的模型。
功能特性
-
支持的格式和解析器:
- 内置解析器:
.md
格式:根据逻辑结构(如标题、副标题和代码块)分割文件,还支持清理图片链接、添加自定义元数据等。.pdf
格式:使用 MuPDF 解析器。.docx
格式:自定义解析器,支持嵌套表格。
- 其他通用格式通过
Unstructured
预处理器支持,格式列表可在此处查看。
- 内置解析器:
-
表格解析支持:可使用开源 gmft 项目或 Azure Document Intelligence 进行解析。
-
可选的图像解析支持:通过 Gemini API。
-
多文档集合支持:可以按文档集合筛选结果。
-
增量更新嵌入:无需重新索引整个文档库即可更新嵌入。
-
生成稠密嵌入:从文档文件夹中生成,并存储在向量数据库 (ChromaDB) 中。
- 支持的嵌入模型:
- Hugging Face 嵌入。
- 基于 Sentence-transformers 的模型,如
multilingual-e5-base
。 - 基于 Instructor 的模型,如
instructor-large
。
- 支持的嵌入模型:
-
生成稀疏嵌入:使用 SPLADE 实现混合搜索(稀疏 + 稠密)。
-
“检索并重新排序”策略:支持语义搜索。
-
支持 HyDE(Hypothetical Document Embeddings):需要注意启用 HyDE 可能显著改变结果的质量。
-
多查询支持:受到
RAG Fusion
启发,当启用时,原始查询将被替换为同一查询的三个变体,从不同角度解决术语差异。 -
聊天记录和问题情境化支持:可以选择性地保留聊天记录。
-
文档嵌入交互:内部支持包括 OpenAI 模型、HuggingFace 模型、Llama cpp 支持的模型等。
-
与 LiteLLM + Ollama 的互操作性:通过 OpenAI API,支持数百种不同的模型。
-
其他功能:
- 简单的命令行和 Web 界面。
- 深度链接文档章节。
- 可将响应保存到离线数据库中以便日后分析。
- 实验性的 API 等。
演示
项目提供了在线演示,用户可以通过 Google Colab 进行体验。 项目的功能可以通过 Demo GIF 进行视觉化的展示。
文档
详细的项目文档可以通过此处浏览。