kotaemon:基于 Gradio 的 RAG 文档问答 Web UI 项目

An open-source RAG-based tool for chatting with your documents.

Branch16Tags82
This repository is empty

kotaemon

一款开源、简洁且可定制的 RAG 用户界面,用于与您的文档对话。兼顾终端用户与开发者的使用需求。

Preview

Cinnamon%2Fkotaemon | Trendshift

在线演示 #1 | 在线演示 #2 | 在线安装 | Colab 笔记本(本地 RAG)

用户指南 | 开发者指南 | 反馈 | 联系我们

Python 3.10+ 代码风格:black docker pull ghcr.io/cinnamon/kotaemon:latest 下载量 Featured|HelloGitHub

简介

本项目是一个功能完备的RAG用户界面,既面向希望对自己文档进行问答的终端用户,也面向希望构建自己RAG流水线的开发人员。

+----------------------------------------------------------------------------+
| End users: Those who use apps built with `kotaemon`.                       |
| (You use an app like the one in the demo above)                            |
|     +----------------------------------------------------------------+     |
|     | Developers: Those who built with `kotaemon`.                   |     |
|     | (You have `import kotaemon` somewhere in your project)         |     |
|     |     +----------------------------------------------------+     |     |
|     |     | Contributors: Those who make `kotaemon` better.    |     |     |
|     |     | (You make PR to this repo)                         |     |     |
|     |     +----------------------------------------------------+     |     |
|     +----------------------------------------------------------------+     |
+----------------------------------------------------------------------------+

面向终端用户

  • 简洁清爽的用户界面:专为基于RAG的问答打造的友好交互界面。
  • 支持多种大语言模型(LLMs):兼容主流LLM API提供商(OpenAI、AzureOpenAI、Cohere等)以及本地部署的LLM(通过ollamallama-cpp-python)。
  • 轻松安装:简单的脚本助您快速启动使用。

面向开发者

  • RAG流水线框架:提供构建专属基于RAG的文档问答流水线的工具。
  • 可定制用户界面:借助基于Gradio 构建的界面,直观查看您的RAG流水线运行效果。
  • Gradio主题:如果您使用Gradio进行开发,欢迎试用我们的主题:kotaemon-gradio-theme

核心功能

  • 搭建专属文档问答(RAG)网页界面:支持多用户登录,将文件整理为私有/公开收藏夹,与他人协作并分享您喜爱的对话。

  • 管理您的LLM和嵌入模型:同时支持本地LLM和主流API提供商(OpenAI、Azure、Ollama、Groq)。

  • 混合RAG流水线:默认提供合理的RAG流水线,融合(全文与向量)混合检索器及重排序功能,确保最佳检索质量。

  • 多模态问答支持:对包含图表和表格的多份文档进行问答。支持多模态文档解析(可在界面上选择相应选项)。

  • 带文档预览的高级引用:系统默认提供详细引用,确保LLM回答的准确性。可在浏览器内PDF查看器中直接查看引用(包括相关分数)并高亮显示。当检索流水线返回相关性较低的文章时,会发出警告。

  • 支持复杂推理方法:通过问题分解来解答复杂或多跳问题。支持基于ReActReWOO等智能体的推理。

  • 可配置的设置界面:您可以在界面上调整检索和生成过程的大多数重要参数(包括提示词)。

  • 可扩展性:基于Gradio构建,您可以自由定制或添加任何UI元素。此外,我们致力于支持多种文档索引和检索策略。GraphRAG索引流水线已作为示例提供。

Preview

安装

若您并非开发者,仅希望使用本应用,请查阅我们易于遵循的用户指南。从最新发布版本下载 .zip 文件,以获取所有最新功能和错误修复。

系统要求

  1. Python >= 3.10
  2. Docker:可选,若您选择通过 Docker 安装
  3. Unstructured:如果您需要处理除 .pdf.html.mhtml.xlsx 之外的文件。安装步骤因操作系统而异,请访问链接并按照其中提供的具体说明操作。

