faiss向量数据库实现rag

server/2024/10/24 5:25:38/

1)环境准备

!pip install sentence-transformers transformers faiss-gpu

2)代码实现

import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
from transformers import GPT2LMHeadModel, GPT2Tokenizer# 1. 加载 SentenceTransformer 模型,用于生成嵌入
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')# 示例文档
documents = ["Milvus is an open-source vector database","RAG is a technique to enhance generation using retrieval","Python is a popular programming language","Machine learning enables models to learn from data","Faiss is a library for efficient similarity search and clustering of dense vectors"
]# 2. 对文档生成嵌入向量
embeddings = model.encode(documents)
embeddings = np.array(embeddings).astype('float32')# 3. 使用 Faiss 创建索引(L2 距离)
dimension = embeddings.shape[1]  # 嵌入向量的维度
index = faiss.IndexFlatL2(dimension)
index.add(embeddings)# 4. 输入查询并进行向量化
query = "What is Faiss used for?"
query_embedding = model.encode([query]).astype('float32')# 5. 在 Faiss 中检索最相似的文档
k = 3  # 查找前3个最相似的文档
distances, indices = index.search(query_embedding, k)# 6. 获取最相似的文档
print("Top results:")
for i, idx in enumerate(indices[0]):print(f"Document {idx}: {documents[idx]}, Score: {distances[0][i]}")# 7. 加载 GPT-2 模型,用于生成增强
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
gpt2_model = GPT2LMHeadModel.from_pretrained("gpt2")# 将检索到的文档作为上下文,传递给 GPT-2 模型进行生成
context = " ".join([documents[idx] for idx in indices[0]])
input_text = f"Context: {context}\nQuestion: {query}"inputs = tokenizer.encode(input_text, return_tensors="pt")
output = gpt2_model.generate(inputs, max_length=100, num_return_sequences=1)generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print("\nGenerated Response:", generated_text)

3)读取pdf和docx

!pip install PyMuPDF python-docx

import fitz  # PyMuPDF
import docx# 读取 PDF 文件
def read_pdf(file_path):pdf_text = ""with fitz.open(file_path) as doc:for page_num in range(len(doc)):page = doc.load_page(page_num)pdf_text += page.get_text("text")return pdf_text# 读取 DOCX 文件
def read_docx(file_path):doc = docx.Document(file_path)doc_text = "\n".join([para.text for para in doc.paragraphs])return doc_text# 使用你提供的文件路径
pdf_file = "/content/cgft-llm/llama-index/pdf/Subclass 500 Student visa.pdf"  # 替换为你的 PDF 文件路径
docx_file = "/content/cgft-llm/llama-index/docs/3.98万L4无人车来了!卷出行业新低,1小时卖掉半年产能.txt"  # 替换为你的 DOCX 文件路径# 读取文件内容
pdf_text = read_pdf(pdf_file)
# docx_text = read_docx(docx_file)# 将读取的内容作为 documents 列表
# documents = [pdf_text, docx_text]# 打印读取的内容(可以选择打印部分内容)
print("PDF 内容:", pdf_text[:200])  # 打印前200个字符
# print("DOCX 内容:", docx_text[:200])  # 打印前200个字符

读取txt

# 读取 TXT 文件
def read_txt(file_path):with open(file_path, 'r', encoding='utf-8') as file:return file.read()# 修改路径
txt_file = "/content/cgft-llm/llama-index/docs/3.98万L4无人车来了!卷出行业新低,1小时卖掉半年产能.txt"# 读取文件内容
txt_text = read_txt(txt_file)# 打印读取的内容(可以选择打印部分内容)print("TXT 内容:", txt_text[:200])  # 打印前200个字符


http://www.ppmy.cn/server/134356.html

相关文章

ubuntu clash 配合smartdns

下载安装clash 下载安装smartdns github 下载地址 配置 配置smartdns 设置smartdns配置端口,修改为没有占用的端口号,其他的都不用修改,官方推荐默认参数最佳! 编辑vim /etc/smartdns/smartdns.conf server-name smartdns b…

Mac book英特尔系列?M系列?两者有什么区别呢

众所周知,Mac book有M系列,搭载的是苹果自研的M芯片,也有着英特尔系列,搭载的是英特尔的处理器,虽然从 2020 年开始,苹果公司逐步推出了自家研发的 M 系列芯片,并逐渐将 MacBook 产品线过渡到 M…

探索云计算:AWS、Azure、GCP云服务提供商详解

随着信息技术的飞速发展,云计算已成为企业数字化转型的重要支撑。AWS、Azure和GCP是当前市场上三大主要云服务提供商。本文将详细介绍这三大云服务提供商的特点、服务和使用案例,帮助企业和开发者更好地选择适合自己的云服务。 一、AWS(Amazon Web Services) AWS 是亚马逊…

【Golang】Golang的GC垃圾回收机制

文章目录 前言一、介绍二、代码解释三、GC优化方式四、总结 前言 在现代编程语言中,垃圾回收(Garbage Collection, GC)机制是一个至关重要的特性。它帮助开发者自动管理内存,避免内存泄漏和悬挂指针等问题。Go 语言(G…

石油、电力喷火清障无人机技术详解

石油、电力喷火清障无人机技术是一种利用无人机搭载火焰喷射装置进行高空作业的技术,主要用于清除石油、电力等领域中的障碍物。以下是对该技术的详细解析: 一、技术概述 喷火清障无人机通过在无人机上安装火焰喷射装置,利用加压火来瞄准并…

多IP访问多网段实验

文章目录 多IP访问多网段实验 多IP访问多网段实验 在当前主机配置多个IP地址,实现多IP访问多网段,记录所有命令及含义 1,环境搭建: [rootlocalhost ~]# mount /dev/sr1 /mnt # 设置ISO虚拟镜像文件文件挂载点,将…

关于QT cmake项目添加了.ui文件build未自动生成ui_xxx.h,错误提示找不到这个头文件问题处理

文章目录 问题分析举例 问题 当我们想使用cmakelist来编译运行一个QT项目时,当项目中存在Ui文件时,我们可能会遇到ui_XXX.h头文件找不到的问题。这里我们来分析并解决一下问题。 分析 不管是在cmake下或者qmake下的ui_XXX.h都是根据XXX.ui文件自动生成…

MATLAB imnoise函数

**MATLAB imnoise函数用于向图像添加不同类型的噪声,以模拟真实世界中的噪声污染情况**。以下是该函数的具体说明: 1. **基本语法和参数**:imnoise函数的基本使用格式为g imnoise(I, type),其中g是添加噪声之后的图像&#xff0c…