LangChain + Embedding + Chromdb,关联使用ChatGLM的本地搭建训练平台教程

一.介绍

    OpenAI 在国内用户注册会遇到各种阻力,目前可行的方法是使用本地数据集的功能实现联网搜索并给出回答,提炼出TXT、WORD 文档里的内容。
    现在主流的技术是基于强大的第三方开源库:LangChain

文档地址:🦜️🔗 Langchain

​    这个库目前非常活跃,每天都在迭代,已经有 22k 的 star,更新速度飞快。
    LangChain 是一个用于开发由语言模型驱动的应用程序的框架。他主要拥有 2 个能力:

  1. 可以将 LLM 模型与外部数据源进行连接

  2. 允许与 LLM 模型进行交互

LLM 模型:Large Language Model,大型语言模型

1.1 基础功能

LLM 调用

  • 支持多种模型接口,比如 OpenAI、Hugging Face、AzureOpenAI ...

  • Fake LLM,用于测试

  • 缓存的支持,比如 in-mem(内存)、SQLite、Redis、SQL

  • 用量记录

  • 支持流模式(就是一个字一个字的返回,类似打字效果)

Prompt管理,支持各种自定义模板

拥有大量的文档加载器,比如 Email、Markdown、PDF ...

对索引的支持

  • 文档分割器

  • 向量化

  • 对接向量存储与搜索,比如 Chroma、Pinecone、Qdrand

Chains

  • LLMChain

  • 各种工具Chain

  • LangChainHub

1.2 必知概念

相信大家看完上面的介绍多半会一脸懵逼。不要担心,上面的概念其实在刚开始学的时候不是很重要,当我们讲完后面的例子之后,在回来看上面的内容会一下明白很多。

但是,这里有几个概念是必须知道的。

1.3 Text Spltters 文本分割

顾名思义,文本分割就是用来分割文本的。为什么需要分割文本?因为我们每次不管是做把文本当作 prompt 发给 Langchian ,embedding 功能都是有字符限制的。

比如 我们将一份300页的 pdf 发给 LangChian,让他进行总结,这里就需要使用文本分割器去分割我们 loader 进来的 Document。

1.4 Vectorstores 向量数据库

因为数据相关性搜索其实是向量运算。所以,不管我们是使用 openai api embedding 功能还是直接通过向量数据库直接查询,都需要将我们的加载进来的数据 Document 进行向量化,才能进行向量运算搜索。转换成向量也很简单,只需要我们把数据存储到对应的向量数据库中即可完成向量的转换。

官方也提供了很多的向量数据库供我们使用。

https://python.langchain.com/en/latest/modules/indexes/vectorstores.html

1.5 Chain 链

我们可以把 Chain 理解为任务。一个 Chain 就是一个任务,当然也可以像链条一样,一个一个的执行多个链。​​

1.6 Embedding

用于衡量文本的相关性。这个也是 LangChain 能实现构建自己知识库的关键所在。

他相比 fine-tuning 最大的优势就是,不用进行训练,并且可以实时添加新的内容,而不用加一次新的内容就训练一次,并且各方面成本要比 fine-tuning 低很多。

二.实战

    通过上面的必备概念大家应该已经可以对 LangChain 有了一定的了解,但是可能还有有些懵。

视频教程:

LangChain接入本地数据实操_哔哩哔哩_bilibiliLangChain接入本地数据实操, 视频播放量 8725、弹幕量 0、点赞数 288、投硬币枚数 109、收藏人数 974、转发人数 200, 视频作者 灵镜实验室, 作者简介 连接科技与生活 | 透过热闹看门道,相关视频:LangChain: 使用AI连接数据源的时代已经到来了!,langchain-chatglm:本地私有化部署企业专有大语言模型,建立企业的私有知识库,利用LangChain和国产大模型ChatGLM-6B实现基于本地知识库的自动问答,LangChain + OpenAI 5分钟实现自然语言SQL数据挖掘,LangChain + GLM =本地知识库,Streamlit + LangChain - 10分钟创建AI Web应用,PDF聊天机器人,LangChain03-九个经典用例:聊天、数据分析、评价系统等,OpenAI + LangChain + Spark - 基于自然语言的海量企业级数据查询与分析,13分钟解读LangChain(精译中字),5分钟学会搭建本地知识库聊天机器人(基于GPT4+Llamaindex+LangChain)https://www.bilibili.com/video/BV18X4y1t79H/?spm_id_from=333.337.search-card.all.click