通过 Docker 安装(推荐)

  1. 我们支持 lite(轻量版)和 full(完整版)两种 Docker 镜像。full 版本会安装 unstructured 的额外软件包,能够支持更多文件类型(如 .doc.docx 等),但代价是镜像体积较大。对于大多数用户而言,lite 镜像在多数情况下已能满足需求。

    • 如需使用 full 版本:

      docker run \
      -e GRADIO_SERVER_NAME=0.0.0.0 \
      -e GRADIO_SERVER_PORT=7860 \
      -v ./ktem_app_data:/app/ktem_app_data \
      -p 7860:7860 -it --rm \
      ghcr.io/cinnamon/kotaemon:main-full
      
    • 如需使用捆绑了 Ollamafull 版本以实现 本地/私有 RAG

      # 将镜像名称修改为
      docker run <...> ghcr.io/cinnamon/kotaemon:main-ollama
      
    • 如需使用 lite 版本:

     # 将镜像名称修改为
     docker run <...> ghcr.io/cinnamon/kotaemon:main-lite
    
  2. 我们目前支持并测试两种平台:linux/amd64linux/arm64(适用于较新型号的 Mac)。您可以在 docker run 命令中通过 --platform 参数指定平台。例如:

    # 以 linux/arm64 平台运行 docker
    docker run \
    -e GRADIO_SERVER_NAME=0.0.0.0 \
    -e GRADIO_SERVER_PORT=7860 \
    -v ./ktem_app_data:/app/ktem_app_data \
    -p 7860:7860 -it --rm \
    --platform linux/arm64 \
    ghcr.io/cinnamon/kotaemon:main-lite
    
  3. 一切设置正确后,您可以访问 http://localhost:7860/ 来使用 WebUI。

  4. 我们使用 GHCR 存储 Docker 镜像,所有镜像可在此处找到。

不使用 Docker

  1. 克隆仓库:

    git clone https://github.com/Cinnamon/kotaemon
    cd kotaemon
    
  2. 设置环境:

  • 选项 1:使用 uv(推荐)

    uv sync --python 3.10
    source .venv/bin/activate
    
  • 选项 2:使用 conda

    conda create -n kotaemon python=3.10
    conda activate kotaemon
    
    pip install -e "libs/kotaemon[all]"
    pip install -e "libs/ktem"
    
  1. 在项目根目录创建 .env 文件。可将 .env.example 作为模板。

    .env 文件用于满足用户在启动应用前预配置模型的需求(例如在 HF hub 上部署应用)。该文件仅在首次运行时用于填充数据库,后续运行将不再使用。

  2. (可选)若要启用浏览器内 PDF_JS 查看器,请下载 PDF_JS_DIST 并将其解压到 libs/ktem/ktem/assets/prebuilt

    pdf-setup
  3. 启动 Web 服务器:

    python app.py
    
    • 应用将自动在浏览器中启动。
    • 默认用户名和密码均为 admin。您可以通过用户界面直接添加其他用户。

    Chat tab

  4. 检查“资源”选项卡以及“LLM 和嵌入模型”,确保您的 api_key 值已从 .env 文件正确设置。如果未设置,您可以在此处进行设置。

设置 GraphRAG

Note

官方 MS GraphRAG 索引仅适用于 OpenAI 或 Ollama API。 我们建议大多数用户使用 NanoGraphRAG 实现,以便与 Kotaemon 进行简单集成。

设置 Nano GRAPHRAG
  • 安装 nano-GraphRAG:pip install nano-graphrag
  • nano-graphrag 安装可能会导致版本冲突,详见 此问题
    • 快速修复方法:pip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlib
  • 使用 USE_NANO_GRAPHRAG=true 环境变量启动 Kotaemon。
  • 在资源设置中设置您的默认 LLM 和嵌入模型,NanoGraphRAG 将自动识别这些设置。
设置 LIGHTRAG
  • 安装 LightRAG:pip install git+https://github.com/HKUDS/LightRAG.git
  • LightRAG 安装可能会导致版本冲突,详见 此问题
    • 快速修复方法:pip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlib
  • 使用 USE_LIGHTRAG=true 环境变量启动 Kotaemon。
  • 在资源设置中设置您的默认 LLM 和嵌入模型,LightRAG 将自动识别这些设置。
设置 MS GRAPHRAG
  • 非 Docker 安装:如果您不使用 Docker,请通过以下命令安装 GraphRAG:

    pip install "graphrag<=0.3.6" future
    
  • 设置 API 密钥:要使用 GraphRAG 检索器功能,请确保设置 GRAPHRAG_API_KEY 环境变量。您可以直接在环境中设置,或添加到 .env 文件中。

  • 使用本地模型和自定义设置:如果您想将 GraphRAG 与本地模型(如 Ollama)一起使用,或自定义默认 LLM 和其他配置,请将 USE_CUSTOMIZED_GRAPHRAG_SETTING 环境变量设置为 true。然后,在 settings.yaml.example 文件中调整您的设置。

设置本地模型(用于本地/私有 RAG)

请参见本地模型设置

设置多模态文档解析(OCR、表格解析、图表提取)

以下选项可供选择:

在“设置 -> 检索设置 -> 文件加载器”中选择相应的加载器。

