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 contextosVertexAiRagRetrievalTool: recuperación como unadk_core::Tool, el equivalente en Rust deVertexAiRagRetrievalde 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_kyvector_distance_thresholdconservan los nombres de adk-python, pero se envían mediante la ruta de comunicación actual:query.ragRetrievalConfig.topKyquery.ragRetrievalConfig.filter.vectorDistanceThreshold. Las grafías obsoletas de v1beta1 (query.similarityTopK,vertexRagStore.vectorDistanceThreshold) se eliminaron de v1 y nunca se emiten.vector_similarity_thresholdes 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ón | Endpoint | Devuelve |
|---|---|---|
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}/ragCorpora | Vec<RagCorpus>, seguido de paginación |
list_rag_files(corpus) | GET v1beta1/{corpus}/ragFiles | Vec<RagFile>, seguido de paginación |
retrieve_contexts(&request) | POST v1beta1/{parent}:retrieveContexts | Vec<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
| Variable | Utilizada por | Descripción |
|---|---|---|
GOOGLE_CLOUD_PROJECT | VertexRagConfig::from_env | Proyecto propietario de los corpus |
GOOGLE_CLOUD_LOCATION | VertexRagConfig::from_env | Región, p. ej., us-central1 |
VERTEX_RAG_CORPUS | pruebas de ejemplo / en vivo | ID 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.