内容
# pyLLMSearch - 高级RAG
[文档](https://llm-search.readthedocs.io/en/latest/)
本软件包的目的是提供一个高级的问答(RAG)系统,通过简单的基于YAML的配置,实现与本地文档集的交互。特别关注系统各个组件的改进 **除了基本的基于LLM的RAG** - 更好的文档解析、混合搜索、HyDE、聊天历史、深度链接、重新排序、自定义嵌入等。该软件包设计用于与自定义的大型语言模型(LLMs)配合使用 - 无论是来自OpenAI还是本地安装。
通过内置的前端或暴露MCP服务器支持与该软件包的交互,允许Cursor、Windsurf或VSCode GH Copilot等客户端与RAG系统交互。
## 功能
* 快速解析和嵌入中等大小的文档库(测试了高达几GB的markdown和pdf)
* 增量更新新文档,无需重新索引整个文档库。
* 支持的文档格式
* 内置解析器:
* `.md` - 根据标题、副标题和代码块等逻辑组件划分文件。支持清理图像链接、添加自定义元数据等附加功能。
* `.pdf` - 基于MuPDF的解析器。
* `.docx` - 自定义解析器,支持嵌套表格。
* 其他常见格式由`Unstructured`预处理器支持:
* 格式列表参见[此处](https://unstructured-io.github.io/unstructured/core/partition.html)。
* 基于FastAPI的API + MCP服务器,允许通过任何mcp客户端(包括VSCode/Windsurf/Cursor等)与RAG通信。
* 文档部分的深度链接 - 跳转到单个PDF页面或markdown文件中的标题。
* 允许与嵌入式文档交互,内部支持以下模型和方法(包括本地托管):
* OpenAI兼容模型和API。
* HuggingFace模型。
* 通过OpenAI API与LiteLLM + Ollama互操作,支持数百种不同模型(参见[LiteLLM模型配置](sample_templates/llm/litellm.yaml))
* SSE MCP服务器启用与流行的MCP客户端的接口。
* 混合搜索和重新排序
* 从文档文件夹中提取稠密嵌入并将其存储在向量数据库中([ChromaDB](https://github.com/chroma-core/chroma))。
* 支持以下嵌入模型:
* Hugging Face嵌入。
* 基于Sentence-transformers的模型。
* 基于Instructor的模型。
* OpenAI嵌入。
* 使用SPLADE(https://github.com/naver/splade)进行稀疏嵌入,以实现混合搜索(稀疏+稠密)。
* 支持语义搜索的“检索和重新排序”策略,参见[此处](https://www.sbert.net/examples/applications/retrieve_rerank/README.html)。
* 除了原始的`ms-marco-MiniLM`交叉编码器外,还支持更现代的`bge-reranker-v2-m3`和`zerank-2`。
* 通过开源gmft(https://github.com/conjuncts/gmft)或Azure文档智能支持表格解析。
* 使用Gemini API的可选图像解析支持。
* 支持HyDE(假设文档嵌入)- 参见[此处](https://arxiv.org/pdf/2212.10496.pdf)。
* 警告:启用HyDE(通过配置或Web应用程序)会显著改变结果质量。请确保在启用之前阅读论文。
* 根据我自己的实验,启用HyDE显著提高了用户无法使用特定领域语言表达问题的主题的输出质量 - 例如学习新主题时。
* 支持多查询,灵感来自`RAG Fusion` - https://towardsdatascience.com/forget-rag-the-future-is-rag-fusion-1147298d8ad1
* 当启用多查询(通过配置或Web应用程序)时,原始查询将被三个变体替换,允许弥合术语差距并“提供不同的角度或视角”根据文章。
* 支持可选的聊天历史记录和问题上下文化
* 其他功能
* 简单的Web界面。
* 能够将响应保存到离线数据库以供未来分析。
## 演示

## 文档
[浏览文档](https://llm-search.readthedocs.io/en/latest/)