kotaemon README

The project's README from github.com/Cinnamon/kotaemon. As one markdown file: README.md.

kotaemon

An open-source clean & customizable RAG UI for chatting with your documents. Built with both end users and developers in mind.

Preview

Cinnamon%2Fkotaemon | Trendshift

Live Demo #1 | Live Demo #2 | Online Install | Colab Notebook (Local RAG)

User Guide | Developer Guide | Feedback | Contact

Python 3.10+ Code style: black docker pull ghcr.io/cinnamon/kotaemon:latest download Featured|HelloGitHub

Introduction

This project serves as a functional RAG UI for both end users who want to do QA on their documents and developers who want to build their own RAG pipeline.

+----------------------------------------------------------------------------+
| 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)                         |     |     |
|     |     +----------------------------------------------------+     |     |
|     +----------------------------------------------------------------+     |
+----------------------------------------------------------------------------+

For end users

For developers

Key Features

Preview

Installation

If you are not a developer and just want to use the app, please check out our easy-to-follow User Guide. Download the .zip file from the latest release to get all the newest features and bug fixes.

System requirements

  1. Python >= 3.10
  2. Docker: optional, if you install with Docker
  3. Unstructured if you want to process files other than .pdf, .html, .mhtml, and .xlsx documents. Installation steps differ depending on your operating system. Please visit the link and follow the specific instructions provided there.
  1. We support both lite & full version of Docker images. With full version, the extra packages of unstructured will be installed, which can support additional file types (.doc, .docx, ...) but the cost is larger docker image size. For most users, the lite image should work well in most cases.

    • To use the full version.

      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
      
    • To use the full version with bundled Ollama for local / private RAG.

      # change image name to
      docker run <...> ghcr.io/cinnamon/kotaemon:main-ollama
      
    • To use the lite version.

     # change image name to
     docker run <...> ghcr.io/cinnamon/kotaemon:main-lite
    
  2. We currently support and test two platforms: linux/amd64 and linux/arm64 (for newer Mac). You can specify the platform by passing --platform in the docker run command. For example:

    # To run docker with platform linux/arm64
    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. Once everything is set up correctly, you can go to http://localhost:7860/ to access the WebUI.

  4. We use GHCR to store docker images, all images can be found here.

Without Docker

  1. Clone the repository:

    git clone https://github.com/Cinnamon/kotaemon
    cd kotaemon
    
  2. Setup the environment:

  1. Create a .env file in the root of this project. Use .env.example as a template.

    The .env file is there to serve use cases where users want to pre-config the models before starting up the app (e.g. deploy the app on HF hub). The file will only be used to populate the db once upon the first run, it will no longer be used in consequent runs.

  2. (Optional) To enable in-browser PDF_JS viewer, download PDF_JS_DIST then extract it to libs/ktem/ktem/assets/prebuilt.

    pdf-setup
  3. Start the web server:

    python app.py
    
    • The app will be automatically launched in your browser.
    • Default username and password are both admin. You can set up additional users directly through the UI.

    Chat tab

  4. Check the Resources tab and LLMs and Embeddings and ensure that your api_key value is set correctly from your .env file. If it is not set, you can set it there.

Setup GraphRAG

[!NOTE] Official MS GraphRAG indexing only works with OpenAI or Ollama API. We recommend most users to use NanoGraphRAG implementation for straightforward integration with Kotaemon.

Setup Nano GRAPHRAG
  • Install nano-GraphRAG: pip install nano-graphrag
  • nano-graphrag install might introduce version conflicts, see this issue
    • To quickly fix: pip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlib
  • Launch Kotaemon with USE_NANO_GRAPHRAG=true environment variable.
  • Set your default LLM & Embedding models in Resources setting and it will be recognized automatically from NanoGraphRAG.
Setup LIGHTRAG
  • Install LightRAG: pip install git+https://github.com/HKUDS/LightRAG.git
  • LightRAG install might introduce version conflicts, see this issue
    • To quickly fix: pip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlib
  • Launch Kotaemon with USE_LIGHTRAG=true environment variable.
  • Set your default LLM & Embedding models in Resources setting and it will be recognized automatically from LightRAG.
Setup MS GRAPHRAG
  • Non-Docker Installation: If you are not using Docker, install GraphRAG with the following command:

    pip install "graphrag<=0.3.6" future
    
  • Setting Up API KEY: To use the GraphRAG retriever feature, ensure you set the GRAPHRAG_API_KEY environment variable. You can do this directly in your environment or by adding it to a .env file.

  • Using Local Models and Custom Settings: If you want to use GraphRAG with local models (like Ollama) or customize the default LLM and other configurations, set the USE_CUSTOMIZED_GRAPHRAG_SETTING environment variable to true. Then, adjust your settings in the settings.yaml.example file.

Setup Local Models (for local/private RAG)

See Local model setup.

Setup multimodal document parsing (OCR, table parsing, figure extraction)

These options are available:

Select corresponding loaders in Settings -> Retrieval Settings -> File loader

Customize your application

flowsettings.py

This file contains the configuration of your application. You can use the example here as the starting point.

Notable settings
# 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

This file provides another way to configure your models and credentials.

