Knowledge-QA-LLM: 基于本地知识库+LLM的开源问答系统

news2024/9/28 13:47:58

⚠️注意:后续更新,请移步README

Knowledge QA LLM

SemVer2.0

  • 基于本地知识库+LLM的问答系统。该项目的思路是由langchain-ChatGLM启发而来。
  • 缘由:
    • 之前使用过这个项目,感觉不是太灵活,部署不太友好。
    • 借鉴如何用大语言模型构建一个知识问答系统中思路,尝试以此作为实践。
  • 优势:
    • 整个项目为模块化配置,不依赖lanchain库,各部分可轻易替换,代码简单易懂。
    • 除需要单独部署大模型接口外,其他部分用CPU即可。
    • 支持常见格式文档,包括txt、md、pdf, docx, pptx, excel等等。当然,也可自定义支持其他类型文档。

TODO

  • 完善解析office文档接口及单元测试
  • 完善PDF提取接口及单元测试
  • 完善图像内容提取接口及单元测试
  • 完善LLM接口
  • 完善UI
  • 合并基于关键词搜索和基于向量搜索两种方法

整体流程

  • 解析文档并存入数据库
    ExtractText
    Embedding
    Store
    文档
    sentences
    Embeddings
    DataBase
  • 检索并回答问题
    Embedding
    Search
    Query
    Embeddings
    Database
    Context
    Prompt
    LLM
    Answer

使用

  1. 下载和部署模型

    1. 下载moka-ai/m3e-small模型,放到assets/models/m3e-small目录下,用于向量化文本内容。
    2. 单独配置好chatglm2-6b的接口,接口启动参考:ChatGLM2-6B API。具体使用方式可参考:knowledge_qa_llm/llm/chatglm2_6b.py
    3. 将部署好的llm_api写到配置文件knowledge_qa_llm/config.yaml中的llm_api_url字段下。
  2. 安装运行环境

    pip install -r requirements.txt --no-cache-dir
    
  3. 运行

    streamlit run webui.py
    
  4. UI Demo

  5. CLI Demo

🛠 所用工具

  • 文档解析:extract_office_content, rapidocr_pdf, rapidocr_onnxruntime
  • 提取特征向量:moka-ai/m3e-small
  • 向量存储:sqlite
  • 向量检索:faiss
  • UI: streamlit>=1.24.0

📂 文件结构

.
├── assets
│   ├── db                  # 存放向量数据库
│   ├── models              # 放置提取embedding的模型
│   └── raw_upload_files
├── knowledge_qa_llm
│   ├── __init__.py
│   ├── config.yaml         # 配置文件
│   ├── file_loader         # 处理各种格式的文档
│   ├── llm                 # 大模型接口,大模型需要单独部署,以接口方式调用
│   ├── utils
│   └── vector_utils        # embedding的存取和搜索
├── LICENSE
├── README.md
├── requirements.txt
├── tests
├── cli.py
└── webui.py                # 基于streamlit的UI实现

更新日志

  • 2023-07-29 v0.0.4 update:
    • 基于streamlit==1.25.0优化UI
    • 优化代码
    • 录制UI GIF demo
  • 2023-07-28 v0.0.3 update:
    • 完成文件解析部分
  • 2023-07-25 v0.0.2 update:
    • 规范现有目录结构,更加紧凑,提取部分变量到config.yaml
    • 完善说明文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTF学习路线指南(附刷题练习网址)

前言: PWN,Reverse:偏重对汇编,逆向的理解; Gypto:偏重对数学,算法的深入学习; Web:偏重对技巧沉淀,快速搜索能力的挑战; Mic:则更为复杂&…

devDept Eyeshot 2024 预告-Update-Crack

即将发布的版本 开发商在一个动态的环境中运作,事情可能会发生变化。本页提供的信息旨在概述 devDept 软件产品的总体方向。它仅供参考,不应作为做出任何决定性的依据。devDept Eyeshot 2024软件产品描述的任何特性或功能的开发、发布和时间安排仍由 dev…

css实现渐变边框动画

渐变边框动画 1、实现效果2、实现代码 1、实现效果 2、实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Hexo的Fluid主题中自定义iconfont图标

Hexo的Fluid主题介绍 Hexo是一个快速、简洁且高效的博客框架。 Hexo使用Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 Fluid是Hexo中一个优雅的主题&#xff0c;这是一款Material Design风格的He…

提取渥太华大学机械故障敏感特征,再利用决策树分类(Python代码)

该数据集是从渥太华大学采集的轴承振动信号&#xff0c;这些信号是在时间变化的转速条件下收集的。数据集包含4个不同引擎的每个引擎的12秒信号数据。采样频率为10000 代码主要流程&#xff1a; 数据导入与预处理&#xff1a; 通过scipy.io.loadmat()函数从"dataset.mat&q…

docker配置文件挂载(容器数据管理)

