AI大模型之旅-langchain结合glm4,faiss构建本地知识库

所需依赖如下:

_libgcc_mutex=0.1=main
_openmp_mutex=5.1=1_gnu
accelerate=0.34.2=pypi_0
aiofiles=23.2.1=pypi_0
aiohappyeyeballs=2.4.0=pypi_0
aiohttp=3.10.5=pypi_0
aiosignal=1.3.1=pypi_0
annotated-types=0.7.0=pypi_0
anyio=4.4.0=pypi_0
attrs=24.2.0=pypi_0
bitsandbytes=0.43.3=pypi_0
blas=1.0=mkl
blinker=1.8.2=pypi_0
bzip2=1.0.8=h5eee18b_6
ca-certificates=2024.7.2=h06a4308_0
certifi=2024.8.30=pypi_0
charset-normalizer=3.3.2=pypi_0
click=8.1.7=pypi_0
contourpy=1.3.0=pypi_0
cuda-cudart=12.4.127=h99ab3db_0
cuda-cudart_linux-64=12.4.127=hd681fbe_0
cuda-nvrtc=12.4.127=h99ab3db_1
cuda-version=12.4=hbda6634_3
cycler=0.12.1=pypi_0
dataclasses-json=0.6.7=pypi_0
distro=1.9.0=pypi_0
einops=0.8.0=pypi_0
expat=2.6.3=h6a678d5_0
faiss-gpu=1.8.0=py3.12_h4c7d538_0_cuda12.1.1
fastapi=0.112.4=pypi_0
ffmpy=0.4.0=pypi_0
filelock=3.15.4=pypi_0
flask=3.0.3=pypi_0
fonttools=4.53.1=pypi_0
frozenlist=1.4.1=pypi_0
fsspec=2024.9.0=pypi_0
gradio=4.43.0=pypi_0
gradio-client=1.3.0=pypi_0
greenlet=3.0.3=pypi_0
h11=0.14.0=pypi_0
httpcore=1.0.5=pypi_0
httpx=0.27.2=pypi_0
huggingface-hub=0.24.6=pypi_0
idna=3.8=pypi_0
importlib-resources=6.4.4=pypi_0
intel-openmp=2023.1.0=hdb19cb5_46306
itsdangerous=2.2.0=pypi_0
jinja2=3.1.4=pypi_0
jiter=0.5.0=pypi_0
joblib=1.4.2=pypi_0
jsonpatch=1.33=pypi_0
jsonpointer=3.0.0=pypi_0
kiwisolver=1.4.7=pypi_0
langchain=0.3.0=pypi_0
langchain-community=0.3.0=pypi_0
langchain-core=0.3.0=pypi_0
langchain-huggingface=0.1.0=pypi_0
langchain-text-splitters=0.3.0=pypi_0
langsmith=0.1.120=pypi_0
ld_impl_linux-64=2.38=h1181459_1
libcublas=12.4.5.8=h99ab3db_1
libfaiss=1.8.0=h046e95b_0_cuda12.1.1
libffi=3.4.4=h6a678d5_1
libgcc-ng=11.2.0=h1234567_1
libgomp=11.2.0=h1234567_1
libstdcxx-ng=11.2.0=h1234567_1
libuuid=1.41.5=h5eee18b_0
markdown-it-py=3.0.0=pypi_0
markupsafe=2.1.5=pypi_0
marshmallow=3.22.0=pypi_0
matplotlib=3.9.2=pypi_0
mdurl=0.1.2=pypi_0
mkl=2023.1.0=h213fc3f_46344
mkl-service=2.4.0=py312h5eee18b_1
mkl_fft=1.3.10=py312h5eee18b_0
mkl_random=1.2.7=py312h526ad5a_0
mpmath=1.3.0=pypi_0
multidict=6.0.5=pypi_0
mypy-extensions=1.0.0=pypi_0
ncurses=6.4=h6a678d5_0
networkx=3.3=pypi_0
numpy=1.26.4=py312hc5e2394_0
numpy-base=1.26.4=py312h0da6c21_0
nvidia-cublas-cu12=12.1.3.1=pypi_0
nvidia-cuda-cupti-cu12=12.1.105=pypi_0
nvidia-cuda-nvrtc-cu12=12.1.105=pypi_0
nvidia-cuda-runtime-cu12=12.1.105=pypi_0
nvidia-cudnn-cu12=9.1.0.70=pypi_0
nvidia-cufft-cu12=11.0.2.54=pypi_0
nvidia-curand-cu12=10.3.2.106=pypi_0
nvidia-cusolver-cu12=11.4.5.107=pypi_0
nvidia-cusparse-cu12=12.1.0.106=pypi_0
nvidia-nccl-cu12=2.20.5=pypi_0
nvidia-nvjitlink-cu12=12.6.68=pypi_0
nvidia-nvtx-cu12=12.1.105=pypi_0
openai=1.44.0=pypi_0
openssl=3.0.15=h5eee18b_0
orjson=3.10.7=pypi_0
outcome=1.3.0.post0=pypi_0
packaging=24.1=py312h06a4308_0
pandas=2.2.2=pypi_0
pillow=10.4.0=pypi_0
pip=24.2=py312h06a4308_0
psutil=6.0.0=pypi_0
pydantic=2.9.0=pypi_0
pydantic-core=2.23.2=pypi_0
pydantic-settings=2.5.2=pypi_0
pydub=0.25.1=pypi_0
pygments=2.18.0=pypi_0
pylzma=0.5.0=pypi_0
pyparsing=3.1.4=pypi_0
pysocks=1.7.1=pypi_0
python=3.12.4=h5148396_1
python-dateutil=2.9.0.post0=pypi_0
python-dotenv=1.0.1=pypi_0
python-multipart=0.0.9=pypi_0
pytz=2024.1=pypi_0
pyyaml=6.0.2=pypi_0
readline=8.2=h5eee18b_0
regex=2024.7.24=pypi_0
requests=2.32.3=pypi_0
rich=13.8.0=pypi_0
ruff=0.6.4=pypi_0
safetensors=0.4.5=pypi_0
scikit-learn=1.5.1=pypi_0
scipy=1.14.1=pypi_0
selenium=4.24.0=pypi_0
semantic-version=2.10.0=pypi_0
sentence-transformers=3.0.1=pypi_0
sentencepiece=0.2.0=pypi_0
setuptools=72.1.0=py312h06a4308_0
shellingham=1.5.4=pypi_0
six=1.16.0=pypi_0
sniffio=1.3.1=pypi_0
sortedcontainers=2.4.0=pypi_0
sqlalchemy=2.0.34=pypi_0
sqlite=3.45.3=h5eee18b_0
sse-starlette=2.1.3=pypi_0
starlette=0.38.4=pypi_0
sympy=1.13.2=pypi_0
tbb=2021.8.0=hdb19cb5_0
tenacity=8.5.0=pypi_0
threadpoolctl=3.5.0=pypi_0
tiktoken=0.7.0=pypi_0
timm=1.0.9=pypi_0
tk=8.6.14=h39e8969_0
tokenizers=0.19.1=pypi_0
tomlkit=0.12.0=pypi_0
torch=2.4.1=pypi_0
torchvision=0.19.1=pypi_0
tqdm=4.66.5=pypi_0
transformers=4.44.0=pypi_0
trio=0.26.2=pypi_0
trio-websocket=0.11.1=pypi_0
triton=3.0.0=pypi_0
typer=0.12.5=pypi_0
typing-extensions=4.12.2=pypi_0
typing-inspect=0.9.0=pypi_0
tzdata=2024.1=pypi_0
undetected-chromedriver=3.5.5=pypi_0
urllib3=2.2.2=pypi_0
uvicorn=0.30.6=pypi_0
websocket-client=1.8.0=pypi_0
websockets=12.0=pypi_0
werkzeug=3.0.4=pypi_0
wheel=0.43.0=py312h06a4308_0
wsproto=1.2.0=pypi_0
xz=5.4.6=h5eee18b_1
yarl=1.11.0=pypi_0
zlib=1.2.13=h5eee18b_1

