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 # 访问ui地址:http://localhost:7860/ |
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" # 更新环境变量文件.env,如API key # (可选) 如果想浏览器内部展示PDF,可以下载PDF_JS viewer,解压到libs/ktem/ktem/assets/prebuilt目录 # 开启web服务,并使用admin/admin登录 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) # 是否启用多模态QA KH_REASONINGS_USE_MULTIMODAL=True # 添加新的推理pipeline或修改已有的 KH_REASONINGS = [ "ktem.reasoning.simple.FullQAPipeline", "ktem.reasoning.simple.FullDecomposeQAPipeline", "ktem.reasoning.react.ReactAgentPipeline", "ktem.reasoning.rewoo.RewooAgentPipeline", ] ) |
(2).env设置
该文件提供另一种方式来设置模型和凭据。
# 可以设置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 |
5.2.4设置本地LLM及Embedding模型
(1)推荐Ollama OpenAI兼容的服务
#安装ollama并启动程序,可参考https://github.com/ollama/ollama #拉取模型 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: llama3.1:8b (for llm) | nomic-embed-text (for embedding) |
(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
LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践的更多相关文章
- 精通Spring 4.x 企业应用开发实战 文档链接总结
Spring在线文档 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle
- 开源的API文档工具框架——Swagger简介
初次接触Swagger是在2017年5月,当时公司正好要对整套系统架构进行重新设计,有同事推荐用这个技术框架来规范后台接口的API文档.当时因为架构重构,涉及改造的技术点太多,一时也就没太多精力,把S ...
- 开源免费的文档协作系统 onlyoffice平台轻松部署
请移步至此,更详细:http://blog.csdn.net/hotqin888/article/details/79337881 ONLYOFFICE是一个免费的.开源的企业办公套件,用于在线组织团 ...
- 接口文档管理神器RAP2安装和部署
目录 一 RAP2 二 RAP2 安装需要的环境 2. 1 Node.js 安装: 2. 2 Mysql 5.7+ 安装 2 .3 Redis 安装见文章 2. 4 后端 rap2-delos 安装 ...
- IdentityServer4 实战文档
一.前言 IdentityServer4实战这个系列主要介绍一些在IdentityServer4(后文称:ids4),在实际使用过程中容易出现的问题,以及使用技巧,不定期更新,谢谢大家关注.这些问题. ...
- Alibaba高并发业务秒杀系统落地实战文档,已实践某大型秒杀场景
前言: 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深 ...
- API 文档管理工具 (Yapi) Docker Compose部署指南
前言介绍 Yapi 由 YMFE 开源,旨在为开发.产品.测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建.发布.维护 API. 权限管理 YApi 成熟的团队管理扁平化项目权限配置满足各类企 ...
- 《Java开发学习大纲文档》V7.0
<Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...
- 阿里P7整理“硬核”面试文档:Java基础+数据库+算法+框架技术等
现在的程序员越来越多,大部分的程序员都想着自己能够进入大厂工作,但每个人的能力都是有差距的,所以并不是人人都能跨进BATJ.即使如此,但身在职场的我们一刻也不能懈怠,既然对BATJ好奇,那么就要朝这个 ...
- C# 在Word文档中生成条形码
C# 在Word文档中生成条形码 简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书 ...
随机推荐
- 可视化—D3学习笔记小小案例记录一下
D3全称是Data-Driven Documents数据驱动文档,是一个开源的javascript库,可以用于数据可视化图形的创建,该库更接近底层,与 g2.echarts 不同,d3 能直接操作 s ...
- [oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算
和python玩耍 Python 回忆 上次 了解shell环境中的命令 命令 作用 whoami 显示当前用户名 pwd 显示当前文件夹 ls 列出当前文件夹下的内容 python3 仿佛进入大于号 ...
- oeasy 教您玩转 linux 之 010302 火狐浏览器 firefox
我们来回顾一下 上一部分我们都讲了什么? oneko xeyes 这次看看这个火狐 火狐 看看当前版本 看看是否可以更新 如果需要更新就更新 firefox -v apt search f ...
- AI/机器学习(计算机视觉/NLP)方向面试复习1
1. 判断满二叉树 所有节点的度要么为0,要么为2,且所有的叶子节点都在最后一层. #include <iostream> using namespace std; class TreeN ...
- RPA京麦咚咚批量发送消息
京麦咚咚发送消息,首先我们需要确定给谁发,发送什么内容 给谁发:可以传入京东用户名.京东订单号.咚咚将通过此条件进行搜索进入会话框 发送什么内容:批量发送信息给不同的用户,比如给不同的订单用户发送其相 ...
- 【SQL】 牛客网SQL训练Part3 较难难度
获取当前薪水第二多的员工的emp_no以及其对应的薪水salary 请你查找薪水排名第二多的员工编号emp_no.薪水salary.last_name以及first_name,不能使用order by ...
- 【微信小程序】 自定义组件
创建微信小程序组件 在小程序中创建组件: 1.项目根目录中创建[components]目录,存放自定义组件 2.进入components目录,给组件创建一个组件目录 3.右键组件目录,选择[创建Com ...
- 家庭局域网中电脑唤醒 —— WOL远程唤醒(python实现)
相关: https://blog.csdn.net/hih30250/article/details/136342258 在WOL介绍里说过WOL数据包的最简格式是由6个字节的255和目标计算机的48 ...
- L-BFGS-B(Limited-memory Broyden–Fletcher–Goldfarb–Shanno )算法理解 —— 内存受限的拟牛顿法 —— 数值优化算法
本文主要讲下个人对数值优化算法中几种常见算法的理解. 什么是优化算法? 给出函数f(X),现在要求 min f(X) 时的X值,这就是最优化问题. 1. 共轭梯度法 方程:A*x=b,A矩阵为对称正定 ...
- 在 MindSpore 中 dataset_sink_mode 的设置对算法的性能有多少影响呢???
参考代码: https://www.cnblogs.com/devilmaycry812839668/p/14971668.html dataset_sink_mode=True 时,我们可以理解是 ...