自定义您的应用程序

  • 默认情况下,所有应用程序数据都存储在 ./ktem_app_data 文件夹中。您可以备份或复制此文件夹,以便将您的安装转移到新机器上。

  • 对于高级用户或特定使用场景,您可以自定义以下文件:

    • flowsettings.py
    • .env

flowsettings.py

此文件包含应用程序的配置。您可以使用此处的示例作为起点。

值得注意的设置
# setup your preferred document store (with full-text search capabilities)
KH_DOCSTORE=(Elasticsearch | LanceDB | SimpleFileDocumentStore)

# setup your preferred vectorstore (for vector-based search)
KH_VECTORSTORE=(ChromaDB | LanceDB | InMemory | Milvus | Qdrant)

# Enable / disable multimodal QA
KH_REASONINGS_USE_MULTIMODAL=True

# Setup your new reasoning pipeline or modify existing one.
KH_REASONINGS = [
    "ktem.reasoning.simple.FullQAPipeline",
    "ktem.reasoning.simple.FullDecomposeQAPipeline",
    "ktem.reasoning.react.ReactAgentPipeline",
    "ktem.reasoning.rewoo.RewooAgentPipeline",
]

.env

此文件提供了另一种配置模型和凭据的方式。

通过 .env 文件配置模型
  • 或者,您可以通过 .env 文件配置模型,其中包含连接 LLM 所需的信息。该文件位于应用程序的文件夹中。如果您没有看到它,可以创建一个。

  • 目前支持以下提供商:

    • OpenAI

      .env 文件中,设置 OPENAI_API_KEY 变量并填入您的 OpenAI API 密钥,以启用对 OpenAI 模型的访问。还有其他变量可以修改,请根据您的情况进行编辑。否则,默认参数对大多数人来说应该适用。

      OPENAI_API_BASE=https://api.openai.com/v1
      OPENAI_API_KEY=<your OpenAI API key here>
      OPENAI_CHAT_MODEL=gpt-3.5-turbo
      OPENAI_EMBEDDINGS_MODEL=text-embedding-ada-002
      
    • Azure OpenAI

      对于通过 Azure 平台使用的 OpenAI 模型,您需要提供 Azure 终结点和 API 密钥。根据您设置 Azure 开发的方式,您可能还需要提供聊天模型和嵌入模型的部署名称。

      AZURE_OPENAI_ENDPOINT=
      AZURE_OPENAI_API_KEY=
      OPENAI_API_VERSION=2024-02-15-preview
      AZURE_OPENAI_CHAT_DEPLOYMENT=gpt-35-turbo
      AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT=text-embedding-ada-002
      
    • 本地模型

      • 使用 ollama OpenAI 兼容服务器:

        • 安装 ollama 并启动应用程序。

        • 拉取您的模型,例如:

          ollama pull llama3.1:8b
          ollama pull nomic-embed-text
          
        • 在 Web UI 上设置模型名称并将其设为默认:

          Models

      • 使用 GGUFllama-cpp-python

        您可以从 Hugging Face Hub 搜索并下载要在本地运行的 LLM。目前支持以下模型格式:

        • GGUF

          您应该选择大小小于设备内存的模型,并留出约 2 GB 的空间。例如,如果您的设备总内存为 16 GB,其中 12 GB 可用,那么您应该选择占用最多 10 GB 内存的模型。更大的模型往往能提供更好的生成效果,但也需要更长的处理时间。

          以下是一些推荐模型及其内存大小:

        • Qwen1.5-1.8B-Chat-GGUF:约 2 GB

          在 Web UI 上使用提供的模型名称添加新的 LlamaCpp 模型。

添加自定义 RAG 流程

自定义推理流程

  1. 查看 此处 中的默认流程实现。您可以快速调整默认 QA 流程的工作方式。
  2. libs/ktem/ktem/reasoning/ 中添加新的 .py 实现,然后将其包含在 flowssettings 中,以在 UI 上启用它。

自定义索引流程

  • 查看 libs/ktem/ktem/index/file/graph 中的示例实现

(更多说明待完成)。

引用

请按以下方式引用本项目

@misc{kotaemon2024,
    title = {Kotaemon - An open-source RAG-based tool for chatting with any content.},
    author = {The Kotaemon Team},
    year = {2024},
    howpublished = {\url{https://github.com/Cinnamon/kotaemon}},
}

星标历史

Star History Chart

贡献

由于我们的项目正在积极开发中,我们非常重视您的反馈和贡献。请查看我们的贡献指南以开始参与。感谢所有贡献者!

Introduction

一款基于开源RAG技术的文档聊天工具。【此简介由AI生成】

Customize your domain
13225.77 K2.16 KVisit GitHub