python代码如下:

from flask import Flask, request, jsonify
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.llms import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from langchain.chains import RetrievalQA
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache# 设置 Flask 应用
app = Flask(__name__)# 设置 LangChain 的缓存
set_llm_cache(InMemoryCache())# 加载ChatGLM模型和Tokenizer
model_name = "/home/ck/llm/ZhipuAI/glm-4-9b-chat/"
embding_name = "/home/ck/llm/iic/nlp_bert_document-segmentation_chinese-base"
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.float16).to(device)# 自定义生成函数
def custom_generate(text, max_length=1000, do_sample=False, temperature=0, top_p=0.95, top_k=50):inputs = tokenizer(text, return_tensors="pt").to(device)output = model.generate(inputs.input_ids, max_length=max_length, do_sample=do_sample, temperature=temperature, top_p=top_p, top_k=top_k)return tokenizer.decode(output[0], skip_special_tokens=True)# 自定义的 Pipeline 类,用于 LangChain
class CustomPipeline:def __init__(self, model, tokenizer):self.model = modelself.tokenizer = tokenizerself.task = "text-generation"def __call__(self, text):generated_text = custom_generate(text)return [{"generated_text": generated_text}]# 将自定义 Pipeline 传入 LangChain
generator = CustomPipeline(model=model, tokenizer=tokenizer)
llm = HuggingFacePipeline(pipeline=generator)# Step 1: 创建 FAISS 知识库
# 假设有一个文本文件作为知识库的来源
loader = TextLoader('/home/ck/PycharmProjects/output.txt')  # 替换为你的知识库文件
documents = loader.load()# 使用文本切分器将长文档切分为小块
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)# 使用 Hugging Face 的嵌入生成器
embeddings = HuggingFaceEmbeddings(model_name=embding_name)# 创建 FAISS 索引
faiss_index = FAISS.from_documents(texts, embeddings)# Step 2: 将 FAISS 知识库集成到 LangChain 的 RetrievalQA
qa_chain = RetrievalQA.from_chain_type(llm=llm,retriever=faiss_index.as_retriever(),  # 将 FAISS 索引用作检索器chain_type="stuff"  # chain_type 决定了如何使用知识库
)# Step 3: 定义 Flask API 路由,查询知识库并生成答案
@app.route("/query", methods=["POST"])
def query_knowledge_base():data = request.get_json()query = data.get("query")if not query:return jsonify({"error": "No query provided"}), 400# 查询知识库并生成答案try:answer = qa_chain.run(query)return jsonify({"query": query, "answer": answer})except Exception as e:return jsonify({"error": str(e)}), 500if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)