目录 数据卷&#xff08;容器数据管理&#xff09;什么是数据卷数据集操作命令创建和查看数据卷挂载数据卷案例案例-给nginx挂载数据卷案例-给MySQL挂载本地目录 总结 数据卷&#xff08;容器数据管理&#xff09; 在之前的nginx案例中&#xff0c;修改nginx的html页面时&#…

教雅川学缠论05-线段

线段需要满足下面4个条件&#xff1a; 1.是由3条笔&#xff0c;或者3条以上组成&#xff0c;同笔一样&#xff0c;线段也是有方向的 2.如果线段起始于向上笔&#xff0c;则终止与向上笔&#xff08;一定不会终止与向下笔&#xff09; 3.如果线段起始于向下笔&#xff0c;则终止…

Python接口自动化测试框架运行原理及流程

这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文总结分享介绍接口测试框架开发&#xff0c;环境使用python3selenium3unittestddtrequests测试框…

Themis 国库建设计划启动,开启去中心化新征程

在未来的金融领域&#xff0c;去中心化金融&#xff08;DeFi&#xff09;正在成为一种重要的趋势。在这股DeFi热潮中&#xff0c;作为Filecoin 生态下的一颗璀璨明珠&#xff0c;Themis 上线仅2个月&#xff0c;多项数据便稳居Filecoin-FVM榜首&#xff0c;TVL更是牢牢处于File…

wxWidgets 打开文件对话框wxFileDialog

wxFileDialog dialog(this, _("Open file"), wxEmptyString, wxEmptyString); if (dialog.ShowModal() wxID_OK) { wxString strPath dialog.GetPath(); } 效果图&#xff1a;

小莫计数摸高训练器:让孩子健康成长的好帮手

现在孩子们的生活方式越来越单一&#xff0c;很多孩子缺乏运动&#xff0c;喜欢在手机上看视频、玩游戏&#xff0c;导致身体素质下降。为了让孩子更好地锻炼身体&#xff0c;我最近入手了一款小莫计数摸高训练器&#xff0c;这是个很实用的儿童锻炼辅助器。 小莫计数摸高训练器…

【JAVASE】循环结构

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 循环 1. 循环结构1.1 while 循环1.2 bre…

无涯教程-jQuery - Scale方法函数

Scale 效果可以与show/hide/toggle一起使用。这会使元素缩小或增长一个百分比因子。 Scale - 语法 selector.hide|show|toggle( "scale", {arguments}, speed ); 这是所有参数的描述- direction - 方向。可以是"both"&#xff0c;"垂…

【UE5】快速认识入门

目录 &#x1f31f;1. 快速安装&#x1f31f;2. 简单快捷键操作&#x1f31f;3. 切换默认的打开场景&#x1f31f;4. 虚幻引擎术语 &#x1f31f;1. 快速安装 进入Unreal Engine 5官网进行下载即可&#xff1a;UE5 &#x1f4dd;官方帮助文档 打开后在启动器里创建5.2.1引擎…

Optitrack下飞控刷px4固件并进行参数配置(视觉vision定位适用)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一:寻找固件二&#xff1a;QGC配置参数2.1&#xff1a;飞控初始化配置2.2&#xff1a;利用视觉定位作为位置反馈 三&#xff1a;PID调试/飞行日志查看 前言 参…

WIZnet W6100-EVB-Pico DHCP 配置教程(三)

前言 在上一章节中我们讲了网络信息配置&#xff0c;那些网络信息的配置都是用户手动的去配置的&#xff0c;为了能跟电脑处于同一网段&#xff0c;且电脑能成功ping通板子&#xff0c;我们不仅要注意子网掩码&#xff0c;对于IP地址主机位和网络位的划分&#xff0c;而且还要注…

级联选择框

文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖&#xff0c;并 npm i 导入…

【RTT驱动框架分析01】-pin/gpio驱动分析

0gpio使用测试 LED测试 #define LED1_PIN GET_PIN(C, 1) void led1_thread_entry(void* parameter) {rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);while(1){rt_thread_delay(50); //delay 500msrt_pin_write(LED1_PIN, PIN_HIGH);rt_thread_delay(50); //delay 50…

漏洞发现-操作系统之漏洞探针类型利用修复(42)

主要包括四个部分&#xff0c; 系统漏洞发现的的意义&#xff1a;应用是基于操作系统的&#xff0c;针对的操作系统&#xff0c;如果漏洞本身就有问题&#xff0c;就不需要对特定的网站特定的漏洞寻找&#xff0c;因为网站是寄生在服务器上&#xff0c;而服务器丢失就可以帮助…

Sentinel dashboard的使用;Nacos保存Sentinel限流规则

Sentinel dashboard的使用 往期文章 Nacos环境搭建Nacos注册中心的使用Nacos配置中心的使用Sentinel 容灾中心的使用 参考文档 Sentinel alibaba/spring-cloud-alibaba Wiki GitHub 限流结果 下载sentinel-dashboard github地址&#xff1a;Sentinel/sentinel-dashboar…