Configure model via the .env file
  • Alternatively, you can configure the models via the .env file with the information needed to connect to the LLMs. This file is located in the folder of the application. If you don't see it, you can create one.

  • Currently, the following providers are supported:

    • OpenAI

      In the .env file, set the OPENAI_API_KEY variable with your OpenAI API key in order to enable access to OpenAI's models. There are other variables that can be modified, please feel free to edit them to fit your case. Otherwise, the default parameter should work for most people.

      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

      For OpenAI models via Azure platform, you need to provide your Azure endpoint and API key. You might also need to provide your developments' name for the chat model and the embedding model depending on how you set up Azure development.

      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
      
    • Local Models

      • Using ollama OpenAI compatible server:

        • Install ollama and start the application.

        • Pull your model, for example:

          ollama pull llama3.1:8b
          ollama pull nomic-embed-text
          
        • Set the model names on web UI and make it as default:

          Models

      • Using GGUF with llama-cpp-python

        You can search and download a LLM to be ran locally from the Hugging Face Hub. Currently, these model formats are supported:

        • GGUF

          You should choose a model whose size is less than your device's memory and should leave about 2 GB. For example, if you have 16 GB of RAM in total, of which 12 GB is available, then you should choose a model that takes up at most 10 GB of RAM. Bigger models tend to give better generation but also take more processing time.

          Here are some recommendations and their size in memory:

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

          Add a new LlamaCpp model with the provided model name on the web UI.

Adding your own RAG pipeline

Custom Reasoning Pipeline

  1. Check the default pipeline implementation in here. You can make quick adjustment to how the default QA pipeline work.
  2. Add new .py implementation in libs/ktem/ktem/reasoning/ and later include it in flowssettings to enable it on the UI.

Custom Indexing Pipeline

(more instruction WIP).

Citation

Please cite this project as

@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

Star History Chart

Contribution

Since our project is actively being developed, we greatly value your feedback and contributions. Please see our Contributing Guide to get started. Thank you to all our contributors!

kotaemon (Cinnamon/kotaemon)

Searching Database…

25.8K ·GitHub
这是什么?Kotaemon 是一个开源的 RAG 工具,用来和自己的文档聊天:它提供一个简洁的网页界面,你可以针对自己的文件提问,既面向最终用户,也面向开发者。
它是需要安装运行的软件,还是写代码用的库?两者兼备:最终用户拿到的是一个开箱即用的应用,界面是极简的问答页面;开发者则可以用它作为框架来搭建自己的 RAG 流程,并在自带的界面上观察运行过程。
怎么把它跑起来?使用推荐的 Docker 镜像(lite 版适合大多数人)并打开 WebUI;也可以不用 Docker:克隆仓库,用 uv 或 conda 配好 Python 3.10+,创建 .env 文件,然后启动 Web 服务。默认登录账号是 admin/admin。
必须要有 OpenAI API 密钥吗,还是可以在本地跑模型?两者都不是必须的:它可以接入 API 服务商(OpenAI、Azure OpenAI、Cohere),也可以通过 ollama 和 llama-cpp-python 完全在本地运行模型,模型文件用来自 Hugging Face Hub 的 GGUF 文件。
可以喂给它哪些文档格式?开箱即用支持 .pdf、.html、.mhtml 和 .xlsx;其他格式比如 .doc 或 .docx 需要额外安装 Unstructured 包——在 Docker 上就得起更重的 full 镜像而不是 lite。
它能在我的 Apple Silicon Mac 上运行吗,还是只支持 x86 机器?可以:Docker 镜像同时提供 linux/amd64 和 linux/arm64(较新的 Mac)两种架构,通过 --platform 参数选择。不用 Docker 的话只需要 Python 3.10+,各操作系统有各自的安装说明。
我的文档和提问能完全留在自己电脑上吗?可以:full 版 Docker 镜像内置了 Ollama,可做本地私有 RAG;本地 GGUF 模型加上本地解析器(Docling、PaddleOCR)能让所有数据都留在你的电脑上。云端 API 是可选的,默认不用。
GraphRAG 那套配置是干嘛的?你可以把默认的检索器换成基于图的 RAG:有 Microsoft GraphRAG(它的索引功能只支持 OpenAI 或 Ollama API),也有更简单的 NanoGraphRAG 和 LightRAG 实现,每一种都通过一个环境变量来开启。
本地模型选多大才适合我的电脑?选一个比可用内存减去约 2 GB 还小的 GGUF 模型——16 GB 内存的机器最多用约 10 GB 的模型。模型越大回答越好但速度越慢;Qwen1.5-1.8B-Chat-GGUF(约 2 GB)是个入门选择。
它能处理扫描版 PDF 和表格吗?可以,通过可选的多模态解析实现:云端 API 有 Azure Document Intelligence 和 Adobe PDF Extract,本地开源方案有 Docling 和 PaddleOCR——在 Settings、Retrieval Settings、File loader 里选择。
接入我自己的 RAG 流程麻烦吗?挺简单的:把一个 .py 文件放进 libs/ktem/ktem/reasoning/ 目录,并在 flowsettings.py 里注册,它就会出现在界面上;示例用的自定义索引流程在 libs/ktem/ktem/index/file/graph 里。
Creator
Cinnamon
Size
44.7 MB
Stars
25.8K
Age
2y
Commits · 90 Days