测试:
在这里插入图片描述

过程中可能遇到的问题:
问题1:(ckglm4) ck@insight:~/PycharmProjects/ckpractice$ pip install faiss-gpu
ERROR: Could not find a version that satisfies the requirement faiss-gpu (from versions: none)
ERROR: No matching distribution found for faiss-gpu
答案:使用conda安装

conda install -c pytorch faiss-gpu

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

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

相关文章

Leetcode面试经典150题-172.阶乘后的零

给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n 3 输出:0 解释:3! 6 ,不含尾随 0示例 2: 输入:n 5 输出&a…

线程池总结

线程池的执行流程总结: 从创建线程池的参数分析: 1.提交新线程,线程池会在线程池中分配一个空闲线程,用于执行线程任务。 2.参数(int corePoolSize):核心线程数 如果线程池中不存在空闲线程,则线程池会判…

ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge

目录 一、ADB 介绍 二、Windows 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 验证 ADB 安装 4. 配置环境变量 5. 验证全局 ADB 使用 三、macOS 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 配置环境变量 4. 验证 ADB 安装 四、Linux 系统安装 ADB 1. 使用包管理器安装…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】

在上一篇文章中,我们已经理顺了实现流程。 接下来,我们将在UE5中,从头开始一步一步地构建一次流程。 通过这种方法,我们可以借助一个熟悉的开发环境,使那些对着色器不太熟悉的朋友们更好地理解着色器的工作原理。 这篇…

MySQL 主从复制部署与优化

文章目录 前言 在现代数据库管理中,MySQL 主从复制是一种关键技术,用于提高数据的可用性和性能。随着 Docker 容器技术的普及,利用 Docker 搭建 MySQL 主从复制环境已成为一种趋势,它提供了一种简便、高效且可扩展的解决方案。本…

LED 生产电子看板实现工厂精准管理

在当今竞争激烈的制造业领域,工厂的管理效率和精度直接关系到企业的生存与发展。而 LED 生产电子看板的出现,为工厂实现精准管理带来了全新的解决方案。 一、电子看板能够实现对生产进度的精准把控 在传统的工厂管理中,生产进度的了解往往依…

