向量存储

本指南将帮助您了解如何作为开发者使用 Rememberizer 向量存储。

Rememberizer 向量存储简化了处理向量数据的过程,使您能够专注于文本输入,并利用向量的力量用于搜索和数据分析等各种应用。

介绍

Rememberizer 向量存储提供了一个易于使用的接口,用于处理向量数据,同时抽象掉向量嵌入的复杂性。由 PostgreSQL 和 pgvector 扩展驱动,Rememberizer 向量存储允许您直接处理文本。该服务处理文本数据的分块、向量化和存储,使您能够更专注于核心应用逻辑。

要深入了解向量嵌入和向量数据库背后的理论概念,请参见 什么是向量嵌入和向量数据库?

技术概述

向量存储是如何工作的

Rememberizer 向量存储将文本转换为高维向量表示(嵌入),以捕捉语义意义。这使得:

  1. 语义搜索:根据意义而不仅仅是关键词查找文档

  2. 相似性匹配:识别概念上相关的内容

  3. 高效检索:快速从大型数据集中定位相关信息

关键组件

  • 文档处理:文本被分割成最佳大小的块,具有重叠边界以保持上下文

  • 向量化:块使用最先进的模型转换为嵌入

  • 索引:专门的算法组织向量以实现高效的相似性搜索

  • 查询处理:搜索查询被向量化并与存储的嵌入进行比较

架构

Rememberizer 使用以下方式实现向量存储:

  • 带有 pgvector 扩展的 PostgreSQL:用于高效的向量存储和搜索

  • 基于集合的组织:每个向量存储都有自己独立的集合

  • API 驱动的访问:所有操作的简单 RESTful 端点

开始使用

创建向量存储

  1. 在您的仪表板中导航到向量存储部分

  2. 点击“创建新向量存储”:

    • 将出现一个表单,提示您输入详细信息。

  3. 填写详细信息:

    • 名称:为您的向量存储提供一个唯一的名称。

    • 描述:写一个简短的向量存储描述。

    • 嵌入模型:选择将文本转换为向量的模型。

    • 索引算法:选择向量如何组织以便搜索。

    • 搜索度量:定义向量之间相似性的计算方式。

    • 向量维度:向量嵌入的大小(通常为768-1536)。

  4. 提交表单:

    • 点击“创建”按钮。您将收到成功通知,新存储将出现在您的向量存储列表中。

创建新向量存储
创建新向量存储

配置选项

嵌入模型

模型
维度
描述
最佳用途

openai/text-embedding-3-large

1536

来自 OpenAI 的高精度嵌入模型

需要最大精度的生产应用

openai/text-embedding-3-small

1536

来自 OpenAI 的更小、更快的嵌入模型

具有更高吞吐量要求的应用

索引算法

算法
描述
权衡

IVFFLAT (默认)

反向文件与平面压缩

速度和准确性的良好平衡;适用于大多数数据集

HNSW

层次可导航小世界

对于大数据集更好的准确性;更高的内存要求

搜索指标

指标
描述
最适合

余弦 (默认)

测量向量之间的角度

通用相似性匹配

内积 (ip)

向量之间的点积

当向量大小重要时

L2 (欧几里得)

向量之间的直线距离

当空间关系重要时

管理向量存储

  1. 查看和编辑向量存储:

    • 访问管理仪表板以查看、编辑或删除向量存储。

  2. 查看文档:

    • 浏览特定向量存储中的单个文档及其相关元数据。

  3. 统计信息:

    • 查看详细统计信息,例如存储的向量数量、查询性能和操作指标。

查看向量存储的详细信息
查看向量存储的详细信息

API 密钥管理

API 密钥用于验证和授权访问 Rememberizer 向量存储的 API 端点。正确管理 API 密钥对于维护您的向量存储的安全性和完整性至关重要。

创建 API 密钥

  1. 前往您的向量存储详细信息页面

  2. 导航到 API 密钥管理部分:

    • 它可以在“配置”选项卡中找到

  3. 点击 “添加 API 密钥”

    • 将出现一个表单,提示您输入详细信息。

  4. 填写详细信息:

    • 名称:为 API 密钥提供一个名称,以帮助您识别其用例。

  5. 提交表单:

    • 点击“创建”按钮。新的 API 密钥将被生成并显示。确保复制并安全存储它。此密钥用于验证对该特定向量存储的请求。

