Almacén vectorial de recuperación de agentes

Agent Retrieval (anteriormente Vector Search 2.0) es la base de datos vectorial administrada de Google en Gemini Enterprise Agent Platform, disponible de forma general en vectorsearch.googleapis.com. La funcionalidad agent-retrieval de adk-rag implementa el trait [VectorStore] en ella, por lo que se integra en el flujo RAG existente exactamente igual que los backends pgvector, Qdrant, LanceDB y SurrealDB.

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

Inicio rápido

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(())
}

Correspondencia con la plataforma

Operación del traitLlamada de recuperación del agente
create_collectionPOST {parent}/collections (operación de larga duración; ALREADY_EXISTS es una no-op)
delete_collectionDELETE {collection} (operación de larga duración; NOT_FOUND es una no-op)
upsertdataObjects:batchCreate (≤1000, atómico), con fallback a create-else-patch por objeto para last-write-wins
deletedataObjects:batchDelete, con fallback a delete por objeto cuando faltan los ID
searchdataObjects:search con una consulta vectorSearch

El texto y los metadatos de los fragmentos se almacenan en el objeto de datos junto al vector, por lo que no se necesita ningún almacén complementario. El almacén se ejecuta en modo BYOE (bring-your-own-embeddings): las incorporaciones provienen del flujo de incorporación de adk-rag, lo que mantiene un comportamiento idéntico en todos los backends. Las puntuaciones son distancias de DOT_PRODUCT, que equivalen a la similitud coseno para incorporaciones normalizadas (cuanto mayor sea la puntuación, mayor será la relevancia).

Configuración

OpciónEfecto
with_collection_prefix("rag-")Antecede cada identificador de colección, aislando las colecciones de este almacén
with_existing_collections_only(true)create_collection valida que la colección exista en lugar de crearla — para implementaciones que realizan el aprovisionamiento previo con herramientas de la plataforma
with_endpoint(...)Origen de API personalizado (se permite HTTP de bucle invertido para las pruebas)

Los nombres de las colecciones se saneaan para convertirlos en etiquetas RFC 1035 (se escriben en minúsculas; los caracteres no válidos se convierten en guiones), por lo que my_docs se convierte en el ID de colección my-docs. Los nombres distintos que se sanean de forma idéntica entran en conflicto; elige nombres que difieran en algo más que el uso de mayúsculas o la puntuación.

Más allá del trait

Para los llamadores que tienen el AgentRetrievalStore concreto, hybrid_search ejecuta una consulta semántica y una consulta por palabras clave en una sola llamada a dataObjects:batchSearch y devuelve la lista clasificada mediante fusión de rangos recíprocos:

# 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(())
# }

Notas sobre la plataforma

  • Regiones: Agent Retrieval es regional; las regiones compatibles incluyen us-central1, us-east4, us-west1, europe-north1, europe-west2, europe-west4, asia-east1, asia-northeast1 y asia-southeast1.
  • CMEK: Agent Retrieval independiente admite claves de cifrado administradas por el cliente mediante el encryptionSpec de la colección (inmutable durante la creación). Preaprovisiona las colecciones CMEK con las herramientas de la plataforma y usa with_existing_collections_only(true).
  • Vector Search 1.0 no está implementado deliberadamente. Su modelo de infraestructura de índices y endpoints encaja mal con el trait VectorStore, y Google posiciona Agent Retrieval como su sucesor.
  • Cuotas: las escrituras por lotes están limitadas a 1000 objetos por solicitud y son atómicas; el almacén divide automáticamente las operaciones de inserción o actualización más grandes.

Pruebas

El backend supera el contrato y la suite de propiedades compartidos de VectorStore que ejecutan todos los backends de adk-rag, por lo que es intercambiable en cuanto a comportamiento con los demás almacenes. La prueba en vivo #[ignore] crea y elimina su propia colección con un nombre único (en el plano de datos, como las pruebas en vivo de pgvector y Qdrant):

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