注意:这个视频只是快速查看本次实战搭建本地知识库实操的demo,其中有很多细节是略过的,切记不能直接效仿。

2.1 搭建本地ChatGLM

项目地址:GitHub - THUDM/ChatGLM-6B: ChatGLM-6B:开源双语对话语言模型 | An Open Bilingual Dialogue Language Model

官网介绍:

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。

第一步,本地安装 Python

这一步暂略,可以自行下载安装 Python 环境。

Python 下载地址:Download Python | Python.org

注意:安装 >9 以上版本,建议安装 3.93.17。

安装手册:

CentOS 7 的 Python2 升级成 Python 3.9.17_python 3.9.17 下载_查里王的博客-CSDN博客

第二步,下载项目程序包

  • 下载地址见附件,直接下载下来并解压。我这里解压到 :/root/chatgpt/ChatGLM-6B-main

ChatGLM-6B-main,下载附件包如下:

 

第三步,下载模型包 chatglm(14GB存储空间)

下载地址:GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型

备选地址:THUDM/chatglm-6b at main

注意:海外的huggingface针对国内的IP是封锁的,无法直接下载,可以使用我存放在百度企业网盘里的源码包;

注意:百度企业网盘不让上传14GB的数据集;百度网盘单次只能上传4GB,由于个人没有开通网盘,所以只能通过公网下载;

官网介绍:

ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGLM 相同的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

注意:下载后放到第二步程序包下,自行创建目录 chatglm-6b,如下:

#cd /root/.cache/huggingface/hub/models--THUDM--chatglm-6b/
yum -y install gcc-c++
pip install --upgrade pip setuptools wheel
pip install hnswlib langchain chromadb urllib3==1.26.6 sentence_transformers unstructured tiktoken gradio mdtex2html sentencepiece accelerate torch cpm_kernels protobuf transformers

注意:建议更新pip的源,别用阿里云,速度奇慢无比,推荐用中科大或者豆瓣的源地址作为PIP库;

Python pip更换升级源_更新pip的源_查里王的博客-CSDN博客

第四步,运行网页版 demo

vim 修改一下web_demo.py的配置

vim /root/chatgpt/ChatGLM-6B-main

 模型默认是访问huggingface的在线库,必须更改为本地的chatglb-6b的离线库的路径;

  • 如果本地有GPU,可以使用 half().cuda();

  • 如果本地没有GPU,就需要修改成 float();

执行如下命令,运行网页版本的 demo,如下:

cd /root/chatgpt/ChatGLM-6B-main
python web_demo.py

 程序会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体验大大提升。注意,由于国内 Gradio 的网络访问较为缓慢,启用 demo.queue().launch(share=True, inbrowser=True) 时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动。

 第五步,测试网页版程序

浏览器打开地址 并访问,输入问题,可以看到 ChatGLM 会给予回复。

 2.2 搭建本地数据切片向量化 Embeddings + ChromaDB

把Langchain和中文向量文本字符集下载到本地目录,并进行解压

unzip /root/db/LangChainTest-main.zipunzip /text2vec-base-chinese.zip

修改# vim docIndex.py的脚本

cd /root/db/LangChainTest-mainvim docIndex.py

1.将model_name = 'xxxxxx'换成解压路径,例如:/root/db/text2vec-base-chinese

2.将embeddings_model_name = '/root/db/text2vec-base-chinese'

embeddings = HuggingFaceEmbeddings(model_name='/root/db/text2vec-base-chinese')也修改成解压的路径

执行 docIndex.py,将txt文本内容进行向量化入库到chromaDB中

最后,把main注释掉,取消以下的内容注释

