LangChain + ChatGLM 实现本地知识库问答

最近有看到可以利用LangChain+OpenAI的API来实现一个问答系统。既然可以将ChatGLM 集成进LangChain,是不是我们可以在完全不使用OpenAI的情况下来是实现一个私有化的本地知识库问答系统的搭建呢?本文将介绍一种可行的方案。

步骤

ChatGLM集成进LangChain工具

生成Embedding

本文使用一篇公开的新闻数据(腾讯2022年第四季度营收1449.5亿元 调整后净利润297.1亿元)来做测试。

切分文本

参照Text Splitters文档,可以选择对应的文本切分器,如果是通用文本的话,建议选择RecursiveCharacterTextSplitter,代码如下:

from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 导入文本
loader = UnstructuredFileLoader("./data/news_test.txt")
# 将文本转成 Document 对象
data = loader.load()
print(f'documents:{len(data)}')

# 初始化加载器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=0)
# 切割加载的 document
split_docs = text_splitter.split_documents(data)
print("split_docs size:",len(split_docs))


打印结果如下:

documents:1
split_docs size: 31


  • chunk_size:每一个分片的最大大小
  • chunk_overlap:相邻的块之间的最大重叠。有一些重叠可以很好地保持块之间的一些连续性(类似于一个滑动窗口)。
生成embedding

目前有两种方式可以生成Embedding数据

  1. 直接使用OpenAIEmbeddings来生成Embedding数据
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain import VectorDBQA
from langchain.document_loaders import UnstructuredMarkdownLoader
from langchain.embeddings.openai import OpenAIEmbeddings
import IPython
import os
from dotenv import load_dotenv
load_dotenv()

os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
# 如果希望通过代理来访问可以配置上
# os.environ["OPENAI_API_BASE"] = os.getenv("OPENAI_API_BASE")

embeddings = OpenAIEmbeddings( )



  1. 使用HuggingFaceEmbeddings来生成Embedding数据
from langchain.vectorstores import Chroma
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
import IPython
import sentence_transformers


embedding_model_dict = {
    "ernie-tiny": "nghuyong/ernie-3.0-nano-zh",
    "ernie-base": "nghuyong/ernie-3.0-base-zh",
    "text2vec": "GanymedeNil/text2vec-large-chinese",
    "text2vec2":"uer/sbert-base-chinese-nli",
    "text2vec3":"shibing624/text2vec-base-chinese",
}

EMBEDDING_MODEL = "text2vec3"
# 初始化 hugginFace 的 embeddings 对象
embeddings = HuggingFaceEmbeddings(model_name=embedding_model_dict[EMBEDDING_MODEL], )
embeddings.client = sentence_transformers.SentenceTransformer(
        embeddings.model_name, device='mps')


两种方式的差别:

  • OpenAIEmbeddings:
    • 使用简单,并且效果比较好;
    • 会消耗openai的token,特别是大段文本时,消耗的token还不少,如果知识库是比较固定的,可以考虑将每次生成的embedding做持久化,这样就不需要再调用openai了,可以大大节约token的消耗;
    • 可能会有数据泄露的风险,如果是一些高度私密的数据,不建议直接调用。
  • HuggingFaceEmbeddings:
    • 可以在HuggingFace模型来进行实验,数据都是在本机上进行计算
    • 需要一定的硬件支持,最好是有GPU支持,不然生成数据可能会非常慢
    • 生成的向量效果可能不是很好,并且HuggingFace上的中文向量模型不是很多。
保存Embedding数据

有多种向量数据库选择,这里选择比较简单的Chroma,因为比较轻量,直接安装库就可使用。

from langchain.vectorstores import Chroma
# 初始化加载器
db = Chroma.from_documents(split_docs, embeddings,persist_directory="./chroma/openai/news_test")
# 持久化
db.persist()


持久化后,可以直接选择从持久化文件中加载,不需要再重新就可使用了,使用方式如下:

db = Chroma(persist_directory="./chroma/news_test", embedding_function=embeddings)


当然也可使用FAISS,使用方式也类似,

  • 持久化
from langchain.vectorstores import FAISS

db = FAISS.from_documents(split_docs, embeddings)
db.save_local("./faiss/news_test")


  • 加载已持久化向量
db = FAISS.load_local("./faiss/news_test",embeddings=embeddings)


试验效果

  • 如果只想使用embedding来计算句子的相似度,可以直接类似下面这样使用:
# 初始化 prompt 对象
question = "2022年腾讯营收多少"

similarDocs = db.similarity_search(question, include_metadata=True,k=4)

[print(x) for x in similarDocs]


最多返回匹配的前4条相似度最高的句子

  • 如果想接入ChatGLM来帮忙做总结和汇总的话,可以如下使用:
from langchain.chains import RetrievalQA
import IPython

retriever = db.as_retriever()
qa = RetrievalQA.from_chain_type(llm=ChatGLM(temperature=0.1), chain_type="stuff", retriever=retriever)
# 进行问答
query = "2022年腾讯营收多少"
print(qa.run(query))


image.png

  • ChatGLM基于ChatGLM 集成进LangChain工具文章中的封装

最终效果可能并不是很好,这可能跟文本切分、embedding生成都有关系,需要再不断调节,但是整体思路和方案是可行的。

总结

本文使用LangChain+ChatGLM来实现一个简单的基于本地知识库的问答系统,可以在完全不使用openai提供的api来完成本地知识库问答系统的搭建。

使用langchain配合chatglm搭建本地的知识库,但是langchain和chatglm是部署在一起的,耦合性比较高

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Langchain和ChatGLM是一种本地知识库和对话语言模型的组合。Langchain是一个用于构建本地知识库的工具,而ChatGLM则是基于Langchain的一个对话语言模型。它们通常一起部署在一起,并且具有较高的耦合性。通过Langchain和ChatGLM的结合,可以实现一个基于本地知识库问答系统。Langchain-ChatGLM项目是一个开源项目,可以在GitHub上找到相关的代码和文档。ChatGLM-6B是一种开源的、支持中英双语的对话语言模型,基于General Language Model (GLM)架构,具有62亿参数。所以,Langchain和ChatGLM是一种用于构建本地知识库并进行问答的工具和模型的组合。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [LangChain + ChatGLM 实现本地知识库问答](https://blog.csdn.net/bruce__ray/article/details/131179563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [chatglm+langchain](https://blog.csdn.net/qq_24729325/article/details/131515519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值