基于langChain 的privateGPT 文档问答 研究

news2024/11/28 5:18:17

参考:gihtub代码 https://github.com/imartinez/privateGPT
官网

privateGPT可以在断网的情况下,借助GPT和文档进行交互,有利于保护数据隐私。

privateGPT可以有四个用处:
1.增强知识管理:私有LLMs自动化,将大量非结构化数据组织
2.提高用户体验:可以粗粒用户查询请求提供私人的基于上下文相关的恢回复
3.创新
4.提高工作效率

LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序

安装

llama-cpp-python-0.1.48安装报错

 Could not build wheels for llama-cpp-python, , which is required to install pyproject.toml-based projects

搜索(结果较少):
从文章: 升级gcc解决编译llama-cpp-python错误发现是gcc/g++版本过低所致,但是博主环境是ubuntu.

搜索到文章 centos:安装gcc g++知道默认centos7 yum安装的是4.8.5

总结:

解决方案centos gcc/g++升级到11
参考:centos7 升级gcc到11.2.0

注意:编译安装耗时较久

执行

python ingest.py 报错version `GLIBCXX_3.4.29‘ not found的问题


OSError: xxxx/lib/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by xxxx/python3.9/site-packages/llama_cpp/libllama.so)

如何解决version `GLIBCXX_3.4.29‘ not found的问题

默认路径下的libstdc++.so.6缺少GLIBCXX_3.4.29

发现是

版本低了

ll  /xxx/lib/libstdc++.so.6

在这里插入图片描述
改为指向6.0.29

提取数据:
python ingest.py

在这里插入图片描述

python privateGPT.py执行查询

语法错误

  File "/data1/Projects/privateGPT/privateGPT.py", line 26
    match model_type:
          ^
SyntaxError: invalid syntax

是python3.10语法

参考:https://github.com/imartinez/privateGPT/issues/89

修改代码为:

if model_type == "LlamaCpp":
        llm = LlamaCpp(model_path=model_path, n_ctx=model_n_ctx, callbacks=callbacks, verbose=False)
elif model_type == "GPT4All":
        llm = GPT4All(model=model_path, n_ctx=model_n_ctx, backend='gptj', callbacks=callbacks, verbose=False)
else:
        print(f"Model {model_type} not supported!")
        exit;

query报错:
unknown token 忽视掉 https://github.com/imartinez/privateGPT/issues/77

输出乱码
在这里插入图片描述
拉取最新代码后解决

总结

缺点:
1.模型比较局限,只能选择 GPT4All-J 类型的模型,性能高的开源模型暂时无法兼容在这里插入图片描述 https://gpt4all.io/index.html在这里插入图片描述

2.中文文档
embedding模型用中文向量,但是问答结果要还是英文,要么是没有意义的文字

shibing624/text2vec-base-chinese

参考:https://zhuanlan.zhihu.com/p/630223486
在这里插入图片描述

在这里插入图片描述

3.内存管理有问题,第xx个问题报错内存不足,待解决
ggml_new_tensor_impl: not enough space in the context’s memory pool (needed 8355506480, available 8342642000)

4.仅使用cpu
。。。待解决

完整代码

不持久化文档,完整代码:

import os
 

from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.llms import GPT4All, LlamaCpp
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.document_loaders import TextLoader
loader = TextLoader('./source_documents/xxx.txt',encoding='utf-8')

from langchain.indexes import VectorstoreIndexCreator
from langchain.chains import RetrievalQA
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
 
from langchain.document_loaders import UnstructuredFileLoader
from langchain.chains.question_answering import load_qa_chain
model_path = 'xxx/ggml-gpt4all-j-v1.3-groovy.bin'
callbacks = [StreamingStdOutCallbackHandler()]
llm = GPT4All(model=model_path, backend='gptj', callbacks=callbacks, verbose=False)
chain = load_qa_chain(llm, chain_type="stuff")

chunk_size = 500
chunk_overlap = 50
text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)

documents =  loader.load()
texts = text_splitter.split_documents(documents)

embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2" )

db = Chroma.from_documents(texts, embeddings)
retriever = db.as_retriever()

qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True)
query = "what is tame?"
res = qa(query)
answer, docs = res['result'], res['source_documents']

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

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

相关文章

《Spring Guides系列学习》guide26 - guide30

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

numpy库报错has no attribute ‘_no_nep50_warning‘的解决

本文介绍在Python中,numpy库出现报错module numpy has no attribute _no_nep50_warning的解决方法。 一次,在运行一个Python代码时,发现出现报错module numpy has no attribute _no_nep50_warning,如下图所示。 其中,这…

华为nova11系列:一个月的深度体验感受,告诉你值不值得入手

作为一个追求时尚风格的年轻人, nova系列手机一直是我的关注重点。nova 11 Pro发布之后,独特少见的11号色一下子就戳中了我,于是第一时间我给我自己和我老婆分别下单了一台nova 11和nova 11 Pro。 作为主力机深度使用一个月后,可以…

如何做好建筑行业的信息化建设?

如何做好建筑行业的信息化建设? 首先,我们来了解一下,什么是信息化转型? 信息化转型是指企业或组织通过应用信息技术,以提高业务效率和创新能力,实现组织战略目标的过程。 随着数字技术的发展&#xff0…