if __name__ == "__main__":#main()embeddings_model_name = '/root/db/text2vec-base-chinese'embeddings = HuggingFaceEmbeddings(model_name='/root/db/text2vec-base-chinese')db = Chroma(persist_directory=persist_directory, embedding_function=embeddings, client_settings=CHROMA_SETTINGS)print(db.similarity_search("产品线划分是什么样的?"))

 可以输出内容的即表示正确(由于客户提供的文档签署了保密协议,我这里就不贴图了)

三.LangChain 调用 ChatGLM

修改main.py中的embeddings的模型地址

vim /root/db/LangChainTest-main/main.py

将model_name修改成/root/db/text2vec-base-chinese

if __name__ == '__main__':embeddings = HuggingFaceEmbeddings(model_name='/root/db/text2vec-base-chinese')db = Chroma(persist_directory=persist_directory, embedding_function=embeddings, client_settings=CHROMA_SETTINGS)retriever = db.as_retriever(search_kwargs={"k": target_source_chunks})#llm = OpenAI(model_name="text-ada-001", n=2, best_of=2)llm = ChatGLM()prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。如果无法从中得到答案,请说 "根据已知信息无法回答该问题" 或 "没有提供足够的相关信息",不允许在答案中添加编造成分,答案请使用中文。已知内容:{context}问题:{question}"""promptA = PromptTemplate(template=prompt_template, input_variables=["context", "question"])chain_type_kwargs = {"prompt": promptA}qa = RetrievalQA.from_chain_type(llm=llm, retriever=retriever, chain_type="stuff",chain_type_kwargs=chain_type_kwargs, return_source_documents=True)while True:query = input("\n请输入问题: ")if query == "exit":breakres = qa(query)answer, docs = res['result'], res['source_documents']print("\n\n> 问题:")print(query)print("\n> 回答:")print(answer)for document in docs:print("\n> " + document.metadata["source"] + ":")

最后的结果,就会提示:请输入问题,表示搭建本地库成功!

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

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

相关文章

MySQL必知必会2

第六章 过滤数据 文章目录 第六章 过滤数据6.1 使用where子句mysql> select prod_name ,prod_price -> from products-> where prod_price 2.5; 6.2 where子句操作符6.2.1 检查单个值mysql> select prod_name,prod_price-> from products-> where prod_name…

谷歌浏览器打包扩展程序和导入扩展程序

需求: 由于FQ限制,无法使用谷歌商店,现需将已安装的谷歌浏览器插件打包,发给其他人的电脑,加载该插件。 一、打包扩展程序 (1)打开谷歌浏览器 -> 点击右上方设置按钮 -> 更多工具 ->…

谷歌(chrome)浏览器扩展程序

今天来给大家介绍几个Chrome的插件 一、vue调试插件 一定要把开发者模式给打开,否则插件不会生效 链接:https://pan.baidu.com/s/1ynLtegGUg7ll3KgqTjo_lg 提取码:n4lv 下载下来直接使用 输入这个网址进入到chrome的扩展程序页面 chrome://…

回顾2019年5个重大宕机事件

任何时候发生网络服务中断,都会对全球业务造成极大的影响和破坏,而且还会导致收入和声誉的重大损失。尽管应用程序交付依赖于许多网络服务提供商(ISP),但它也越来越依赖于面向网络的服务的大型且复杂的生态系统&#x…

.NET周报 【3月第3期 2023-03-19】

国内文章 记一次 .NET某汽车零件采集系统 卡死分析 https://www.cnblogs.com/huangxincheng/p/17214154.html 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,…

.NET周报 【5月第2期 2023-05-14】

国内文章 XUnit数据共享与并行测试 https://www.cnblogs.com/podolski/p/17388602.html 在单元或者集成测试的过程中,需要测试的用例非常多,如果测试是一条一条过,那么需要花费不少的时间。从 V2 开始,默认情况下 XUnit 自动配置并…

chatgpt赋能python:Python的SEF优化:提高网站排名的最佳实践

Python的SEF优化:提高网站排名的最佳实践 在今天的数字时代,每个人都想在搜索引擎结果页面(SERP)中排名靠前,因为这会增加他们的品牌知名度和流量,Python的SEF(搜索引擎优化)成为了…

