Agent Retrieval 向量存储

Agent Retrieval(前身为 Vector Search 2.0)是 Gemini Enterprise Agent Platform 上由 Google 管理的向量数据库,通常可在 vectorsearch.googleapis.com 使用。adk-ragagent-retrieval 功能针对该数据库实现了 [VectorStore] trait,因此可以像 pgvector、Qdrant、LanceDB 和 SurrealDB 后端一样,直接接入现有的 RAG pipeline。

[dependencies]
adk-rag = { version = "2.1.0", features = ["agent-retrieval"] }

快速开始

use adk_rag::VectorStore;
use adk_rag::agent_retrieval::{AgentRetrievalConfig, AgentRetrievalStore};

async fn run() -> adk_rag::Result<()> {
    // Application Default Credentials; project/location from the environment.
    let store = AgentRetrievalStore::new_with_adc(AgentRetrievalConfig::from_env()?)?;

    store.create_collection("docs", 768).await?;
    // upsert / search / delete exactly as with any other VectorStore backend
    Ok(())
}

映射到平台

Trait 操作Agent 检索调用
create_collectionPOST {parent}/collections(长时间运行的操作;ALREADY_EXISTS 是空操作)
delete_collectionDELETE {collection}(长时间运行的操作;NOT_FOUND 是空操作)
upsertdataObjects:batchCreate(≤1000,原子操作),对于最后写入获胜则回退到按对象执行 create-else-patch
deletedataObjects:batchDelete,当缺少 ID 时回退到按对象删除
search使用 vectorSearch 查询的 dataObjects:search

文本块和元数据与向量一起存储在数据对象中,无需配套存储。该存储以 BYOE(自带嵌入)模式运行:嵌入来自 adk-rag 的嵌入器管道,确保不同后端之间的行为保持一致。分数是 DOT_PRODUCT 距离,对于经过归一化的嵌入而言,它们等于余弦相似度(分数越高,相关性越高)。

配置

选项效果
with_collection_prefix("rag-")为每个集合 ID 添加前缀,从而隔离此存储的集合
with_existing_collections_only(true)create_collection 验证集合是否存在,而不是创建集合——适用于使用平台工具预先配置集合的部署
with_endpoint(...)自定义 API 来源(允许用于测试的环回 HTTP)

集合名称会被清理为 RFC 1035 标签(转换为小写;无效字符会变为连字符),因此 my_docs 会变为集合 ID my-docs。清理后相同的不同名称会发生冲突——请选择在大小写或标点之外也存在差异的名称。

超越 trait

对于持有具体 AgentRetrievalStore 的调用方,hybrid_search 会在一次 dataObjects:batchSearch 调用中运行语义查询和关键词查询,并返回经过倒数排名融合排序的列表:

# use adk_rag::agent_retrieval::{AgentRetrievalConfig, AgentRetrievalStore};
# async fn run(store: AgentRetrievalStore, embedding: Vec<f32>) -> adk_rag::Result<()> {
let results = store
    .hybrid_search("docs", &embedding, "quarterly revenue", 10, (0.6, 0.4))
    .await?;
# Ok(())
# }

平台说明

  • 区域: Agent Retrieval 具有区域性;支持的区域包括 us-central1us-east4us-west1europe-north1europe-west2europe-west4asia-east1asia-northeast1asia-southeast1
  • CMEK: 独立的 Agent Retrieval 通过集合的 encryptionSpec 支持客户管理的加密密钥(创建时不可变)。请使用平台工具预先配置 CMEK 集合,并使用 with_existing_collections_only(true)
  • Vector Search 1.0 特意未实现。 其索引/端点基础设施模型与 VectorStore trait 的契合度较低,而 Google 将 Agent Retrieval 定位为其后继产品。
  • 配额: 每个请求的批量写入上限为 1000 个对象,并且具有原子性;存储会自动将更大的 upsert 操作分块。

测试

该后端通过所有 adk-rag 后端都会运行的共享 VectorStore 契约和属性测试套件,因此在行为上可与其他存储互换。#[ignore] 实时测试会创建并删除其自行生成唯一名称的集合(数据平面测试,与 pgvector 和 Qdrant 实时测试相同):

GOOGLE_CLOUD_PROJECT=my-project GOOGLE_CLOUD_LOCATION=us-central1 \
  cargo test -p adk-rag --features agent-retrieval -- --ignored