动手学大模型LLM应用开发之个人知识库助手项目

目录

    • 一、前言
    • 二、项目架构
    • 三、项目搭建运行
    • 四、RAG过程
    • 五、参考资料

一、前言

本项目由datawhale成员开发,主要实现了基于 Datawhale 的现有项目 README 的知识问答,使用户可以快速了解 Datawhale 现有项目情况。
项目地址

二、项目架构

在这里插入图片描述
① LLM 层主要基于四种流行 LLM API 进行了 LLM 调用封装,支持用户以统一的入口、方式来访问不同的模型,支持随时进行模型的切换;

② 数据层主要包括个人知识库的源数据以及 Embedding API,源数据经过 Embedding 处理可以被向量数据库使用;

③ 数据库层主要为基于个人知识库源数据搭建的向量数据库,在本项目中我们选择了 Chroma;

④ 应用层为核心功能的最顶层封装,我们基于 LangChain 提供的检索问答链基类进行了进一步封装,从而支持不同模型切换以及便捷实现基于数据库的检索问答;

⑤ 最顶层为服务层,我们分别实现了 Gradio 搭建 Demo 与 FastAPI 组建 API 两种方式来支持本项目的服务访问。

三、项目搭建运行

git clone https://github.com/logan-zou/Chat_with_Datawhale_langchain.git
cd Chat_with_Datawhale_langchain
# 创建 Conda 环境
conda create -n llm-zszs python==3.9.0
# 激活 Conda 环境
conda activate llm-universe
# 安装依赖项
pip install -r requirements.txt

在windows中安装遇到报错
在这里插入图片描述
这些警告和错误提示表明你在尝试通过HTTPS连接到PyPI(Python Package Index),但连接时出现了SSL错误。这可能是由于网络问题或SSL配置问题引起的。
解决这个问题的一种方法是确保你的网络连接正常,并且你的系统时间和日期设置正确。有时候SSL错误也可能是由于系统时间不准确导致的。

检查下网络,发现我开了代理,关了代理换用清华源镜像下载

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
出现了上图报错,报错显示由于在 Windows 上使用了不支持的库。 uvloop 库不支持在 Windows 平台上使用。

因此换成在linux中安装,这里我用的是windows中的linux子系统wsl。
在这里插入图片描述
如上图,安装发现langchain、langsmith、packaging存在冲突
于是修改requirements.txt,将这几个包不指定版本,让pip自行处理
重新自行安装命令pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述
环境搭建成功!!!

启动服务为本地 API

uvicorn api:app --reload 

运行项目

python run_gradio.py -model_name='chatglm_std' -embedding_model='m3e' -db_path='../data_base/knowledge_db' -persist_path='../data_base/vector_db'

运行成功

在这里插入图片描述

四、RAG过程

该项目实现原理和一般 RAG 项目一样,主要流程如下

1.用户提出问题 Query

2.加载和读取知识库文档

3.对知识库文档进行分割

4.对分割后的知识库文本向量化并存入向量库建立索引

5.对问句 Query 向量化

6.在知识库文档向量中匹配出与问句 Query 向量最相似的 top k 个

7.匹配出的知识库文本文本作为上下文 Context 和问题⼀起添加到 prompt 中

8.提交给 LLM 生成回答 Answer

五、参考资料

链接: llm-universe

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

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

相关文章

《面向云计算的零信任体系第1部分:总体架构》行业标准正式发布

中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准:YD/T 4598.1-2024《面向云计算的零信任体系 第1部分:总体架构》(后简称“总体架构”),并于2024年7月1日正式施行。 该标准由中国信通院牵头&#xf…

【汇编】#6 80x86指令系统其二(串处理与控制转移与子函数)