chatgpt赋能python:Python怎样打LN:从入门到精通

Python怎样打LN:从入门到精通 Python 是一种优秀的编程语言,被广泛运用于人工智能、大数据分析、云计算、Web 开发等领域。LN(Link Network)则是一种常见的网站营销和SEO技巧,用于获取高质量的外链,提升网…

chatgpt赋能python:Python总数——探索最流行的编程语言

Python总数——探索最流行的编程语言 Python是一种高级编程语言,设计简单、易于学习和使用。它通过简洁的语法和优雅的设计,成为业界最流行的编程语言之一。在本文中,我们将探索Python的总数,了解它在编程世界中的地位。 什么是…

chatgpt赋能python:Python数据访问:解锁数据的无限可能

Python数据访问:解锁数据的无限可能 Python是一种强大的编程语言,它拥有卓越的数据处理和分析能力。通过Python,你可以很容易地访问各种数据源,并利用其丰富的数据处理库或第三方库在数据上进行分析和统计。无论是数据科学、人工…

chatgpt赋能python:Python获取API:一个开发者的终极指南

Python获取API:一个开发者的终极指南 随着现代软件开发中的不断进步,API已经成为了大量开发者日常工作的主要组成部分。作为一种快速、可靠的数据交互方式,API能够将信息从一个系统传递到另一个系统,使得数据在不同软件之间的交互…

chatgpt赋能python:Python收集数据的介绍

Python收集数据的介绍 Python是一个多功能的编程语言,其拥有强大的数据收集和分析功能。为了充分利用Python的数据处理和挖掘功能,一些优秀的数据收集工具被开发出来。在本文中,我们将介绍如何使用Python收集数据,并介绍一些常用…

chatgpt赋能python:Python如何抓取数据

Python如何抓取数据 介绍 Python是一种功能强大的编程语言,它被广泛使用于网络抓取和数据分析。无论您是想要从网站上抓取数据,还是使用API抓取数据,Python都是一种非常适合的工具。在本文中,我们将介绍Python如何抓取数据&…

chatgpt赋能python:Python如何作弊?

Python如何作弊? Python作为一门强大的编程语言,不仅仅用于开发各种应用,也可以为作弊提供很多便利。因此,本文将着重介绍Python在作弊方面的应用。 利用Python进行数据分析作弊 Python有丰富的数据分析库,在测验、…

Hugging Face 每周速递: Space 支持创建模版应用、Hub 搜索功能增强、BioGPT-Large 还有更多...

每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」,本期 Hugging News 有哪些有趣的消息…

AI 读心术来了,准确率高达 82%?论文已刊登在 Nature!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) AI 的潜力有多大?现如今,读心术就要来了:人类无须张口,你的所想,AI 都知道。更为重要的是,这是 AI 首次通过非侵入式的方法学会了…

“机器人三定律”问世 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 3 月 29 日,在 7 年前的今天,中国共享单车市场规模达到 12.3 亿元,用户规模达到 0.28 亿人。共享单车,这是一款高…

chatgpt赋能Python-python_def

Python 9009:了解Python高效编程的秘密 如果你是一名程序员,那么你一定知道Python。Python是一种广泛使用的高级编程语言,具有易学易用、跨平台、可扩展等优点。而Python 9009则是Python最新的版本,是为了增强程序员的代码编写效…

亚马逊广告转化率这么低怎么办?

2020年已经过去了3/4,你今天的指标完成了吗?为什么你的广告投入这么多,转化率还是这么低?转化率是是我们卖家最关心的点,因为转化率和订单挂钩,亚马逊广告的转化率多少才算合格呢?下面我就来简单讲一下。 举…

什么是亚马逊listing,分析listing流量来源,怎么优化listing

什么是亚马逊listing,分析listing流量来源,怎么优化listing。想做亚马逊电商的,首先你了解什么listing吗?这里,我解答一下,listing是亚马逊的一个产品介绍页面,记住一个商品只有一个listing。说…