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 traitAppel de récupération de l’agent
create_collectionPOST {parent}/collections (opération de longue durée ; ALREADY_EXISTS est sans effet)
delete_collectionDELETE {collection} (opération de longue durée ; NOT_FOUND est sans effet)
upsertdataObjects: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
deletedataObjects:batchDelete, avec repli sur une suppression par objet lorsque les identifiants sont manquants
searchdataObjects: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

OptionEffet
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-northeast1 et asia-southeast1.
  • CMEK : Agent Retrieval autonome prend en charge les clés de chiffrement gérées par le client via le encryptionSpec de la collection (immuable lors de la création). Préprovisionnez les collections CMEK avec les outils de la plateforme et utilisez with_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