wdoc
是一个功能强大的 RAG(检索增强生成)系统,旨在汇总、搜索和查询各种文件类型的文档。它对于处理大量不同的文档类型特别有用,非常适合处理大量信息源的研究人员、学生和专业人士。对所有其他用于查询或总结的 RAG 解决方案感到沮丧,因此将完美的解决方案放在一个包中。
主要功能
-
旨在同时支持任何文件类型和来自所有文件类型的查询(已经实现了 15+!)
-
高召回率和特异性:使用精心设计的嵌入搜索找到大量文档,然后使用语义批处理仔细地逐渐聚合每个答案,以生成一个答案,该答案提到源,指向源文档的确切部分。
-
几乎支持任何 LLM 提供商,包括本地提供商,甚至为超级机密内容提供额外的安全层。
-
同时使用昂贵和便宜的 LLM 来提高尽可能高的召回率,因为我们可以承受每个查询获取大量文档的费用(通过嵌入)
-
最后,一个有用的 AI 驱动的总结:获取作者的思考过程,而不是模糊的收获。
-
可扩展,这既是一个工具,也是一个库。
-
15+ 文件类型:还支持组合递归加载或定义复杂的异构语料库,如文件列表、链接列表、正则表达式、YouTube 播放列表等。请参阅支持的文件类型。所有文件类型都可以无缝组合到同一个索引中,这意味着您可以在查询工作 PDF 的同时查询 anki 收藏夹。它也支持从音频文件和 youtube 视频中删除静音!
100+ LLM 和许多嵌入:借助 litellm,支持 OpenAI、Mistral、Claude、Ollama、Openrouter 等的任何 LLM。支持的嵌入引擎列表可以在这里找到,但至少包括 Openai(或任何 openai API 兼容模型)、Cohere、Azure、Bedrock、NVIDIA NIM、Hugginface、Mistral、Ollama、Gemini、Vertex、Voyage。
本地和私有 LLM:采取一些措施确保没有数据离开您的计算机并转到 LLM 提供商:不使用 API 密钥,所有密钥都是用户设置的,缓存与其他密钥隔离,传出连接通过过载套接字进行审查,等等。
安装和使用
wdoc
主要是在 Python 3.11.7 上开发的,但我不确定所有可用的版本。如有疑问,请确保您的 Python 版本与此版本匹配。
-
安装:
-
使用 pip:
pip install -U wdoc
-
或者获取特定的 git 分支:
dev
分支:pip install git+https://github.com/thiswillbeyourgithub/wdoc@dev
main
分支:pip install git+https://github.com/thiswillbeyourgithub/wdoc@main
-
您还可以使用 uvx 或 pipx。但是由于我没有使用它们的经验,我不知道这是否会导致缓存等问题。请告诉我您是否测试过它!
- 使用 uvx:
uvx wdoc --help
- 使用 pipx:
pipx run wdoc --help
- 使用 uvx:
-
无论如何,建议尝试使用 安装 pdftotext 并使用 添加 fasttext 支持。
pip install -U wdoc[pdftotext]pip install -U wdoc[fasttext]
-
如果你打算做出贡献,你还需要 commit hooks。
wdoc[dev]
-
-
将后端的 API 密钥添加为环境变量:例如
export OPENAI_API_KEY="***my_key***"
-
Launch 就像使用
wdoc --task=query --path=MYDOC [ARGS]
- 如果由于某种原因失败,可以尝试使用 。如果一切都失败了,请尝试使用 ,或者作为最后的手段克隆这个 repo 并在里面再试一次?不要犹豫,打开一个 issue。
python -m wdocuvx wdoc@latestcd
- 要获得 shell 自动补全:如果您使用的是 zsh:.还规定了 和 。您可以使用 生成自己的 .
eval $(cat shell_completions/wdoc_completion.zsh)bashfishwdoc -- --completion MYSHELL > my_completion_file"
- 不要忘记,如果你使用大量文档(特别是通过递归文件类型),它可能需要很多时间(也取决于并行处理,但你可能会遇到内存错误)。
- 查看 examples.md 以获取 shell 和 python 示例的列表。
- 如果由于某种原因失败,可以尝试使用 。如果一切都失败了,请尝试使用 ,或者作为最后的手段克隆这个 repo 并在里面再试一次?不要犹豫,打开一个 issue。
-
要询问有关本地文档的问题:
wdoc query --path="PATH/TO/YOUR/FILE" --filetype="auto"
- 如果要通过直接加载上一次运行的嵌入来减少启动时间(尽管无论如何都会缓存嵌入):add to the previous command 以将生成的嵌入保存到文件中,并在每次后续调用时替换为。
--saveas="some/path"--loadfrom "some/path"
- 如果要通过直接加载上一次运行的嵌入来减少启动时间(尽管无论如何都会缓存嵌入):add to the previous command 以将生成的嵌入保存到文件中,并在每次后续调用时替换为。
-
有关更多信息,请阅读
wdoc --help
使用 wdoc 编写的脚本
- scripts 文件夹中将提供更多内容
- Ntfy Summarizer:使用 ntfy.sh 自动汇总 Android 手机中的文档
- TheFiche:直接将特定概念的摘要创建为 logseq 页面。
- FilteredDeckCreator:直接从 找到的卡牌中创建 anki 过滤的牌组。
wdoc