AI教我做事之RAG开发-17 RAG中不同的向量数据库的操作背景与概述

以下是针对 RAG 开发中不同向量数据的读取和存储的详细分析和实现,基于当前时间(2025 年 3 月 12 日,太平洋夏令时晚上 10:42)的研究和实践。

背景与需求分析

在 AI 的检索增强生成(RAG)开发中,向量数据通常指文本或其他模态数据的嵌入表示,用于相似性搜索和信息检索。向量数据的读取和存储是 RAG 管道的关键步骤,涉及从文件或数据库读取预计算的嵌入,并将其高效存储到向量数据库中以支持后续检索。

用户可能需要处理不同来源或不同维度的向量数据,例如来自 OpenAI 嵌入模型(通常 1536 维)或 SentenceTransformer 模型(可能 384 维)的嵌入。存储时,需要确保向量数据库能够处理这些差异,并保持检索效率。

AI教我做事之RAG开发-17 RAG中不同的向量数据库的操作背景与概述

完整代码

import json
from collections import defaultdict
import pinecone
from chromadb import Client
defread_vector_data(file_path):
"""
    从 JSON 文件读取向量数据。
    JSON 文件应包含一个字典列表,每个字典有 'text' 和 'vector' 键。
    参数:
    file_path (str): JSON 文件路径。
    返回:
    list: 包含 'text' 和 'vector' 的字典列表。
    """withopen(file_path, 'r') as f:
        data = json.load(f)
return data
defstore_in_pinecone(data):
"""
    将向量数据存储到 Pinecone,按向量维度分组。
    每个相同维度的向量组存储在单独的索引中。
    参数:
    data (list): 包含 'text' 和 'vector' 的字典列表。
    """# 初始化 Pinecone# 请确保设置您的 Pinecone API 密钥和环境    pinecone.init(
        api_key="your_pinecone_api_key",
        environment="your_pinecone_environment"    )
# 按向量维度分组数据    dimension_groups = defaultdict(list)
for item in data:
        dim = len(item['vector'])
        dimension_groups[dim].append(item)
# 为每个组创建并存储到单独的索引for dim, group in dimension_groups.items():
        index_name = f"index_{dim}"if index_name notin pinecone.list_indexes():
            pinecone.create_index(
                index_name,
                dimension=dim,
                metric="cosine"            )
        index = pinecone.Index(index_name)
        ids = [str(i) for i inrange(len(group))]
        vectors = [item['vector'] for item in group]
        metadatas = [{'text': item['text']} for item in group]
        index.upsert(vectors=vectors, ids=ids, metadatas=metadatas)
defstore_in_chroma(data):
"""
    将向量数据存储到 Chroma,按向量维度分组。
    每个相同维度的向量组存储在单独的集合中。
    参数:
    data (list): 包含 'text' 和 'vector' 的字典列表。
    """    client = Client()
# 按向量维度分组数据    dimension_groups = defaultdict(list)
for item in data:
        dim = len(item['vector'])
        dimension_groups[dim].append(item)
# 为每个组创建并存储到单独的集合for dim, group in dimension_groups.items():
        collection_name = f"collection_{dim}"        collection = client.get_or_create_collection(name=collection_name)
        ids = [str(i) for i inrange(len(group))]
        embeddings = [item['vector'] for item in group]
        metadatas = [{'text': item['text']} for item in group]
        collection.add(
            embeddings=embeddings,
            metadatas=metadatas,
            ids=ids
        )
# 示例用法file_path = Path('testdata') / 'vector_data.json'data = read_vector_data(file_path)
store_in_pinecone(data)
store_in_chroma(data)

向量数据

其中,向量数据通常是文本或其他模态数据的嵌入表示,用于相似性搜索和信息检索。vector_data.json 文件是存储这些嵌入数据的一种常见格式,方便从本地文件读取并导入向量数据库,如 Pinecone 和 Chroma。文件应包含文本及其对应向量的映射,格式为 JSON,方便 Python 代码处理。

文件格式与结构

vector_data.json 文件应是一个 JSON 数组,每个元素是一个字典,包含以下键:

  • “text”:一个字符串,表示原始文本内容。
  • “vector”:一个浮点数列表,表示该文本的向量嵌入。

向量嵌入通常由嵌入模型生成,例如 OpenAI 的 text-embedding-ada-002(1536维)或 Hugging Face 的 SentenceTransformer 模型(常见384维)。每个向量的维度取决于所用模型,实际应用中可能有数百到数千维。

统一维度示例
[
    {
        "text": "这是一个示例句子。",
        "vector": [0.123456789, 0.234567890, 0.345678901]
    },
    {
        "text": "另一个演示句子。",
        "vector": [0.456789012, 0.567890123, 0.678901234]
    },
    {
        "text": "机器学习很有趣。",
        "vector": [0.789012345, 0.890123456, 0.901234567]
    }
]
  • 特点:所有向量维度一致,代码会创建单一索引或集合,适合大多数 RAG 应用。
  • 适用场景:使用同一嵌入模型(如 OpenAI 的 text-embedding-ada-002)生成嵌入。
混合维度示例
[
    {
        "text": "2维向量的文本。",
        "vector": [0.1234567890, -0.9876543210]
    },
    {
        "text": "3维向量的文本。",
        "vector": [0.4567890123, 0.5678901234, -0.6789012345]
    },
    {
        "text": "4维向量的文本。",
        "vector": [0.7890123456, -0.2345678901, 0.3456789012, -0.8765432109]
    }
]
  • 特点:代码会按维度分组(如2维、3维、4维),创建多个索引或集合,适合混合来源的嵌入。
  • 适用场景:使用不同嵌入模型或不同版本模型,维度不一致。
AI教我做事之RAG开发-17 RAG中不同的向量数据库的操作背景与概述

功能与竞争对比

以下表格比较了 Pinecone 和 Chroma 在 RAG 开发中的主要特性:

平台主要功能存储方式适合场景
Pinecone云端向量数据库,高效检索按索引存储,需 API 密钥大规模分布式系统
Chroma本地或云端向量数据库,易部署按集合存储,无需额外密钥小型项目或本地开发

RA/SD 衍生者AI训练营。发布者:稻草人,转载请注明出处:https://www.shxcj.com/ai%e6%95%99%e6%88%91%e5%81%9a%e4%ba%8b%e4%b9%8brag%e5%bc%80%e5%8f%91-17-rag%e4%b8%ad%e4%b8%8d%e5%90%8c%e7%9a%84%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e6%93%8d%e4%bd%9c%e8%83%8c/

(0)
上一篇 2天前
下一篇 2天前

相关推荐

发表回复

登录后才能评论
本文授权以下站点有原版访问授权 https://www.shxcj.com https://www.2img.ai https://www.2video.cn