强大的文档查询与总结工具,一站式解决海量异构文档的检索与分析问题wdoc

项目简介

wdoc 是一个强大的检索增强生成(RAG)系统,旨在总结、搜索和查询各种文件类型的文档。它特别适用于处理大量不同类型的文档,对于研究人员、学生和需要处理大量信息源的专业人士来说非常理想。我对所有其他查询或总结的 RAG 解决方案都感到沮丧,因此我制作了我的完美解决方案,并打包成一个单一的产品。

关键特性:

    • 旨在支持任何文件类型,并同时查询所有文件(已实现 15 种以上!)

    • 高召回率和特异性:它被设计用来通过精心设计的嵌入搜索找到大量文档,然后使用语义批量处理逐步聚合每个答案,以生成一个提及来源并指向源文档确切部分的单一答案。

    • 支持几乎所有LLM提供商,包括本地提供商,甚至为超级机密内容提供额外的安全层。

    • 使用昂贵和便宜的LLM来尽可能提高召回率,因为我们能够承担每次查询(通过嵌入)检索大量文档

    • 终于有一个有用的 AI 生成摘要:获取作者的思考过程,而不是模糊的结论。

    • 可扩展的,这既是工具也是库。


 功能

  • 15+ 文件类型:也支持递归加载或定义复杂异构语料库,如文件列表、链接列表、使用正则表达式、YouTube 播单等。请参阅支持的文件类型。所有文件类型都可以无缝组合在同一索引中,这意味着您可以在查询 Anki 收藏的同时查看您的 PDF 文件。它还支持从音频文件和 YouTube 视频中移除静音!

  • 100+ LLMs:OpenAI、Mistral、Claude、Ollama、Openrouter 等。感谢 litellm。我个人使用 openrouter 的 deepseek v3 模型作为强大的LLM和评估LLM(之前:Claude Sonnet 3.5 和 gpt-4o-mini),以及 openai 嵌入。

  • 本地和私有 LLM:采取一些措施确保没有数据离开您的电脑并流向 LLM 提供商:不使用 API 密钥,所有 api_base 都由用户设置,缓存与其它部分隔离,出站连接通过过载套接字进行审查等。

  • 高级 RAG 查询大量多样化的文档:

    • 支持特殊语法,如”QE >>>> QA”,其中 QE 是一个用于过滤嵌入的问题,QA 是你想要回答的实际问题。

    1. 使用嵌入检索文档

    2. 然后使用一个弱LLM模型(“Eve the Evaluator”)来判断哪些文档不相关

    3. 然后使用强LLM来回答(“Anna the Answerer”)问题,使用每个剩余的单独文档。

    4. 然后所有相关答案都合并成一个简短的 Markdown 格式答案(”Carl the Combiner”)。在合并之前,它们会使用 scipy 的层次聚类和叶排序按语义簇和语义顺序进行批量处理,这使得LLM能够以自下而上的方式更容易地合并答案。 Eve the Evaluator 、 Anna the Answerer 和 Carl the Combiner 是它们在系统提示中为每个LLM赋予的名称,这样您可以轻松地为特定步骤添加特定的附加指令。还有 Sam the Summarizer 用于摘要和 Raphael the Rephraser 用于扩展您的查询。

    5. 每份文档都通过一个唯一的哈希值进行标识,答案来源于这些文档,这意味着你知道每个答案的信息来自哪份文档。

  • 高级摘要:

    • 将作者的理由、论点、思考过程等压缩成易于浏览的 Markdown 文件,而不是无用的“高级要点”。

    • 摘要随后再次检查 n 次,以确保正确的逻辑缩进等。

    • 摘要可以使用与文档相同的语言,或者直接翻译。

  • 许多任务:查看支持的任务。

  • 信任但核实:答案来源: wdoc 跟踪每个用于答案的文档的哈希值,允许您核实每个断言。

  • Markdown 格式化的答案和摘要:使用 rich。

  • 合理嵌入:默认使用复杂的嵌入,如多查询检索器,但也包括 SVM、KNN、父检索器等。可定制。

  • 全面文档化的大量文档字符串,大量代码注释,详细 --help 等。完整用法可在 USAGE.md 文件中找到或通过 python -m wdoc --help 。我努力维护详尽的文档。

  • 可脚本化/可扩展:您可以在其他 Python 项目中使用 wdoc ,通过 --import_mode 。查看下面的脚本。

  • 静态类型:运行时类型检查。通过环境标志禁用: WDOC_TYPECHECKING="disabled / warn / crash" wdoc (默认: warn )。感谢 beartype,它甚至不会减慢代码速度!

  • LLM(以及嵌入)缓存:加快速度,以及索引存储和加载(对大型集合很有用)。

  • 优秀的 PDF 解析器臭名昭著地不可靠,因此使用了 15 个不同的加载器,并保留根据解析评分最好的一个。通过 openparse(默认无需 GPU)或通过 UnstructuredPDFLoader 支持表格。

  • Langfuse 支持:如果您设置了适当的 langfuse 环境变量,它们将被使用。请参阅此指南或这一篇以了解更多信息(注意:如果使用 private_mode,则此功能被禁用,以避免任何泄露)。

  • 文档过滤:基于正则表达式对文档内容或元数据进行过滤。

  • 快速:并行文档加载、解析、嵌入、查询等。

  • Python-Fire 的 Shell 自动补全

  • 通知回调:可用于例如使用 ntfy.sh 在您的手机上获取摘要。

  • 黑客思维:我是一个友好的开发者!如果你有功能请求或其他任何问题,只需打开一个问题即可。


