Vertex AI RAG Engine

RĂ©cupĂ©rez du contexte contextualisĂ© depuis les corpus gĂ©rĂ©s de Vertex AI RAG Engine — sans magasin vectoriel auto-hĂ©bergĂ©, fournisseur d’embeddings ni pipeline d’ingestion requis.


Présentation

Vertex AI RAG Engine est le backend RAG géré de Google Cloud : vous importez des documents dans un corpus RAG et la plateforme se charge du découpage en segments, de la génération des embeddings et de la recherche vectorielle. La fonctionnalité vertex-rag de adk-rag fournit :

  • VertexRagEngineClient — un client de plan de donnĂ©es en lecture seule, authentifiĂ© par ADC : rĂ©cupĂ©ration et Ă©numĂ©ration des corpus, Ă©numĂ©ration des fichiers importĂ©s et rĂ©cupĂ©ration des contextes
  • VertexAiRagRetrievalTool — la rĂ©cupĂ©ration sous forme d’un adk_core::Tool, l’équivalent Rust de VertexAiRagRetrieval de adk-python

PortĂ©e : rĂ©cupĂ©ration uniquement. La crĂ©ation des corpus et l’importation des fichiers relĂšvent du provisionnement — utilisez la console Vertex AI ou le APIs de gestion RagCorpora/RagFiles.


Installation

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

L’authentification utilise les identifiants par dĂ©faut de l’application :

gcloud auth application-default login

Client

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

Les corpus peuvent ĂȘtre transmis sous forme d’identifiants seuls (rĂ©solus par rapport au projet et Ă  l’emplacement du client) ou de noms de ressources projects/*/locations/*/ragCorpora/* complets.

Remarque : similarity_top_k et vector_distance_threshold conservent les noms de adk-python, mais sont envoyĂ©s via le chemin rĂ©seau actuel — query.ragRetrievalConfig.topK et query.ragRetrievalConfig.filter.vectorDistanceThreshold. Les appellations v1beta1 obsolĂštes (query.similarityTopK, vertexRagStore.vectorDistanceThreshold) ont Ă©tĂ© supprimĂ©es de v1 et ne sont jamais Ă©mises. vector_similarity_threshold est l’autre branche, mutuellement exclusive, du filtre.


Outil de récupération

VertexAiRagRetrievalTool accepte une unique chaĂźne query obligatoire et renvoie un tableau JSON d’objets {text, sourceUri, sourceDisplayName, score}. Il se dĂ©clare en lecture seule et sĂ»r pour les accĂšs concurrents ; ainsi, ToolExecutionStrategy::Auto peut l’exĂ©cuter en parallĂšle avec d’autres opĂ©rations de lecture.

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

Consultez examples/vertex_rag pour dĂ©couvrir l’agent complet et exĂ©cutable :

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

API référence

OpérationPoint de terminaisonRenvoie
get_corpus(corpus)GET v1beta1/{corpus}RagCorpus (404 devient une erreur exploitable indiquant que l’élĂ©ment est introuvable)
ensure_corpus_ready(corpus)GET v1beta1/{corpus}RagCorpus ; erreurs en cas d’absence, de valeur vide ou d’état ERROR
list_corpora()GET v1beta1/{parent}/ragCorporaVec<RagCorpus>, pagination suivie
list_rag_files(corpus)GET v1beta1/{corpus}/ragFilesVec<RagFile>, pagination suivie
retrieve_contexts(&request)POST v1beta1/{parent}:retrieveContextsVec<RagContext>

Les types de rĂ©ponse sont dĂ©sĂ©rialisĂ©s de maniĂšre permissive — chaque champ est facultatif et les champs inconnus sont ignorĂ©s, de sorte que les nouveaux champs du serveur ne peuvent pas perturber l’analyse. Les erreurs contiennent le composant Memory (la rĂ©cupĂ©ration relĂšve du domaine de la mĂ©moire ; AdkError ne possĂšde pas de composant RAG dĂ©diĂ©), le fournisseur vertex_ai et des codes rag.vertex.* lisibles par machine.


Variables d’environnement

VariableUtilisée parDescription
GOOGLE_CLOUD_PROJECTVertexRagConfig::from_envProjet propriétaire des corpus
GOOGLE_CLOUD_LOCATIONVertexRagConfig::from_envRégion, par exemple us-central1
VERTEX_RAG_CORPUStests d’exemple / en conditions rĂ©ellesID du corpus ou nom complet de la ressource

Vous préférez un RAG auto-hébergé ?

Pour un pipeline que vous exĂ©cutez vous-mĂȘme — des dĂ©coupeurs enfichables, des fournisseurs d’embeddings et des bases de donnĂ©es vectorielles (Qdrant, LanceDB, pgvector, SurrealDB) — consultez RAG.

Vertex AI RAG Engine - Documentation ADK-Rust | ADK-Rust