创建新的 API 密钥
创建新的 API 密钥

撤销 API 密钥

如果不再需要 API 密钥,您可以删除它以防止任何潜在的滥用。

出于安全原因,您可能希望定期更换您的 API 密钥。这涉及生成一个新密钥并撤销旧密钥。

使用向量存储 API

在创建向量存储并生成 API 密钥后,您可以使用 REST API 与其进行交互。

代码示例

import requests
import json

API_KEY = "your_api_key_here"
VECTOR_STORE_ID = "vs_abc123"  # 替换为您的向量存储 ID
BASE_URL = "https://api.rememberizer.a

# 将文档上传到向量存储
def upload_document(file_path, document_name=None):
    if document_name is None:
        document_name = file_path.split("/")[-1]
    
    with open(file_path, "rb") as f:
        files = {"file": (document_name, f)}
        headers = {"x-api-key": API_KEY}
        
        response = requests.post(
            f"{BASE_URL}/vector-stores/{VECTOR_STORE_ID}/documents",
            headers=headers,
            files=files
        )
        
        if response.status_code == 201:
            print(f"文档 '{document_name}' 上传成功!")
            return response.json()
        else:
            print(f"上传文档时出错:{response.text}")
            return None

# 将文本内容上传到向量存储
def upload_text(content, document_name):
    headers = {
        "x-api-key": API_KEY,
        "Content-Type": "application/json"
    }
    
    data = {
        "name": document_name,
        "content": content
    }
    
    response = requests.post(
        f"{BASE_URL}/vector-stores/{VECTOR_STORE_ID}/documents/text",
        headers=headers,
        json=data
    )
    
    if response.status_code == 201:
        print(f"文本文件 '{document_name}' 上传成功!")
        return response.json()
    else:
        print(f"上传文本时出错:{response.text}")
        return None

# 搜索向量存储
def search_vector_store(query, num_results=5, prev_chunks=1, next_chunks=1):
    headers = {"x-api-key": API_KEY}
    
    params = {
        "q": query,
        "n": num_results,
        "prev_chunks": prev_chunks,
        "next_chunks": next_chunks
    }
    
    response = requests.get(
        f"{BASE_URL}/vector-stores/{VECTOR_STORE_ID}/documents/search",
        headers=headers,
        params=params
    )
    
    if response.status_code == 200:
        results = response.json()
        print(f"找到 {len(results['matched_chunks'])} 个与 '{query}' 匹配的结果")
        
        # 打印顶部结果
        if results['matched_chunks']:
            top_match = results['matched_chunks'][0]
            print(f"最佳匹配(距离: {top_match['distance']}):")
            print(f"文档: {top_match['document']['name']}")
            print(f"内容: {top_match['matched_content']}")
        
        return results
    else:
        print(f"搜索错误: {response.text}")
        return None

# 示例用法
# 上传文档("path/to/document.pdf")
# upload_text("这是一个要被向量化的示例文本", "sample-document.txt")
# search_vector_store("向量相似性是如何工作的?")

迁移最佳实践

遵循以下建议以确保成功迁移:

  1. 提前规划

    • 估算迁移所需的数据量和时间

    • 在低流量时段安排迁移

    • 在开始大规模迁移之前增加磁盘空间

  2. 先进行测试

    • 在 Rememberizer 中创建一个测试向量存储

    • 迁移一小部分数据(100-1000 个向量)

    • 使用关键查询验证搜索功能

  3. 数据验证

    • 比较迁移前后的文档计数

    • 运行基准查询以确保结果相似

    • 验证元数据是否正确保留

  4. 优化性能

    • 使用批量操作以提高效率

    • 考虑源数据库和目标数据库的地理共址

    • 监控 API 速率限制并相应调整批量大小

  5. 迁移后的步骤

    • 验证在 Rememberizer 中创建索引

    • 更新应用程序配置以指向新的向量存储

    • 在迁移验证之前保留源数据库作为备份

有关详细的 API 参考和端点文档,请访问 https://github.com/skydeckai/rememberizer-docs/blob/production/zh-cn/developer/api-docs/vector-store/README.md 页面。


确保安全处理 API 密钥,并遵循 API 密钥管理的最佳实践。

Last updated