能与文档聊天的RAG工具kotaemon
最近搞 AI
的项目比较多,正好看到硅基流动在送 Token
,如果你用老苏的邀请链接注册, https://cloud.siliconflow.cn/i/NkUiXVhQ ,咱俩都能得 2000
万 Tokens
,虽然接口有点慢,但是用来测试软件还是挺好用的。
简介
什么是 RAG ?
RAG
(Retrieval-Augmented Generation
)是一种结合了检索(Retrieval
)和生成(Generation
)的人工智能技术框架,主要用于提升自然语言处理(NLP
)模型在处理复杂任务时的性能和准确性。它通过检索外部知识库中的信息,为生成模型提供更丰富的上下文和知识支持,从而生成更准确、更有信息量的内容。
什么是 Kotaemon ?
Kotaemon
是一个开源的基于RAG
(Retrieval-Augmented Generation
)技术的工具,旨在帮助用户与文档进行交互和对话。
主要特点
- 自主托管文档问答(RAG)Web UI:支持多用户登录,可以组织您的文件为私有/公共集合,协作并与他人分享您最喜欢的聊天记录。
- 组织您的 LLM 和嵌入模型:支持本地
LLM
和流行的API
提供商(如OpenAI
、Azure
、Ollama
、Groq
)。 - 混合 RAG 流水线:提供合理的默认
RAG
流水线,结合全文本和向量检索器,并进行重新排序,以确保最佳的检索质量。 - 多模态问答支持:在多个文档上进行问答,支持图表和表格。支持多模态文档解析(在
UI
上可选择的选项)。 - 高级引用与文档预览:系统默认提供详细的引用,以确保
LLM
答案的正确性。在浏览器内的PDF
查看器中直接查看您的引用(包括相关评分),并对低相关性文章的检索管道发出警告。 - 支持复杂推理方法:使用问题分解来回答复杂的多跳问题。支持基于代理的推理,如
ReAct
、ReWOO
和其他代理。 - 可配置设置 UI:可以在
UI
上调整检索和生成过程中的大多数重要方面(包括提示)。 - 可扩展性:基于
Gradio
构建,您可以自由自定义或添加任何UI
元素。此外,我们旨在支持多种文档索引和检索策略。GraphRAG
索引流水线作为示例提供。
Kotaemon
适合希望进行文档管理和问答的终端用户,以及希望构建定制化解决方案的开发者。
准备
因为会用到 LLMs
模型和 Embeddings
模型,所以需要提前准备。下面是可能会用上的模型和工具,请根据需要,选择性进行安装
文章传送门:
本次老苏使用的是 One API
管理的 kimi-free-api
和 Ollama
中安装的nomic-embed-text
安装
在群晖上以 Docker 方式安装。
官方的镜像发布在 ghcr.io
ghcr.io/cinnamon/kotaemon:main-lite
版本是精简版,适合大多数用户。- 若需支持更多文件类型(如
.doc
、.docx
等),可使用ghcr.io/cinnamon/kotaemon:main-full
,代价是docker
镜像大小更大
docker cli 安装
如果你熟悉命令行,可能用 docker cli
更快捷
1 | # 运行容器 |
关于环境变量的简单说明
可变 | 值 |
---|---|
GRADIO_SERVER_NAME |
指定允许从任何 IP 地址访问 Gradio 界面 |
GRADIO_SERVER_PORT |
定义 Gradio 应用程序监听的端口 |
更多环境变量,可以参考官方的 .env.example
文件,地址:https://github.com/Cinnamon/kotaemon/blob/main/.env.example
docker-compose 安装
也可以用 docker-compose
安装,将下面的内容保存为 docker-compose.yml
文件
1 | version: '3' |
然后执行下面的命令
1 | # 新建文件夹 kotaemon 和 子目录 |
运行
初始化需要时间,当在日志中看到下面的内容,说明 kotaemon
已经就绪了
1 | Running on local URL: http://0.0.0.0:7860 |
在浏览器中输入 http://群晖IP:7860
就能看到设置界面
选择 I am an advance user. Skip this.
先直接跳过
添加 LLM 模型
Resources
–> LLMs
–> Add
,这里使用了 One API
管理的 kimi-free-api
LLM name
:例如kimi
LLM vendors
:下拉选择ChatOpenAI
Specification
:填入必要的参数,主要是下面三个,更多参数可以阅读右侧的表格
参数 | 描述 |
---|---|
base_url |
One API 的地址 |
api_key |
One API 的令牌 |
model |
One API 中定义的模型名称 |
1 | base_url: http://192.168.0.197:3033/v1 |
- 勾选
Set default
点 Add LLM
添加成功后,切换到 View
,找到 kimi
点击打开后,找到 Test
按钮
如果显示 Connection success
,说明添加成功了
添加 Embeddings 模型
和添加 LLMs
模型差不多,Resources
–> Embeddings
–> Add
,这里直接使用了 Ollama
管理的 nomic-embed-text
Name
:只是用于区别,所以随便起了一个nomic-embed-text
Vendors
:下拉选择OpenAIEmbeddings
Specification
:填入必要的参数,主要是下面三个,更多参数可以阅读右侧的表格
参数 | 描述 |
---|---|
base_url |
Ollama 的地址 |
api_key |
Ollama 没有令牌,所以这里可以随便输入 |
model |
Ollama 中下载的嵌入文本模型 |
1 | base_url: http://192.168.0.197:11434/v1/ |
- 勾选
Set default
点 Add
添加成功后
切换到 View
,找到 nomic-embed-text
下拉找到 Test
,如果显示 Connection success
,说明添加成功了
一定要测试,确保设置无误,否则有可能上传文档会报错的
1 | enacity.RetryError: RetryError[<Future at 0x7f5330250280 state=finished raised InternalServerError>] |
上传文件
点 Files
进入文件界面,上传一个文件,点 Upload and Index
等待文件索引成功,时间取决于文件大小
也可以在聊天界面快速上传
索引创建成功后,就可以跟文件开始聊天了
默认回答是 英文
的,改成中文后,再次提问
现在的回答是中文了
脑图上点 export
会弹出新窗口
参考文档
Cinnamon/kotaemon: An open-source RAG-based tool for chatting with your documents.
地址:https://github.com/Cinnamon/kotaemonQuick Start - kotaemon Docs
地址:https://cinnamon.github.io/kotaemon/