Vertex AI RAG Engine

Obtén contexto fundamentado de los corpus administrados de Vertex AI RAG Engine, sin necesidad de un almacén vectorial autoadministrado, un proveedor de embeddings ni una canalización de ingesta.


Qué es

Vertex AI RAG Engine es el backend RAG administrado de Google Cloud: importas documentos en un corpus de RAG y la plataforma gestiona la división en fragmentos, la generación de embeddings y la búsqueda vectorial. La funcionalidad vertex-rag de adk-rag proporciona:

  • VertexRagEngineClient: un cliente del plano de datos autenticado mediante ADC y de solo lectura: obtiene y enumera corpus, enumera archivos importados y recupera contextos
  • VertexAiRagRetrievalTool: recuperación como un adk_core::Tool, el equivalente en Rust de VertexAiRagRetrieval de adk-python

Alcance: solo recuperación. La creación de corpus y la importación de archivos son responsabilidades de aprovisionamiento; utiliza la consola de Vertex AI o la herramienta de administración APIs de RagCorpora/RagFiles.


Instalación

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

La autenticación utiliza Application Default Credentials:

gcloud auth application-default login

Cliente

use adk_rag::vertex_rag::{RetrieveContextsRequest, VertexRagConfig, VertexRagEngineClient};

#[tokio::main]
async fn main() -> adk_core::Result<()> {
    // Or VertexRagConfig::from_env() reading GOOGLE_CLOUD_PROJECT / GOOGLE_CLOUD_LOCATION
    let config = VertexRagConfig::new("my-project", "us-central1");
    let client = VertexRagEngineClient::new_with_adc(config)?;

    // Verify the corpus exists and has imported files; fails with
    // actionable guidance when it is missing, empty, or in ERROR state.
    let corpus = client.ensure_corpus_ready("1234567890").await?;
    println!("corpus: {:?} ({:?} files)", corpus.display_name, corpus.rag_files_count);

    // Enumerate what's in the project and the corpus.
    let corpora = client.list_corpora().await?;
    let files = client.list_rag_files("1234567890").await?;
    println!("{} corpora, {} files", corpora.len(), files.len());

    // Retrieve the most relevant passages for a query.
    let request = RetrieveContextsRequest::new("what is the refund policy?", ["1234567890"])
        .similarity_top_k(5)
        .vector_distance_threshold(0.7);
    for context in client.retrieve_contexts(&request).await? {
        println!(
            "[{:.3}] {} — {}",
            context.score.unwrap_or_default(),
            context.source_display_name.as_deref().unwrap_or("<unknown>"),
            context.text.as_deref().unwrap_or(""),
        );
    }
    Ok(())
}

Los corpus pueden proporcionarse como identificadores simples (que se resuelven con respecto al proyecto y la ubicación del cliente) o como nombres de recursos completos de projects/*/locations/*/ragCorpora/*.

Nota: similarity_top_k y vector_distance_threshold conservan los nombres de adk-python, pero se envían mediante la ruta de comunicación actual: query.ragRetrievalConfig.topK y query.ragRetrievalConfig.filter.vectorDistanceThreshold. Las grafías obsoletas de v1beta1 (query.similarityTopK, vertexRagStore.vectorDistanceThreshold) se eliminaron de v1 y nunca se emiten. vector_similarity_threshold es la otra opción mutuamente exclusiva del filtro.


Herramienta de recuperación

VertexAiRagRetrievalTool acepta una única cadena query obligatoria y devuelve un arreglo JSON de objetos {text, sourceUri, sourceDisplayName, score}. Se identifica como de solo lectura y segura para la concurrencia, por lo que ToolExecutionStrategy::Auto puede enviarla en paralelo con otras operaciones de lectura.

use std::sync::Arc;
use adk_agent::LlmAgentBuilder;
use adk_model::GeminiModel;
use adk_rag::vertex_rag::{VertexAiRagRetrievalTool, VertexRagConfig, VertexRagEngineClient};

fn main() -> anyhow::Result<()> {
    let config = VertexRagConfig::new("my-project", "us-central1");
    let client = Arc::new(VertexRagEngineClient::new_with_adc(config)?);

    let retrieval = VertexAiRagRetrievalTool::new(client, vec!["1234567890".into()])
        .similarity_top_k(5)
        .vector_distance_threshold(0.7);

    let api_key = std::env::var("GOOGLE_API_KEY")?;
    let agent = LlmAgentBuilder::new("rag-assistant")
        .description("Answers questions grounded in a Vertex AI RAG Engine corpus")
        .model(Arc::new(GeminiModel::new(&api_key, "gemini-3.7-flash")?))
        .tool(Arc::new(retrieval))
        .instruction(
            "Answer using the vertex_rag_retrieval tool. Retrieve first, then \
             answer strictly from the retrieved passages, citing sourceDisplayName.",
        )
        .build()?;
    let _ = agent;
    Ok(())
}

Consulta examples/vertex_rag para ver el agente ejecutable completo:

cargo run --manifest-path examples/vertex_rag/Cargo.toml

API referencia

OperaciónEndpointDevuelve
get_corpus(corpus)GET v1beta1/{corpus}RagCorpus (404 becomes an actionable not-found error)
ensure_corpus_ready(corpus)GET v1beta1/{corpus}RagCorpus; errors when missing, empty, or ERROR state
list_corpora()GET v1beta1/{parent}/ragCorporaVec<RagCorpus>, seguido de paginación
list_rag_files(corpus)GET v1beta1/{corpus}/ragFilesVec<RagFile>, seguido de paginación
retrieve_contexts(&request)POST v1beta1/{parent}:retrieveContextsVec<RagContext>

Los tipos de respuesta se deserializan de forma flexible: todos los campos son opcionales y los campos desconocidos se ignoran, por lo que los nuevos campos del servidor no pueden interrumpir el análisis. Los errores incluyen el componente Memory (la recuperación pertenece al dominio de la memoria; AdkError no tiene un componente RAG dedicado), el proveedor vertex_ai y códigos rag.vertex.* legibles por máquinas.


Variables de entorno

VariableUtilizada porDescripción
GOOGLE_CLOUD_PROJECTVertexRagConfig::from_envProyecto propietario de los corpus
GOOGLE_CLOUD_LOCATIONVertexRagConfig::from_envRegión, p. ej., us-central1
VERTEX_RAG_CORPUSpruebas de ejemplo / en vivoID del corpus o nombre completo del recurso

¿Prefieres RAG autohospedado?

Para un proceso que ejecutas tú mismo — segmentadores, proveedores de embeddings y almacenes vectoriales conectables (Qdrant, LanceDB, pgvector, SurrealDB) — consulta RAG.