支持的文件类型

  • auto: 默认,为您猜测文件类型

  • url: 尝试多种方式加载网页,使用启发式算法找到更好的解析方式

  • YouTube:文本来自 yt 字幕/翻译,或者更好的是使用 whisper/deepgram。请注意,YouTube 字幕是带有时码下载的(因此您可以询问“作者何时提到这样的内容”),但采样频率较低(而不是每秒一个时码,而是每 15 秒一个)。在总结时,YouTube 章节也被作为上下文提供给LLM,这可能会对其有很大帮助。

  • PDF:实现了 15 个默认加载器,使用启发式算法来保留最佳加载器并提前停止。通过 openparse 或 UnstructuredPDFLoader 支持表格。易于添加更多。

  • 在线 PDF:通过 URL 访问,然后作为 PDF 处理(见上文)

  • Anki:Anki 集合数据库的任何子集。图像的 alt 和 title 可以显示给LLM,这意味着如果您使用了 AnkiOCR 插件,这些信息将有助于为LLM的笔记提供上下文。

  • string:命令行提示您输入文本,以便您可以轻松粘贴内容,非常适合付费墙文章!

  • txt: .txt, markdown

  • 直接发送文本内容作为路径

  • local_html:用于网站抓取

  • logseq_markdown

  • 本地音频:支持多种文件格式,可以使用 OpenAI 的 whisper 或 deepgram。支持自动去除静音等。注意:对于 whisper 无法处理的过大音频(通常>25MB),会自动分割成较小的文件,转录后合并。此外,音频转录本会转换为包含定期时间戳的文本,使得可以询问LLM某事是在何时说的。

  • 本地视频:提取音频后将其作为本地音频处理

  • online_media使用 youtube_dl 尝试下载视频/音频,如果失败,则尝试使用 playwright 加载页面以拦截好的 URL 候选者。然后作为本地音频处理(但也适用于视频)。

  • epub:几乎未经测试,因为 epub 通常是一个定义不明确的格式

  • powerpoint: .ppt, .pptx, .odp, …

  • word: .doc, .docx, .odt, …

  • json_dict:包含单个 json 字典的文本文件。

  • 递归类型

    • YouTube 播放列表:获取每个视频的链接然后进行处理

    • recursive_paths:将路径、正则表达式模式和文件类型转换为所有递归找到的文件,并按指定的文件类型处理(例如许多 PDF 文件或大量 HTML 文件等)。

    • link_file将包含 URL 的文本文件转换为适当的加载器参数。支持任何链接,例如网页、PDF 链接和 YouTube 链接可以放在同一个文件中。非常适合总结大量内容!

    • json_entries:将一个路径转换为文件,其中每行是一个 json 字典:包含在加载时使用的参数。例如:加载多个其他递归类型。一个示例可以在 docs/json_entries_example.json 中找到。

    • toml_entries: 读取一个 .toml 文件。示例可以在 docs/toml_entries_example.toml 中找到。


支持的任务

  • 查询提供文档并对其提问。

  • 仅返回文档及其元数据。对于 Anki,可以直接在浏览器中打开卡片。

  • 总结提供文档并阅读摘要。摘要提示可在 utils/prompts.py 中找到。

  • 总结后查询 首先总结文档,然后允许您直接查询它。

项目链接

https://github.com/thiswillbeyourgithub/wdoc

扫码加入技术交流群,备注开发语言-城市-昵称

(文:GitHubStore)

欢迎分享

发表评论