LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践

news/2024/9/23 1:28:26/

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


http://www.ppmy.cn/news/1529096.html

相关文章

MQ(RabbitMQ)笔记

初识MQ 同步调用优缺点 异步调用优缺点 总结&#xff1a; 时效性要求高&#xff0c;需要立刻得到结果进行处理--->同步调用 对调用结果不关心&#xff0c;对性能要求高&#xff0c;响应时间短--->异步调用

Oracle 数据库安装和配置教程

Oracle 数据库是全球领先的企业级数据库解决方案&#xff0c;广泛应用于各种规模的组织。随着 Oracle 版本的更新&#xff0c;安装和配置步骤也逐渐演变。本文将结合最新资料&#xff0c;详细讲解 Oracle 数据库的安装与配置流程&#xff0c;帮助开发者和数据库管理员顺利部署这…

Excel常见操作命令~你值得拥有!

在Excel中&#xff0c;常用的快捷键及其作用对于提高工作效率至关重要。以下是一些常用的Excel快捷键及其详细说明&#xff1a; 1. 基本操作快捷键 快捷键作用Ctrl C复制选定的单元格或区域Ctrl V粘贴复制的内容到选定位置Ctrl X剪切选定的单元格或区域Ctrl S保存当前工作…

vue.config.js devServer中changeOrigin的作用

问题 vue开发时&#xff0c;为了解决前端跨域问题&#xff0c;通常在vue.config.js配置 devServer proxy devServer: {proxy:{/api: {target: http://b.com,changeOrigin: false},}, }官方文档http-proxy options对changeOrigin的解释 option.changeOrigin: true/false, Defa…

【d46】【Java】【力扣】234.回文链表

思路 判断是否是回文&#xff0c;需要&#xff1a;一个指针指向头&#xff0c;一个指针指向尾&#xff0c;两个指针一边向中间靠拢&#xff0c;一边判断数值是否相同 对于单链表&#xff0c;不方便获得pre&#xff0c;如果将节点放进 数组/list &#xff0c;数组/list可以直接…

《深度学习》PyTorch 常用损失函数原理、用法解析

目录 一、常用损失函数 1、CrossEntropyLoss&#xff08;交叉熵损失&#xff09; 1&#xff09;原理 2&#xff09;流程 3&#xff09;用法示例 2、L1Loss&#xff08;L1损失/平均绝对误差&#xff09; 1&#xff09;原理 2&#xff09;用法示例 3、NLLLoss&#xff08;负对…

【STM32系统】基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流)——文末工程资料下载

基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流) 演示视频: 基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流) 前言:本项目实现对STM32的DAC和ADC的程序设计与硬件电路连接实现STM32内部DAC输出电压,并且ADC可以采集电压…

dedecms(四种webshell姿势)、aspcms webshell漏洞复现

一、aspcms webshell 1、登陆后台&#xff0c;在扩展功能的幻灯片设置模块&#xff0c;点击保存进行抓包查看 2、在slideTextStatus写入asp一句话木马 1%25><%25Eval(Request(chr(65)))%25><%25 密码是a&#xff0c;放行&#xff0c;修改成功 3、使用菜刀工具连…