专栏名称: GitHubStore
分享有意思的开源项目
目录
相关文章推荐
云南市场监管  ·  一次性筷子都是用二氧化硫漂白的?!还能用吗? ·  12 小时前  
烂板套利  ·  人形机器人,具有唯一性的7家公司 ·  16 小时前  
烂板套利  ·  人形机器人,具有唯一性的7家公司 ·  16 小时前  
51好读  ›  专栏  ›  GitHubStore

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

GitHubStore  · 公众号  ·  · 2025-02-14 17:30

正文

项目简介

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 播放列表:获取每个视频的链接然后进行处理







    请到「今天看啥」查看全文