LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践
1.
背景
本
qiang~
这两周关注到一个很火的开源文档问答系统
Kotaemon
,从
8
月
28
日至今短短两周时间,
github
星标迅猛增长
10K
,因此计划深挖一下其中的原理及奥秘。
本篇主要是
Kotaemon
的简介信息,涉及到主要特点,与传统文档
RAG
的区别,如何部署、以及效果演示
。
后续内容会针对核心模块进行拆解研读,敬请期待
~
2.
简介
Kotaemon
是一个
RAG UI
页面,主要面向
DocQA
的终端用户和构建自己
RAG pipeline
的开发者
。
2.1
终端用户
1)
提供了一个基于
RAG
问答的简单且最小化的
UI
界面
2)
支持诸多
LLM API
提供商
(
如
OpenAI, Cohere)
和本地部署的
LLM(
如
ollama
和
llama-cpp-python)
2.2
开发者
1)
提供了一个构建
RAG
文档问答
pipeline
的框架
2)
使用
Gradio
开发,基于提供的
UI
可以自定义并查看
RAG pipeline
的运行过程
3.
主要特点
1)
托管自己的
QA Web UI:
支持多用户登录,支持文件私有或公开,支持与他人协助分享
2)
管理
LLM
和
Embedding
模型
:
支持本地
LLM
和流行的
API
提供商
3)
混合
RAG pipeline:
支持全文本和向量的混合检索,以及
re-ranking
来保障检索质量
4)
支持多模态文档:支持对含有图片及表格的
N
多个文档进行问答,支持多模态文档解析
5)
带有高级引文的文档预览
:
系统默认提供具体的引用信息,保障
LLM
回答的准确性。直接在浏览器内的
PDF
查阅器查看引文,并高亮显示。
6)
支持复杂推理方法:使用问题分解来回答复杂
/
多跳问题。支持使用
ReAct
、
ReWoo
及其他
Agent
进行推理
7)
可调节的设置
UI
:调整检索和生成过程的参数信息,包括检索过程和推理过程设置
4.
与传统文档
RAG
的区别
(1)
在
web ui
界面直接
PDF
预览,并通过
LLM
的引用回调方法高亮有关联的句子,极大地有助于仔细检查
LLM
的上下文
(2)
支持复杂推理方法。目标是支持更多的基于
Agent
的推理框架,如问题拆解、多跳问题、
React
、
ReWoo
等
(3)
支持在页面配置中更改
prompt
,也可以调整想要使用的检索和推理模块
(4)
扩展性好,基于
gradio
开发,可轻松添加或删除
UI
组件来自定义
RAG pipeline
5.
安装部署
5.1
终端用户
-
可在
github
的
release
页面下载最新的
kotaemon-app.zip
,并解压缩
-
进入
scripts
,根据系统安装,如
windows
系统双击
run_windows.bat
,
linux
系统
bash run_linux.sh
-
安装后,程序要求启动
ketem
的
UI
,回答
”继续”
-
如果启动,会自动在浏览器中打开,默认账户名和密码是
admin/admin
5.2
开发者
5.2.1
使用
Docker
安装推荐
# docker run -e GRADIO_SERVER_NAME=0.0.0.0 -e GRADIO_SERVER_PORT=7860 -p 7860:7860 -it --rm ghcr.io/cinnamon/kotaemon:latest # |
5.2.2
源码安装
# conda create -n kotaemon python=3.10 conda activate kotaemon # git clone https://github.com/Cinnamon/kotaemon cd kotaemon # pip install -e "libs/kotaemon[all]" pip install -e "libs/ktem" # # ( # python app.py |
5.2.3
应用定制
应用数据默认保存在
./ktem_app_data
文件,如果想要迁移到新机器,只需将该文件夹拷贝即可。
为了高级用户或特殊用途,可以自定义
.env
和
flowsetting.py
文件
(1)flowsetting.py
设置
# KH_DOCSTORE=(Elasticsearch | LanceDB | SimpleFileDocumentStore) # KH_VECTORSTORE=(ChromaDB | LanceDB | InMemory) # KH_REASONINGS_USE_MULTIMODAL=True # KH_REASONINGS = [ "ktem.reasoning.simple.FullQAPipeline", "ktem.reasoning.simple.FullDecomposeQAPipeline", "ktem.reasoning.react.ReactAgentPipeline", "ktem.reasoning.rewoo.RewooAgentPipeline", ] ) |
(2).env
设置
该文件提供另一种方式来设置模型和凭据。
# 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 |
5.2.4
设置本地
LLM
及
Embedding
模型
(1)
推荐
Ollama OpenAI
兼容的服务
# # ollama pull llama3.1:8b ollama pull nomic-embed-text |
(2)
在
Resources
页面中的
LLMs
和
Embedding
分别设置
LLM
和
Embedding
api_key: ollama base_url: http://localhost:11434/v1/ model: |
(3)
使用本地模型用于
RAG
1)
将本地
LLM
和
Embedding
模型设置为
default
2)
将
File Collection
中的
Embedding
设置为本地模型
(
例如
: ollama
3)
在
Retrieval Setting
页面,选择本地模型作为
LLM
相关得分模型。如果你的机器无法同时处理大量的
LLM
并行请求,可以不选中
”
Use LLM relevant scoring
”
4)
现在就可以上传文件进行文档问答体验了。
6.
效果体验
眼过千遍,不如手过一遍
~
本
qiang~
采用源码安装部署,使用
openai
的
LLM
模型
gpt-4o-mini
和
Embedding
模型
text-embedding-3-small(
如何使用免费版本的
openai
进行
api
体验,可以私信联系
~)
。其次,使用
MindSearch
的论文进行测试验证。
6.1
构建文档索引信息
6.1.1
上传文档
6.1.2
使用
simple
推理策略
simple
推理策略对应的
flowsettings.py
中的
FullQAPipeline
。问题
:
“what are the components of MindSearch?”,效果如下:
6.1.3
使用
complex
推理策略
complex
推理策略对应的
flowsettings.py
中的
FullDecomposeQAPipeline
,即将复杂问题拆分为简单子问题。问题
:
“Please describe the performance of MindSearch on both open-source and closed-source datasets.?”
6.1.4
使用
react
推理策略
React
是一种
RAG Agent
技术,将用户的问题进行计划设计,并迭代循环执行,满足特定结束调节。
React
可以结合工具进行调用,如搜索引擎、
Wiki
百科等。问题:
”Tell me somethong about 'University of Science and Technology of China'”
6.1.5
使用
ReWoo
推理策略
ReWoo
也是一种
RAG Agent
技术,第一阶段制订分步计划,第二阶段解决每个分步,也可以使用工具帮助推理过程,完成所有阶段后,
ReWoo
将总结答案。问题:
”Tell me somethong about 'University of Science and Technology of China' and 'shanghai ai Laboratory '”
6.2
构建
GraphRAG
索引信息
Kotaemon
集成了微软此前开源的
GraphRAG
框架,该框架包含图谱及索引构建、图谱检索等步骤。问题
:
“
the author
’
s of this paper
”
7.
总结
一句话足矣
~
本文主要针对开源文档问答系统
Kotaemon
的介绍,包括主要功能特点,与传统文档
RAG
的区别,部署教程以及效果体验等。
目前
Kotaemon
针对中文语言支持不友好,但既然可以通过
ollama
进行部署
LLM
和
Embedding
模型,因此支持中文语言也是相对容易开发集成的。
后续系列会针对该框架中的检索和推理模块做一个详细的源码维度分析,敬请期待
~
如果针对部署过程中存在疑问或部署不成功,或者想免费获取使用
openai
的客官,可私信沟通。
如有问题或者想要合作的客官,可私信沟通。
8.
参考
(1)
Kotaemon
仓库
: https://github.com/Cinnamon/kotaemon