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

news2024/9/20 23:17:00

所需依赖如下:

_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 = model
        self.tokenizer = tokenizer
        self.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)}), 500

if __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.coloradmin.cn/o/2150391.html

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

相关文章

Web开发:ABP框架3——入门级别的接口增删改查实现原理

一、上节回顾 运用了ABP框架&#xff0c;使用了EFcore进行增删改查 二、程序的入口 代码解说&#xff1a; public class Program // 定义程序主类 {public async static Task<int> Main(string[] args) // 主方法&#xff0c;返回状态码{// 配置Serilog日志Log.Logger…

如何给zip文件设置自动加密,保护压缩包不被随意打开

ZIP是日常生活和工作中经常用到的压缩文件格式&#xff0c;对于重要的文件&#xff0c;我们往往还会设置打开密码&#xff0c;保护压缩包不被随意打开。 如果每次压缩文件都要设置一次密码&#xff0c;操作久了还是有点麻烦&#xff0c;那有没有一种方法&#xff0c;只要压缩文…

数据库系统原理与应用【笔记总结】

笔记链接&#xff1a;CongSec电脑端可能需要科学上网&#xff0c;手机端不用 笔记部分展示&#xff1a; 笔记列表形式&#xff1a; 数据库系统概述 数据与信息 数据信息数据处理 数据管理技术的发展 人工管理阶段文件系统阶段数据库系统阶段 数据库系统的基本概念 数据库数据…

C#自定义曲线绘图面板

一、实现功能 1、显示面板绘制。 2、拖动面板&#xff0c;X轴、Y轴都可以拖动。 3、显示面板缩放&#xff0c;放大或者缩小。 4、鼠标在面板中对应的XY轴数值。 5、自动生成的数据数组&#xff0c;曲线显示。 6、鼠标是否在曲线上检测。 二、界面 拖动面板 鼠标在曲线上…

2024年亲测好用的四大在线翻译工具大盘点!

在互联网技术飞速发展的今天&#xff0c;各种在线翻译工具应运而生&#xff0c;它们不仅能够帮助我们跨越语言障碍&#xff0c;还能让我们更加便捷地获取世界各地的信息。接下来&#xff0c;我将结合自己的实际体验&#xff0c;为大家详细介绍几款优秀的在线翻译工具&#xff0…

15.多线程概述一(下篇)

目录 1.进程与线程 2.实现多线程方式一&#xff1a;继承Thread类【应用】 3.实现多线程方式二&#xff1a;实现Runnable接口【应用】 4.实现多线程方式三&#xff1a;实现Callable接口【应用】 5.三种实现方式的对比与套路 6.设置和获取线程名称/线程对象【应用】 7.线程优先级…

芹菜麦饭的做法

蒸煮时间&#xff1a; 芹菜麦饭的蒸煮时间因做法和食材的不同而有所差异&#xff0c;但一般在‌8到15分钟‌之间。具体蒸煮时间取决于芹菜的大小、切段的长度以及蒸锅的火力等因素。例如&#xff0c;将裹好面粉的芹菜段放入蒸锅&#xff0c;大火烧开后转中火蒸10~15分钟&#x…

LeetCode118:杨辉三角

题目链接&#xff1a;118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution {public:vector<vector<int>> generate(int numRows) {vector<vector<int>> dp(numRows);vector<int> temp(numRows);for (int i 0; i &…

数据中台建设(六)—— 数据开发-提取数据价值

数据开发-提取数据价值 数据开发涉及的产品能力主要包括三部分&#xff1a;离线开发、实时开发和算法开发。 离线开发主要包括离线数据的加工、发布、运维管理&#xff0c;以及数据分析、数据探索、在线查询和及时分析相关工作。实时开发主要涉及数据的实时接入和实时处理。算…

Jmeter 线程组解析

1.seUp线程组 一种特殊的 threadGroup &#xff0c;可用于执行预测试操作&#xff1b;它的行为完全像一个正常的线程组元件&#xff0c;不同的是执行顺序。 它会在普通线程组执行之前被触发。 应用场景&#xff1a; 测试数据库操作功能时&#xff0c;用于执行打开数据库连接的…

