You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将已加载的FAISS向量存储内容存入SQLite3数据库?

将FAISS向量数据存入SQLite3数据库的实现方案

核心思路

既然已经把FAISS存储的元数据转成了包含chunk_id、document、page、content的DataFrame,只需要提取FAISS中的向量数据,和DataFrame合并后直接写入SQLite即可——SQLite支持二进制(BLOB)或字符串格式存储向量,以下是具体实现步骤:

步骤1:提取FAISS中的向量数据

从已加载的FAISS索引中批量提取所有向量,确保数量和DataFrame的86行对应:

# 假设已加载好FAISS索引:faiss_index = faiss.read_index("faiss index/index.faiss")
vectors = faiss_index.reconstruct_n(0, faiss_index.ntotal)

步骤2:向量格式转换与DataFrame合并

SQLite没有原生向量类型,推荐用二进制格式存储(节省空间且读取效率高),将向量转成二进制后添加到DataFrame:

import numpy as np

# 将每个向量转成二进制
df['vector'] = [vec.tobytes() for vec in vectors]

如果需要可视化查看向量内容,也可以转成逗号分隔的字符串:

df['vector'] = [','.join(map(str, vec)) for vec in vectors]

步骤3:写入SQLite数据库

用Python内置的sqlite3库连接数据库,创建表后直接通过Pandas的to_sql方法写入数据:

import sqlite3

# 连接SQLite数据库(不存在则自动创建)
conn = sqlite3.connect('faiss_documents.db')

# 创建数据表(确保字段匹配你的DataFrame)
create_table_sql = """
CREATE TABLE IF NOT EXISTS faiss_documents (
    chunk_id TEXT PRIMARY KEY,
    document TEXT,
    page INTEGER,
    content TEXT,
    vector BLOB  -- 如果用字符串存储则改为TEXT
)
"""
conn.execute(create_table_sql)

# 将DataFrame写入数据库(if_exists可选replace/append/fail)
df.to_sql('faiss_documents', conn, if_exists='replace', index=False)

# 提交操作并关闭连接
conn.commit()
conn.close()

后续读取向量的方法

如果用二进制存储,读取后还原成FAISS可用的向量:

conn = sqlite3.connect('faiss_documents.db')
cursor = conn.cursor()
cursor.execute("SELECT vector FROM faiss_documents WHERE chunk_id = ?", ('your_chunk_id',))
vector_bytes = cursor.fetchone()[0]
# 还原为float32类型的numpy数组(FAISS默认向量类型)
vector = np.frombuffer(vector_bytes, dtype=np.float32)
conn.close()

内容的提问来源于stack exchange,提问作者Ejaz Habib Dar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:02:16