Agent Retrieval 向量存储
Agent Retrieval(前身为 Vector Search 2.0)是 Gemini Enterprise Agent Platform 上由 Google 管理的向量数据库,通常可在 vectorsearch.googleapis.com 使用。adk-rag 的 agent-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_collection | POST {parent}/collections(长时间运行的操作;ALREADY_EXISTS 是空操作) |
delete_collection | DELETE {collection}(长时间运行的操作;NOT_FOUND 是空操作) |
upsert | dataObjects:batchCreate(≤1000,原子操作),对于最后写入获胜则回退到按对象执行 create-else-patch |
delete | dataObjects: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-central1、us-east4、us-west1、europe-north1、europe-west2、europe-west4、asia-east1、asia-northeast1和asia-southeast1。 - CMEK: 独立的 Agent Retrieval 通过集合的
encryptionSpec支持客户管理的加密密钥(创建时不可变)。请使用平台工具预先配置 CMEK 集合,并使用with_existing_collections_only(true)。 - Vector Search 1.0 特意未实现。 其索引/端点基础设施模型与
VectorStoretrait 的契合度较低,而 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