把字节大佬花3个月时间整理的软件测试面经偷偷给室友,差点被他开除了···

写在前面 “这份软件测试面经看起来不错,等会一起发给他吧”,我看着面前的面试笔记自言自语道。 就在这时,背后传来了leder“阴森森”的声音:“不错吧,我可是足足花了三个月整理的” 始末 刚入职字节的我收到了大学室…

Junit常见用法

一.Junit的含义 Junit是一种Java编程语言的单元测试框架。它提供了一些用于编写和运行测试的注释和断言方法,并且可以方便地执行测试并生成测试报告。Junit是开源的,也是广泛使用的单元测试框架之一。 二.Junit常用注解 1.Test 表示执行此测试用例 T…

代码随想录训练营Day51| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

目录 学习目标 学习内容 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 学习目标 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 学习内容 300.最长递增子序列 300. 最长递增子序列 - 力扣(LeetCode)https…

便携式水质检测仪应用范围

随着环境污染的加剧,人们对水质检测的关注越来越多。传统的水质检测仪器往往只能测定单一参数,难以全面准确地反映水质情况。而多参数水质检测仪可以实现同时测定多个参数,为水质检测提供了更加全面准确的数据。它采用多种先进的技术&#xf…

STM32【H7】理论——MPU、Cache

文章目录 1. MPU - 内存保护单元 1. MPU - 内存保护单元 MPU:(Memory Protection Unit,内存保护单元),早在 STM32F1 和 F4 芯片上面也是有这个功能的,但是基本用不上。但是到了 H7 就得用上了,因为要设置 Cache; MPU的作用: 将 memory map&a…

医疗健康元宇宙仿真场景为治疗提供个性化方案

虚拟现实VR元宇宙是一种基于VR虚拟现实制作的全新交互平台,可以为用户提供沉浸式的体验。随着人们对医院就诊服务要求不断提高,借助VR元宇宙平台,将医生为医生、护士和患者提供了一个全新的交流和治疗场景,对提高诊疗水平和服务体…

「实在RPA·税务数字员工」助力税务乘上数字化转型快车

中共中央办公厅国务印发《关于进一步深化税收征管改革的意见》表示:着力建设以服务纳税人缴费人为中心、以发票电子化为改革突破口、以税收大数据为驱动力的具有高集成功能、高安全性能、高应用效能的智慧税务。2023年实现从经验式执法向科学精确执法转变&#xff1…

k8s滚动更新

1.编写一个yaml文件 vi deployment-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: labels:app: nginxname: nginxnamespace: default spec:replicas: 3progressDeadlineSeconds: 600 #表示在这个时间段内,如果 Deployment 的 Pod 没有完成更新&…

EtherCAT运动控制卡开发教程之python

众所周知,Python作为一门面向对象的新兴开发语言,具有非常完善的基础代码库,更注重实用,同时代码可读极强,编写完程序即可直接运行,被越来越多的人广泛将它用于机器视觉和自动化控制。 今天正运动技术与大…

第三十七章 扩展知识点

1、setState (1). setState(stateChange, [callback])------对象式的setState1.stateChange为状态改变对象(该对象可以体现出状态的更改)2.callback是可选的回调函数, 它在状态更新完毕、界面也更新后(render调用后)才被调用(2). setState(updater, [callback])------函数式的…

敏捷专题:新一代的汽车软件研发

过去,买车属于一锤子买卖,但近年来智能制造、新能源汽车等概念的狂飙突进下,个性化、定制化、智能化的新车型正倍速来到消费者面前,不到20万元就能买到各大车企搭载了智能座舱和智能驾驶功能的产品。 ▲智能座舱 众所周知&#xf…

(一)微服务中间键工作原理——nacos客户端服务注册原理说明及源码解读

前言 本节内容我们主要介绍一下中间键nacos的客户端服务注册原理及其源码解读,便于我们理解nacos作为服务注册中心的具体实现。在springcloud的微服务体系中,nacos客户端的注册是通过使用spring的监听机制ApplicationListener实现的。学习本节内容&…

golang常见导致panic的场景

1、越界 常见有数组越界和字符串越界 2、空指针引用 直接引用空指针结构体的字段会引发panic,但调用成员方法里如果没引用结构体的字段不会引发panic 3、断言失败 4、map操作错误 map未初始化,可读不可写。 map的value如果是结构体指针&#xf…

G0第21章 :gin框架介绍、RESTful API、Gin渲染

G0第21章 :gin框架 01 内容介绍 web本质 Web是基于HTTP协议进行交互的应用网络Web就是通过使用浏览器/APP访问的各种资源 package mainimport ("fmt""net/http" )func sayHello(w http.ResponseWriter, r *http.Request){_, _ fmt.Fprintln(…

MKS SERVO4257D 闭环步进电机_系列1 产品简介

第1部分 产品概述 1.1 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口,RS485接口和CAN接口,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈,有…

《深入理解计算机系统》读书笔记1.1-1.5

1.1信息就是位上下文 只由ASCLL字符构成的文件称为文本文件,所有其他文件都称为二进制文件。 系统中的所有的信息都由一串比特表示。区分不同数据对象的唯一方法是读到这些数据对象时的上下文。 1.2程序被其他程序翻译成不同的格式 预编译,编译&#xf…