基于langChain 的privateGPT 文档问答 研究

news/2024/12/17 15:30:43/

参考: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 26match 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 osfrom 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 Chromafrom 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.ppmy.cn/news/90644.html

相关文章

「实在RPA·制造业数字员工」助力制造业加「数」发展

作为世界制造大国,制造行业一直是国家经济发展的重要载体。2023年度政府工作报告将制造业摆在突出位置,指出要加快建设现代化产业体系,将围绕制造业重点产业链,集中优质资源合力推进关键核心技术攻关。国资委机械院创新中心主任宋…

快手上市后首次盈利,直播电商业务成造血利器

5月22日盘前,快手业绩还没有发布,股价却先涨为敬,中信证券、彭博、中金公司等多家机构给出超预期业绩的预测。盘后公布的业绩确实超过市场的一致预期,市场在今天也给出正面回应,股价再次上扬,最高点达57.10…

最快实现一个自己的扫地机

​ 作者:良知犹存 转载授权以及围观:欢迎关注微信公众号:羽林君 或者添加作者个人微信:become_me 扫地机介绍 扫地机器人行业本质是技术驱动型行业,产品围绕导航系统的升级成为行业发展的主旋律。按功能划分&a…

python基于协同过滤推荐算法的电影观后感推荐管理系统的设计

本课题所设计的影单管理系统,使用B/S架构,Python语言进行开发,它的优点代码不能从浏览器查看,保密性非常好,比其他的影单管理更具安全性。Python还容易修改和调试,毕竟影视是在不断发展过程中,难…

C++知识第三篇之继承

C继承 继承是面向对象编程的重要特征,是对类设计层次的复用 文章目录 C继承一.介绍1.继承定义2.继承方式3.class与struct 二.作用域1.成员变量2.成员函数 三.赋值转换1.给基类对象赋值2.给基类对象指针赋值 四.派生类的默认函数五. 其他1.友元2.静态 六.继承1.单继承…

教学设计、教案与学案

一、教学设计 (一)教学设计的定义 什么是教学设计?概括一下国内外不同说法,大体可以明确为:教学设计是一个系统化规划教学系统的过程,是根据教学对象和教学目标,确定合适的教学起点与终点&…

【业务功能篇03】Springboot+POI 带图片的导出Excel

继前面介绍的 Springboot+mybatis-plus+POI实现表单数据导出Excel 这篇实现功能介绍,后期业务又有新的导出需求,就是在导出表单数据的同时,在表单下面位置,放入对应一个业务的图片数据,这些图片数据,就是结合表格的数据,在前端的表格下面的位置展示的,比如针对时间-数量…

三位一体,新华三绿洲3.0数据平台聚焦五大提升

如何有效发挥出数据要素的价值?--这已成为行业用户在数字化转型和智能化升级中的一道必答题。 从2020年《关于构建更加完善的要素市场化配置体制机制的意见》首次明确“数据”成为五大生产要素之一,到去年底《中共中央、国务院关于构建数据基础制度更好…