协同编程的艺术:SIDE 让团队协作更上一层楼

一、协同编程的现状 在当前软件开发中,团队协作面临着诸多挑战。沟通不畅常常导致项目进度延迟,版本控制复杂使得代码合并困难重重。传统 IDE 在协同工作方面存在明显的局限性,缺乏实时协作功能,团队成员之间的沟通工具也不够完善…

个人小结(2.0)

离谱,困扰着几周的问题今天偶然发现了解决方法。 问题如下:就是对应的模块引入爆红,但是单击进入引入的文件没有问题 然后它的提示是: 无法找到模块“../views/screen/index.vue”的声明文件。“c:/Users/10834/Desktop/0716_pro…

班主任群发成绩教程,宝藏工具来减负

今天想和大家聊聊班主任的那些事儿。当班主任可真不是一件轻松的工作啊。要备课吧,得精心设计每一个教学环节,从教学目标到教学方法,从课程导入到课后作业,每个细节都得考虑周全。 还要管理班级纪律,处理同学之间的小摩…

2024年NAS个人存储完美方案(最牛方案不服来战)

成果展示 背面展示 正面展示 为什么需要nas 速度优势:使用公共云盘,速度完全依赖公网传输速度。比如家庭300Mbps宽带,使用百度网盘SVip,上传2.5MB/s,下载30MB/s。而使用家用nas,速度完全取决路由器内网性能,基本上达到千兆或2.5GE。内容优势:向公共云盘上传的文件全…

miniQMT量化软件好用吗?miniQMT策略编辑流程步骤详细解答!

miniQMT的策略编辑流程步骤主要包括以下几个方面: 一、准备工作 配置Python环境: 下载并安装Python环境,确保版本兼容。 下载迅投官方提供的xtquant包,并配置到Python的site-packages路径下,以便在Python环境中引入…

如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!

0 前言 LangChain4j 提供了用于以下功能的 Spring Boot 启动器: 常用集成声明式 AI 服务 1 常用集成的 Spring Boot starters Spring Boot 启动器帮助通过属性创建和配置 语言模型、嵌入模型、嵌入存储 和其他核心 LangChain4j 组件。 要使用 Spring Boot 启动…

mybatisplus中id生成策略

使用Tableld(value,type) 1.typeIdType.AUTO自增主键 2.typeIdType.ASSIGN,雪花算法生成 mybatisplus id生成策略全局配置 配置表前缀以及id生成策略 mybatis-plus:global-config:db-config:id-type: autotable-prefix: :t_

OpenAi assistant run always fails when called from PHP

题意:从 PHP 调用时,OpenAI 助理运行总是失败。 问题背景: The runs I create with the openai-php library fail direct in 100% of cases. What am I doing wrong? I do not have much experience with php but this is the test script.…

VS2019配置C++版本的GDAL

VS2019配置GDAL教程 【特别注意】 vs2019编译好的GDAL库是可以在VS2022上面使用的,我这边做项目已经测试过没有问题,所以vs2022使用vs2019编译的gdal没有问题。 【编译版本介绍】 由于GDAL在vs2019源码流程有点复杂,因此我们在这不做讲解…

【Git必看系列】—— 2024年前后端开发必须要知道的GitFlow工作流

自从 Linux 之父Linus Torvalds对当时的版本控制工具感到不满,亲自动手创造了 Git 以来,Git 已经逐渐在版本控制领域占据了主导地位。不论你的代码仓库托管在 GitHub 还是 GitLab,不论你用的是 SourceTree、GitKraken 这样的图形界面&#xf…

华为 HCIP-Datacom H12-821 题库 (25)

🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1.以下哪些事件会导致 IS-IS 产生一个新的 LSP? A、邻接 Up 或Down B、引入的 IP 路由发送变…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.1-2.2

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)2.1 为什么要进行实例探究?(Why look at case studies?&…

PyTorch深度学习快速入门教程【土堆】基础知识篇

Juptyer 版本: Python 3.9.19Pytorch 2.4.1 (pytorch0) C:\Users\25694>conda install nb_conda_kernels(pytorch0) C:\Users\25694>jupyter notebook使用conda环境的pytorch: 成功解决python.exe无法找到程序入口 无法定位程序输入点 shifte…

【Python语言初识(一)】

一、python简史 1.1、python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面),可以调…