为了仿照上述代码实现一个简化的FAISS存储和检索功能,利用LangChain中的 FAISS 和 Document 模块,下面是一个优化后的代码示例。该实现专注于FAISS的核心功能,包括将文档存储到FAISS向量存储中,并在检索时打印所有存储向量和查询的相似度得分。
simple_faiss_service_langchain.py 实现
import os
from langchain.vectorstores.faiss import FAISS
from langchain.schema import Document
from transformers import AutoTokenizer, AutoModel
import numpy as np
import torch
class SimpleFaissService:
def __init__(self, embedding_model: str = "m3e-base", distance_metric: str = "ip", storage_path: str = "./faiss_index"):
"""
初始化FAISS存储和检索功能。
:param embedding_model: 嵌入模型名称,例如 "m3e-base"。
:param distance_metric: 距离度量方式,支持 "ip"(内积)或 "l2"(欧氏距离)。
:param storage_path: FAISS索引的保存路径。
"""
self.tokenizer = AutoTokenizer.from_pretrained(embedding_model)
self.model = AutoModel.from_pretrained(embedding_model)
self.storage_path = storage_path
self.distance_metric = distance_metric
# 使用LangChain的FAISS模块
self.vector_store = FAISS.from_documents([], self.embed_text, normalize_L2=(distance_metric == "l2"))
def embed_text(self, texts: list) -> np.ndarray:
"""
将文本列表转换为嵌入向量。
:param texts: 文本列表。
:return: 嵌入向量数组。
"""
inputs = self.tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad

最低0.47元/天 解锁文章
321

被折叠的 条评论
为什么被折叠?