文章目录 一、串处理指令1. 与 REP 协作的 MOVS / STOS / LODS的指令1.1 重复前缀指令REP1.2 字符串传送指令(Move String Instruction)1.2 存串指令(Store String Instruction)1.3 取字符串指令(Load String Instruct…

【后端】python中字典合并的方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、python中字典简介二、python中字典合并的方法三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言&…

pytorch的基础操作

目录 一、介绍 二、基础操作 1、张量的基础创建 2、随机创建与转换 3、张量的索引 4、张量的切片 5、张量的维度改变 三、官方手册 中文官方手册,可以查 一、介绍 PyTorch是Torch的Python版本,是由Facebook开源的神经网络框架,专门针…

word启动缓慢之Baidu Netdisk Word Addin

word启动足足花了7秒钟,你知道我这7秒是怎么过来的吗? 原因就是我们可爱的百度网盘等APP,在我们安装客户端时,默认安装了Office加载项,不仅在菜单栏上加上了一个丑陋的字眼,也拖慢了word启动速度........ 解…

k8s如何写yaml文件

k8s&&如何写yaml文件 metadataspecresources: 如何设置request和limit? status metadata metadata: 通常用于填写一些对象(如pod、deployment等)的描述信息(类似人的名字、年龄等)。 spec spec: 通常代表着…

Spark-机器学习(7)分类学习之决策树

在之前的文章中,我们学习了分类学习之支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。…

C++证道之路第十三章类继承

一、一个简单的基类 从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。 派生类对象储存了基类的数据成员(派生类继承了基类的实现)。 派生类对象可以使用基类的方法(派生类继承了基类的接口)…

多线程执行List的addAll方法产生的并发问题

问题分析 将查询条件subList分为70个一组,通过CompletableFuture执行异步多线程分批次查询数据库,查询完成后在whenCompleteAsync方法中将结果存储在resultList中。 诡异的情况发生了,查询出来的结果resultList中有10000个数据,…

【经典算法】Leetcode.83删除排序链表中的重复元素(Java/C/Python3/Go实现含注释说明,Easy)

标签:链表 题目描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 原题:LeetCode 83 思路及实现 方式一:双指针 思路 使用快慢双指针遍历链表,快指针用于遍历链表,慢指…

PY32F040单片机产品介绍,LQFP封装,带LCD 驱动器

PY32F040单片机搭载了 Arm Cortex-M0内核,最高主频可达72 MHz,专为高性价比、高可靠性的系统而设计,符合消费市场的基本设计需求。可广泛应用于电机控制、手持设备、PC 外设、以及复杂的数字控制应用等领域。 PY32F040片内集成 UART、I2C、S…

手机空号过滤,提高工作效率

手机空号过滤在多个方面都具有重要的作用。 首先,它对于短信群发商和电话营销商来说至关重要。通过空号过滤,他们可以确保手机号码数据库的准确性和有效性。由于每天都有大量人群因各种原因更换手机号码,导致每个号段中的空号率和手机状态都…

Debian 系统设置SSH 连接时长

问题现象: 通过finalshell工具连接Debian系统远程操作时,总是一下断开一下断开,要反复重新连接 ,烦人! 解决办法: 找到ssh安装目录下的配置文件:sshd_config vi sshd_config : 找到…

【喜报】科大睿智为武汉博睿英特科技高质量通过CMMI3级评估咨询工作

武汉博睿英特科技有限公司是信息通信技术产品、建筑智慧工程服务提供商。其拥有专注于航空、政府、教育、金融等多行业领域的资深团队,及时掌握最新信息通信应用技术,深刻理解行业业务流程,擅于整合市场优质资源,积极保持与高校产…

STM32 SPI通信

一、SPI总线简介 1.1 SPI总线 串口外设接口(Serial Peripheral Interface,SPI)总线是一种同步串行外设接口,允许MCU与各种外围设备进行全双工、同步串行通信 SPI总线有四根通信线: ①SCK(Serial Clock&a…

并发编程中的各类锁

引言 在并发编程中,锁是一种关键的同步机制,用于控制多个线程对共享资源的访问。不同类型的锁在不同的场景下有着不同的适用性和性能特点。本文将探讨几种常见的锁,包括互斥锁、自旋锁、读写锁、悲观锁和乐观锁,并对它们进行详细总…

On evaluating adversarial robustness of large vision language models - 论文翻译

论文链接:https://arxiv.org/pdf/2305.16934 项目代码:https://github.com/yunqing-me/AttackVLM On evaluating adversarial robustness of large vision language models Abstract1 Introduction2 Related work3 Methodology3.1 Preliminary3.2 Transf…

linux的压缩与备份

一、打包 格式&#xff1a;tar -参数 <打包文件名> <打包的目标> 作用&#xff1a;将文件或者目录打包 重要参数&#xff1a;-f 使用归档文件&#xff0c;一定要加上这个参数 -c 新建打包文件 -x 解包文件 -t 可以不用解包就能查看包文件内容 -v 打包和解包时显…

JVM的垃圾回收机制(GC机制)

在Java代码运行的过程中&#xff0c;JVM发现 某些资源不需要再使用的时候&#xff0c;就会自动把资源所占的内存给回收掉&#xff0c;就不需要程序员自行操作了。“自动回收资源”就是JVM的“垃圾回收机制”&#xff0c;“垃圾回收机制”也称"GC机制"。 对于Java代码…

Redux(类似vue中的vuex和pina)

什么是Redux Redux 是React最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia&#xff08;Vuex&#xff09;&#xff0c;可以独立于框架运行 作用&#xff1a;通过集中管理的方式管理应用的状态 为什么要使用Redux&#xff1f; 独立于组件&#xff0c;无视组件之间的层…