邮件营销:助力企业转换客户,提升曝光率

邮件营销&#xff1a;独立站推广的关键策略 在独立站推广的众多方法中&#xff0c;邮件营销占据着重要地位。本文将为刚刚接触独立站运营的新手介绍邮件营销的基础知识。在信息泛滥的时代&#xff0c;开设一个店铺和成功地引流并不意味着一劳永逸。对于绝大多数中小型电商企业…

基于SpringBoot+Vue+MySQL的养老院管理系统

系统展示 管理员界面 家属界面 系统背景 随着全球人口老龄化的加速&#xff0c;养老院管理面临着前所未有的挑战。传统管理方式存在信息不透明、效率低下、资源分配不均等问题&#xff0c;难以满足日益增长的养老服务需求。因此&#xff0c;开发一套智能化、高效的养老院管理系…

Vue使用qrcodejs2-fix生成网页二维码

安装qrcodejs2-fix npm install qrcodejs2-fix核心代码 在指定父view中生成一个二维码通过id找到父布局 //通过id找到父布局let codeView document.getElementById("qrcode")new QRCode(codeView, {text: "测试",width: 128,height: 128,colorDark: #00…

三菱变频器Modbus-RTU 通讯规格

能够从变频器的 RS-485 端子使用 Modbus-RTU 通讯协议&#xff0c;进行通讯运行和参数设定。 NOTE: 1、使用 Modbus-RTU 通讯协议时&#xff0c;请设定Pr.549 协议选择 “1” 2、从主机按地址0(站号0)进行hodbus-RTU通讯时&#xff0c;为广播通讯&#xff0c;变频器不向主机发…

Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive

文章目录 一、创建Vue3工程1. vue-cli方式2. vite方式3. 项目小说明4. 安装插件&#xff1a;(1) Prettier--整理格式(2) Vue-official 二、 OptionsAPI 与 CompositionAPI1 选项式API的弊端2 组合式API的优势 三、setup1. 基本使用2 setup与组合式API3 setup语法糖 四、Vue中的…

Matlab R2024B软件安装教程

一、新版本特点 MATLAB R2024B版本带来了众多新特性和改进&#xff0c;旨在提升用户的内容创作体验和工程效率。以下是该版本的一些主要特点&#xff1a; 1. 性能提升和优化&#xff1a;R2024B版本在性能上进行了显著优化&#xff0c;无论是在提问、回答问题、发布新技巧还是…

OpenCV系列教程二:基本图像增强(数值运算)、滤波器(去噪、边缘检测)

文章目录 一、基本图像增强&#xff08;数值运算&#xff09;1.1 加法 &#xff08;cv2.add&#xff09;1.1.1 图像与标量相加&#xff08;调节亮度&#xff09;1.1.2 图像与图像相加&#xff08;两个图像shape要相同&#xff09;1.1.3 图像的加权加法&#xff08;渐变切换&…

nodejs 012:Babel(巴别塔)语言转换与代码兼容

这里写目录标题 安装 Babel配置presets配置&#xff1a;常见的 Babel Presetsplugins配置&#xff1a;以 plugin-transform-class-properties 的类中属性为例index.jsx Babel 是一个独立的 JavaScript 编译器&#xff0c;主要用于将现代 JavaScript 代码转换为旧版本的 JavaScr…

数据结构之二叉树(1)

数据结构之二叉树&#xff08;1&#xff09; 一、树 1、树的概念与结构 &#xff08;1&#xff09;树是一种非线性的数据结构&#xff0c;由n(n>0)个有限结点组成一个具有层次关系的集合。 &#xff08;2&#xff09;树有一个特殊的结点&#xff0c;叫做根结点&#xff…

Linux多块磁盘挂载同一目录

1、背景 由于服务器磁盘空间使用率已经使用占比超过95%&#xff0c;故购买了些磁盘对服务器进行扩容&#xff0c;但是如果直接进行磁盘挂载的&#xff0c;那么就只能挂载一个磁盘挂载一个目录&#xff0c;使用新磁盘空间得不到最大的利用率&#xff0c;故需要将多块磁盘合并为…