Magasin vectoriel Agent Retrieval
Agent Retrieval (anciennement Vector Search 2.0) est la base de données vectorielle gérée de Google sur la plateforme Gemini Enterprise Agent, généralement disponible à vectorsearch.googleapis.com. La fonctionnalité agent-retrieval de adk-rag implémente le trait [VectorStore] pour cette base, et s’intègre donc au pipeline RAG existant exactement comme les backends pgvector, Qdrant, LanceDB et SurrealDB.
[dependencies]
adk-rag = { version = "2.1.0", features = ["agent-retrieval"] }
Démarrage rapide
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(())
}
Correspondance avec la plateforme
| Opération du trait | Appel de récupération de l’agent |
|---|---|
create_collection | POST {parent}/collections (opération de longue durée ; ALREADY_EXISTS est sans effet) |
delete_collection | DELETE {collection} (opération de longue durée ; NOT_FOUND est sans effet) |
upsert | dataObjects:batchCreate (≤1000, atomique), avec repli sur une création par objet suivie d’un correctif pour appliquer la règle de la dernière écriture gagnante |
delete | dataObjects:batchDelete, avec repli sur une suppression par objet lorsque les identifiants sont manquants |
search | dataObjects:search avec une requête vectorSearch |
Les fragments de texte et les métadonnées sont stockés dans l’objet de données avec le vecteur — aucun magasin compagnon n’est nécessaire. Le magasin fonctionne en mode BYOE (apportez vos propres embeddings) : les embeddings proviennent du pipeline d’embedding de adk-rag, ce qui garantit un comportement identique entre les différents backends. Les scores sont des distances DOT_PRODUCT, qui correspondent à la similarité cosinus pour les embeddings normalisés (plus le score est élevé, plus le résultat est pertinent).
Configuration
| Option | Effet |
|---|---|
with_collection_prefix("rag-") | Préfixe chaque identifiant de collection, isolant les collections de ce magasin |
with_existing_collections_only(true) | create_collection vérifie que la collection existe au lieu de la créer — pour les déploiements qui la précréent avec des outils de plateforme |
with_endpoint(...) | Origine API personnalisée (HTTP loopback autorisé pour les tests) |
Les noms de collections sont nettoyés pour devenir des libellés RFC 1035 (convertis en minuscules ; les caractères non valides deviennent des traits d’union), de sorte que my_docs devient l’ID de collection my-docs. Les noms distincts qui, après nettoyage, sont identiques entrent en collision — choisissez des noms qui diffèrent autrement que par la casse ou la ponctuation.
Au-delà du trait
Pour les appelants qui détiennent le AgentRetrievalStore concret, hybrid_search exécute une requête sémantique et une requête par mots-clés en un seul appel dataObjects:batchSearch, puis renvoie la liste classée par fusion des rangs réciproques :
# 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(())
# }
Remarques concernant la plateforme
- Régions : Agent Retrieval est régional ; les régions prises en charge incluent
us-central1,us-east4,us-west1,europe-north1,europe-west2,europe-west4,asia-east1,asia-northeast1etasia-southeast1. - CMEK : Agent Retrieval autonome prend en charge les clés de chiffrement gérées par le client via le
encryptionSpecde la collection (immuable lors de la création). Préprovisionnez les collections CMEK avec les outils de la plateforme et utilisezwith_existing_collections_only(true). - Vector Search 1.0 n’est délibérément pas implémenté. Son modèle d’infrastructure d’index et de point de terminaison s’adapte mal au trait
VectorStore, et Google présente Agent Retrieval comme son successeur. - Quotas : les écritures par lots sont limitées à 1000 objets par requête et sont atomiques ; le magasin segmente automatiquement les opérations d’insertion ou de mise à jour plus volumineuses.
Tests
Le back-end réussit le contrat et la suite de tests de propriétés partagés VectorStore, exécutés par tous les back-ends adk-rag ; son comportement est donc interchangeable avec celui des autres magasins. Le test en conditions réelles #[ignore] crée et supprime sa propre collection dont le nom est unique (plan de données, comme les tests en conditions réelles de pgvector et de Qdrant) :
GOOGLE_CLOUD_PROJECT=my-project GOOGLE_CLOUD_LOCATION=us-central1 \
cargo test -p adk-rag --features agent-retrieval -- --ignored