当前位置: 首页 > news >正文

超短代码实现!!基于langchain+chatglm3+BGE+Faiss创建拥有自己知识库的大语言模型(持续更新)本人python版本3.11.0 windows环境

前言

众所周知,大语言模型在落地应用时会遇到各种各样的问题。而其中模型的“致幻性”是非常可怕。目前主流之一的玩法就是通过知识库对回答范围进行限制。

项目介绍

本来想等langchain-ChatChat大佬们的0.3.0版本。等待是折磨的,那不如在等待的时候,自己来瞎折腾玩玩。
为了快速跑通,目前大家比较喜欢的就是用langchain来把Embedding模型和向量数据库和LLM模型串联起来。借用清华的图片,就像下面这样:
在这里插入图片描述

安装依赖

本人python版本3.11.0
transformers
langchain-community
unstructured
faiss-cpu

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple   langchain-community unstructured  faiss-cpu

代码

1.通过embedding模型和Faiss对输入语句和知识库内容匹配

from langchain_community.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
from langchain_community.vectorstores import FAISS# 文件路径
file_path       = '资料文件路径'# 加载文档
loader          = UnstructuredFileLoader(file_path=file_path)
docs            = loader.load()# 按字符分割文档
text_splitter   = CharacterTextSplitter(chunk_size=500, chunk_overlap=200)
docs            = text_splitter.split_documents(docs)# 加载预训练的句子嵌入模型
model_name = "embedding模型路径"
model_kwargs = {"device": "cuda"}
encode_kwargs = {"normalize_embeddings": True}
embeddings = HuggingFaceBgeEmbeddings(model_name=model_name, model_kwargs=model_kwargs, encode_kwargs=encode_kwargs
)
vector_store    = FAISS.from_documents(docs, embeddings)query            = "提出你的问题"docs             = vector_store.similarity_search(query, k=5)
context          = [doc.page_content for doc in docs]prompt           = f'根据以下内容:\n{context}\n,回答用户的问题:\n{query}\n'
print(prompt)

2.生成的prompt导入LLM模型(本文以glm3为例)

from transformers import AutoTokenizer, AutoModel
import os
current_length = 0
past_key_values, history = None, []
for response, history, past_key_values in model.stream_chat(tokenizer, prompt, history=history, top_p=1,temperature=0.01,past_key_values=past_key_values,return_past_key_values=True):print(response[current_length:], end="", flush=True)current_length = len(response)
print("")

3.报错

raise pickle.UnpicklingError(UNSAFE_MESSAGE + str(e)) from None
_pickle.UnpicklingError: Weights only load failed. Re-running torch.load with weights_only set to False will likely succeed, but it can result in arbitrary code execution.Do it only if you get the file from a trusted source. WeightsUnpickler error: [enforce fail at C:\cb\pytorch_1000000000000\work\c10\core\impl\alloc_cpu.cpp:72] data. DefaultCPUAllocator: not enough memory: you tried to allocate … bytes.

其实就是显存爆了,毕竟embedding也是吃显存的,这再加个glm模型,12G显存不炸才怪。

待更新~

相关文章:

  • Enzo Life Sciences Cortisol(皮质醇) ELISA kit
  • 阿里云服务器使用教程_2024建站教程_10分钟网站搭建流程
  • 通义千问1.5(Qwen1.5)大语言模型在PAI-QuickStart的微调与部署实践
  • selenium 4.17正式发布,这几项更新值得关注
  • Python测试框架pytest介绍用法
  • 安卓面试题 11-20
  • Unity 动画(旧版-新版)
  • 【ARM 嵌入式 编译系列 10.5 -- .linkonce 段详细介绍】
  • OpenHarmony教程指南—事件的订阅和发布
  • ospf虚链路实验简述
  • vue2 elementui 封装一个动态表单复杂组件
  • Neo4J
  • 数据库_关系代数的运算
  • Oracle存储过程干货(一):存储过程基础
  • 双体系Java学习之算术运算符,赋值运算符,关系运算符
  • [笔记] php常见简单功能及函数
  • Apache的基本使用
  • crontab执行失败的多种原因
  • java2019面试题北京
  • JavaScript设计模式与开发实践系列之策略模式
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • XForms - 更强大的Form
  • 初探 Vue 生命周期和钩子函数
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前嗅ForeSpider教程:创建模板
  • 突破自己的技术思维
  • 小程序01:wepy框架整合iview webapp UI
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 智能合约Solidity教程-事件和日志(一)
  • 智能网联汽车信息安全
  • Semaphore
  • 从如何停掉 Promise 链说起
  • #HarmonyOS:基础语法
  • #QT项目实战(天气预报)
  • #前后端分离# 头条发布系统
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)jdk与jre的区别
  • .net framework profiles /.net framework 配置
  • .Net MVC + EF搭建学生管理系统
  • .NET Reactor简单使用教程
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 获取url的方法
  • .Net接口调试与案例
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Autowired标签与 @Resource标签 的区别
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [20161101]rman备份与数据文件变化7.txt
  • [dart学习]第四篇:函数
  • [Hive] INSERT OVERWRITE DIRECTORY要注意的问题
  • [java进阶]——方法引用改写Lambda表达式
  • [JS设计模式]Prototype Pattern
  • [Linux] PXE批量装机