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 contextesVertexAiRagRetrievalToolâ la rĂ©cupĂ©ration sous forme dâunadk_core::Tool, lâĂ©quivalent Rust deVertexAiRagRetrievalde 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_ketvector_distance_thresholdconservent les noms de adk-python, mais sont envoyĂ©s via le chemin rĂ©seau actuel âquery.ragRetrievalConfig.topKetquery.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_thresholdest 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ération | Point de terminaison | Renvoie |
|---|---|---|
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}/ragCorpora | Vec<RagCorpus>, pagination suivie |
list_rag_files(corpus) | GET v1beta1/{corpus}/ragFiles | Vec<RagFile>, pagination suivie |
retrieve_contexts(&request) | POST v1beta1/{parent}:retrieveContexts | Vec<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
| Variable | Utilisée par | Description |
|---|---|---|
GOOGLE_CLOUD_PROJECT | VertexRagConfig::from_env | Projet propriétaire des corpus |
GOOGLE_CLOUD_LOCATION | VertexRagConfig::from_env | Région, par exemple us-central1 |
VERTEX_RAG_CORPUS | tests dâexemple / en conditions rĂ©elles | ID 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.