Notas prácticas: Los tres niveles de Google Cloud RAG: Búsqueda vectorial, motor RAG y recuperación por agente
Guía paso a paso operativa de las notas prácticas: Los tres niveles de Google Cloud RAG: Búsqueda vectorial, motor RAG y recuperación por agente: contratos, verificaciones y espacios para código listo para usar.
Utilícelo como una versión reestructurada dirigida a operadores de las ideas presentadas en “Los tres niveles de Google Cloud RAG: Búsqueda vectorial, motor RAG y recuperación por agente”: etapas claras, espacios para código ordenados y notas de recuperación que perduran tras la transferencia de tareas. La visión general funciona mejor cuando se trata como una superficie medible. Capture una transcripción ejemplar, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una única responsabilidad y no a un proceso complicado.
Capas arquitectónicas y de abstracción
Para las capas arquitectónicas y de abstracción, defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Trate esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Cite los pasajes que realmente sustentan la respuesta. Sin citaciones, los operadores no pueden distinguir entre alucinaciones y lagunas en el indexado.
1. Búsqueda vectorial de Vertex AI (Nivel 1: Infraestructura de alto rendimiento)
Para Vertex AI Vector Search (Nivel 1: Infraestructura de Alto Rendimiento), defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Registre los tiempos de ejecución y el costo en tokens o consultas junto con los resultados funcionales. Tener visibilidad temprana del costo evita facturas inesperadas cuando el proceso pasa de entornos de demostración a entornos compartidos. Cite los pasajes que realmente sirvieron de base para la respuesta; sin citas, los operadores no pueden distinguir entre alucinaciones y brechas en el indexado.
Arquitectura y Mecánicas Básicas
En cuanto a la arquitectura y mecánicas básicas, defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Guarde la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de datos confidenciales y las banderas de funcionalidad deben encontrarse en un lugar donde los operadores puedan auditarlos sin necesidad de leer todo el sistema. Cite los pasajes que realmente sustentan la respuesta. Sin citaciones, los operadores no pueden distinguir entre alucinaciones y lagunas en el indexado. En cuanto a la arquitectura y mecánicas básicas, defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el error debe indicar una única responsabilidad y no un proceso complejo e entrelazado.
e.El pipeline de recuperación ScaNN en tres etapas
Al trabajar con el pipeline de recuperación ScaNN en tres etapas, primero escribe el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Considera esta etapa como un contrato entre las entradas y los resultados validados. Nombra los artefactos, define las verificaciones de éxito y rechaza las completaciones parciales silenciosas. Mide el recuerdo en un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente.
Infraestructura distribuida: innovaciones en el motor de coincidencia Vertex
Al trabajar en “Infraestructura distribuida: Innovaciones en el motor de coincidencia Vertex”, anote primero el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Registre los tiempos y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando se pasa de entornos de demostración a entornos compartidos. Mida el rendimiento en un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente.
Casos de uso en producción para Google Vector Search
Al trabajar en casos de uso para producción de Google Vector Search, primero escribe el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Mantén la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de secretos y las banderas de funcionalidad deben estar en un lugar donde los operadores puedan auditarlos sin tener que leer todo el sistema. Mide la tasa de recuperación con un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente. Al trabajar en casos de uso para producción de Google Vector Search, primero escribe el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Prefiere unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una única responsabilidad y no a un proceso complicado.
1. Comercio electrónico multimodal en tiempo real y búsqueda en catálogo visual
- El comercio electrónico multimodal en tiempo real y la búsqueda en catálogo visual funcionan mejor cuando se consideran como una superficie medible. Capture una transcripción ejemplar, un caso de fallo y la nota de reversión antes de ampliar el alcance. Trate esta etapa como un contrato entre las entradas y las salidas validadas. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Separe la política de fragmentación de la política de recuperación. Cambiar una no debe obligar a reescribir la otra cuando cambian las métricas de calidad.
2. Generación de candidatos a escala de mil millones para embudos de recomendaciones
- La generación a escala de mil millones de candidatos para los sistemas de recomendación funciona mejor cuando se trata como una superficie medible. Capture un caso exitoso ejemplar, un caso de fallo y la nota de reversión antes de ampliar el alcance. Registre los tiempos y el costo en tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la versión de demostración a entornos compartidos. Separe la política de fragmentación de la política de recuperación; cambiar una no debería obligar a reescribir la otra cuando cambian las métricas de calidad.
3. Clustering en tiempo real de fraudes financieros y anomalías cibernéticas
- El agrupamiento en tiempo real de fraudes financieros y anomalías cibernéticas funciona mejor cuando se trata como una superficie medible. Capture una transcripción de referencia, un caso de fallo y la nota de reversión antes de ampliar el alcance. Guarde la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de datos secretos y las banderas de funcionalidad deben estar en un lugar donde los operadores puedan auditarlos sin tener que leer todo el sistema. Separe la política de particionamiento de la política de recuperación. Cambiar una no debe obligar a reescribir la otra cuando cambian las métricas de calidad.
- El agrupamiento en tiempo real de fraudes financieros y anomalías cibernéticas funciona mejor cuando se trata como una superficie medible. Capture una transcripción de referencia, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y probables sobre scripts extensos. Cuando un paso falla, el fallo debe apuntar a una sola responsabilidad en lugar de a un proceso complicado.
Código: Creación de índices, ingestión en tiempo real y consultas
Para el código de Creación de índices, Ingestión en tiempo real y Consultas, defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Trate esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Cite los pasajes que realmente sustentan la respuesta. Sin citas, los operadores no pueden distinguir entre alucinaciones y lagunas en el indexado.
package main
import (
"context"
"fmt"
"log"
aiplatform "cloud.google.com/go/aiplatform/apiv1"
aiplatformpb "cloud.google.com/go/aiplatform/apiv1/aiplatformpb"
"google.golang.org/api/option"
)
func main() {
ctx := context.Background()
projectID := "my-enterprise-gcp-project"
location := "us-central1"
// 1. Initialize Vertex AI Match Client (Vector Search Query Service)
matchClient, err := aiplatform.NewMatchClient(ctx)
if err != nil {
log.Fatalf("failed to create vertex match client: %v", err)
}
defer matchClient.Close()
indexEndpointPath := fmt.Sprintf(
"projects/%s/locations/%s/indexEndpoints/product_catalog_endpoint_id",
projectID, location,
)
deployedIndexID := "product_catalog_deployed_v1"
// 2. Construct 768-dimensional Query Embedding Vector
queryVector := make([]float32, 768)
queryVector[0] = 0.032
queryVector[1] = -0.108
queryVector[2] = 0.449
// 3. Build Nearest Neighbor Request with Boolean & Numeric Restricts
req := &aiplatformpb.FindNeighborsRequest{
IndexEndpoint: indexEndpointPath,
DeployedIndexId: deployedIndexID,
Queries: []*aiplatformpb.FindNeighborsRequest_Query{
{
Datapoint: &aiplatformpb.IndexDatapoint{
DatapointId: "query_req_001",
FeatureVector: queryVector,
Restricts: []*aiplatformpb.IndexDatapoint_Restriction{
{
Namespace: "category",
AllowList: []string{"electronics", "audio"},
},
{
Namespace: "brand",
AllowList: []string{"sony", "bose"},
},
},
NumericRestricts: []*aiplatformpb.IndexDatapoint_NumericRestriction{
{
Namespace: "price",
Value: &aiplatformpb.IndexDatapoint_NumericRestriction_ValueFloat{
ValueFloat: 350.0,
},
Op: aiplatformpb.IndexDatapoint_NumericRestriction_LESS_EQUAL,
},
{
Namespace: "in_stock",
Value: &aiplatformpb.IndexDatapoint_NumericRestriction_ValueInt{
ValueInt: 1,
},
Op: aiplatformpb.IndexDatapoint_NumericRestriction_EQUAL,
},
},
},
NeighborCount: 5,
},
},
ReturnFullDatapoint: false,
}
// 4. Execute Sub-Millisecond Vector Similarity Search
resp, err := matchClient.FindNeighbors(ctx, req)
if err != nil {
log.Fatalf("failed to execute find neighbors: %v", err)
}
if len(resp.NearestNeighbors) > 0 {
fmt.Printf("Retrieved %d nearest neighbors:\n", len(resp.NearestNeighbors[0].Neighbors))
for _, neighbor := range resp.NearestNeighbors[0].Neighbors {
fmt.Printf("Datapoint ID: %s | Distance: %.4f\n", neighbor.Datapoint.DatapointId, neighbor.Distance)
}
}
}
2. Motor RAG de Vertex AI (Nivel 2: Middleware gestionado)
Para el Motor RAG de Vertex AI Nivel 2 (Middleware gestionado), defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Registre los tiempos de ejecución y el costo en tokens o consultas junto con los resultados funcionales. Tener visibilidad temprana del costo evita facturas inesperadas cuando el proceso pasa de entornos de demostración a entornos compartidos. Cite los pasajes que realmente sirvieron de base para la respuesta; sin citas, los operadores no pueden distinguir entre alucinaciones y brechas en el indexado.
Arquitectura y mecanismos básicos
En cuanto a la arquitectura y mecánicas básicas, defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Guarde la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de datos confidenciales y las banderas de funcionalidad deben encontrarse en un lugar donde los operadores puedan auditarlos sin necesidad de leer todo el sistema. Cite los pasajes que realmente sustentan la respuesta. Sin citaciones, los operadores no pueden distinguir entre alucinaciones y lagunas en el indexado. En cuanto a la arquitectura y mecánicas básicas, defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el error debe indicar una única responsabilidad y no un proceso complejo e entrelazado.
e.Otra ventaja arquitectónica: backends de base de datos vectoriales conectables
Al abordar el tema de Otra ventaja arquitectónica: backends de base de datos vectoriales conectables, anote primero el contrato: entradas requeridas, señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Considere esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina comprobaciones de éxito y evite completaciones parciales silenciosas. Mida el recuerdo en un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente.
Por qué esta arquitectura desacoplada es revolucionaria
Al trabajar en el documento “Why This Decoupled Architecture is a Game-Changer”, anote primero el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Registre los tiempos de ejecución y el costo en tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando se pasa de entornos de demostración a entornos compartidos. Mida el rendimiento en un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente.
Caso de uso en producción: Asistente para políticas de recursos humanos empresariales y cumplimiento normativo
Al trabajar en el caso de uso de producción: Asistente para políticas de recursos humanos empresariales y cumplimiento regulatorio, anote primero el contrato: entradas requeridas, señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Guarde la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de secretos y las banderas de funcionalidad deben estar en un lugar donde los operadores puedan auditarlos sin tener que leer todo el sistema. Mida la capacidad de recuperación con un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente. Al trabajar en el caso de uso de producción: Asistente para políticas de recursos humanos empresariales y cumplimiento regulatorio, anote primero el contrato: entradas requeridas, señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una única solución.
la viabilidad en lugar de un proceso complicado.Código: Generación basada en datos con Vertex RAG Store
Código: Generación basada en datos con Vertex RAG Store funciona mejor cuando se trata como una superficie medible. Capture una transcripción ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Considere esta etapa como un contrato entre las entradas y las salidas validadas. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace completaciones parciales silenciosas. Separe la política de fragmentación de la política de recuperación. Cambiar una no debe obligar a reescribir la otra cuando cambian las métricas de calidad.
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
projectID := "my-enterprise-gcp-project"
location := "us-central1"
// 1. Initialize Google GenAI Client with Vertex AI Backend
client, err := genai.NewClient(ctx, &genai.ClientConfig{
Project: projectID,
Location: location,
Backend: genai.BackendVertexAI,
})
if err != nil {
log.Fatalf("failed to initialize genai client: %v", err)
}
// 2. Reference the Managed RAG Corpus Resource
// (Corpus can be backed by RagManagedDb, Vertex Vector Search, Weaviate, or Pinecone)
ragCorpusResource := fmt.Sprintf(
"projects/%s/locations/%s/ragCorpora/enterprise_hr_policies_corpus",
projectID, location,
)
// 3. Configure Grounding Tool with Vertex RAG Store and Semantic Reranking
config := &genai.GenerateContentConfig{
Tools: []*genai.Tool{
{
Retrieval: &genai.Retrieval{
VertexRagStore: &genai.VertexRagStore{
RagResources: []*genai.VertexRagStoreRagResource{
{RagCorpus: ragCorpusResource},
},
SimilarityTopK: genai.Ptr(int64(3)),
VectorDistanceThreshold: genai.Ptr(0.5),
},
},
},
},
}
// 4. Generate Grounded Response with Gemini 3.5 Flash
prompt := "Summarize our international meal reimbursement policy and specify receipt requirements."
result, err := client.Models.GenerateContent(ctx, "gemini-3.5-flash", genai.Text(prompt), config)
if err != nil {
log.Fatalf("failed to generate grounded content: %v", err)
}
// 5. Output Synthesized Text and Inspect Verifiable Grounding Supports
fmt.Println("--- Grounded Answer from Gemini ---")
fmt.Println(result.Text())
if len(result.Candidates) > 0 && result.Candidates[0].GroundingMetadata != nil {
meta := result.Candidates[0].GroundingMetadata
fmt.Printf("\nGrounding supports detected: %d\n", len(meta.GroundingSupports))
for _, support := range meta.GroundingSupports {
if support.Segment != nil {
fmt.Printf("Segment: %q (Grounded by chunks: %v)\n", support.Segment.Text, support.GroundingChunkIndices)
}
}
}
}
3. Recuperación de agentes de Vertex AI (Nivel 3: Razonamiento autónomo)
- Vertex AI Agent Retrieval (Nivel 3: Razonamiento autónomo) funciona mejor cuando se trata como una superficie medible. Capture una transcripción ejemplar, un caso de fallo y la nota de reversión antes de ampliar el alcance. Registre los tiempos y el costo en tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando se pasa de entornos de demostración a entornos compartidos. Asigne un presupuesto de tokens por turno y por sesión. Las herramientas agentes amplían el contexto de manera intensiva; los límites estrictos impiden que las demostraciones se conviertan en facturas inesperadas.
Arquitectura central y atributos clave
La Arquitectura Básica y los Atributos Clave funcionan mejor cuando se tratan como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Mantenga la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de secretos y las banderas de funcionalidad deben estar en un lugar donde los operadores puedan auditarlos sin tener que leer todo el sistema. Separe la política de particionamiento de la política de recuperación. Cambiar una no debe obligar a reescribir la otra cuando cambian las métricas de calidad. La Arquitectura Básica y los Atributos Clave funcionan mejor cuando se tratan como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y probables sobre scripts extensos. Cuando falla un paso, el fallo debe apuntar a una única responsabilidad en lugar de a un proceso complicado.
Atributos Clave de la Recuperación por Agente de Vertex AI
Para los atributos clave de la función de recuperación de Vertex AI Agent, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Trate esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Cite los pasajes que realmente sirvieron de base para la respuesta. Sin citaciones, los operadores no pueden distinguir entre alucinaciones y brechas en el indexado.
Caso de uso en producción: Agente autónomo de resolución de incidentes SRE DevOps
Para casos de uso en producción: Agente autónomo de resolución de incidentes SRE DevOps. Defina las entradas, el responsable de cada paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Registre los tiempos de ejecución y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando se pasa de entornos de demostración a entornos compartidos. Cite los pasajes que realmente sustentan la respuesta; sin citas, los operadores no pueden distinguir entre alucinaciones y lagunas en el indexado.
Código: Creación de un agente autónomo con Google ADK
Para el código: Construcción de un agente autónomo con Google ADK, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Guarde la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de secretos y las banderas de funcionalidad deben encontrarse en un lugar donde los operadores puedan auditarlos sin tener que leer todo el sistema. Cite los pasajes que realmente sustentan la respuesta. Sin citaciones, los operadores no pueden distinguir entre alucinaciones y lagunas en el indexado. Para el código: Construcción de un agente autónomo con Google ADK, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el error debe apuntar a una única solución.
la viabilidad en lugar de un proceso complicado.package main
import (
"context"
"fmt"
"log"
"google.golang.org/adk/agent"
"google.golang.org/adk/model"
"google.golang.org/adk/runner"
"google.golang.org/adk/tool"
"google.golang.org/adk/tool/vertexsearch"
)
// TelemetryQueryParams defines input arguments for the structured telemetry tool.
type TelemetryQueryParams struct {
ServiceName string `json:"service_name" jsonschema:"description=The target microservice name (e.g. payment-gateway)"`
TimeWindowMinutes int `json:"time_window_minutes" jsonschema:"description=The lookback window in minutes"`
}
// TelemetryReport defines the structured metrics returned to the agent.
type TelemetryReport struct {
Service string `json:"service"`
TimeWindow string `json:"time_window"`
ErrorRate float64 `json:"error_rate_percentage"`
DominantStatus string `json:"dominant_http_status"`
RootDependency string `json:"root_downstream_dependency"`
ActiveRestarts int `json:"active_pod_restarts"`
Region string `json:"region"`
}
// QuerySystemTelemetry is a custom tool function registered with the ADK agent.
func QuerySystemTelemetry(ctx context.Context, params TelemetryQueryParams) (TelemetryReport, error) {
// Simulated query against Cloud Spanner and BigQuery live telemetry
return TelemetryReport{
Service: params.ServiceName,
TimeWindow: fmt.Sprintf("%dm", params.TimeWindowMinutes),
ErrorRate: 14.8,
DominantStatus: "504 Gateway Timeout",
RootDependency: "auth-token-validator-v2",
ActiveRestarts: 12,
Region: "us-central1",
}, nil
}
func main() {
ctx := context.Background()
projectID := "my-enterprise-gcp-project"
// 1. Create Structured Telemetry Function Tool using Google ADK
telemetryTool, err := tool.NewFunction(
"query_system_telemetry",
"Queries Cloud Spanner and BigQuery for live microservice error rates and container health.",
QuerySystemTelemetry,
)
if err != nil {
log.Fatalf("failed to create telemetry tool: %v", err)
}
// 2. Configure Vertex AI Search Datastore Retrieval Tool in Google ADK
datastoreResource := fmt.Sprintf(
"projects/%s/locations/global/collections/default_collection/dataStores/sre-runbooks-datastore",
projectID,
)
runbookTool, err := vertexsearch.NewDatastoreTool(vertexsearch.DatastoreConfig{
Name: "sre_runbook_search",
Description: "Searches authoritative SRE incident runbooks, architecture specs, and standard operating procedures (SOPs).",
DatastoreID: datastoreResource,
})
if err != nil {
log.Fatalf("failed to create vertex search tool: %v", err)
}
// 3. Define Autonomous SRE Agent using Google ADK
systemInstruction := `You are an expert Autonomous Site Reliability Engineering (SRE) Incident Agent.
When investigating production alerts:
1. Use query_system_telemetry to inspect live metrics and isolate the failing component.
2. Formulate a targeted search query with sre_runbook_search to find the exact recovery SOP.
3. Synthesize a comprehensive Incident Diagnosis Report containing:
- Root cause analysis with telemetry evidence
- Step-by-step remediation commands cited directly from the runbook
- Actionable rollback or mitigation steps.`
sreIncidentAgent, err := agent.New(agent.Config{
Name: "sre_incident_investigator",
Model: model.Gemini("gemini-3.5-flash"),
Description: "Autonomous SRE agent that investigates telemetry, retrieves runbooks, and drafts mitigation plans.",
Instruction: systemInstruction,
Tools: []tool.Tool{telemetryTool, runbookTool},
})
if err != nil {
log.Fatalf("failed to initialize ADK agent: %v", err)
}
// 4. Execute Multi-Turn Autonomous Workflow with Google ADK Runner
r := runner.NewInMemoryRunner(sreIncidentAgent)
userIncidentPrompt := "CRITICAL ALERT: Payment service checkout latency spiked to 4500ms in us-central1. " +
"Investigate the payment-gateway service, locate the relevant runbook, and recommend immediate remediation."
response, err := r.Run(ctx, userIncidentPrompt)
if err != nil {
log.Fatalf("agent execution failed: %v", err)
}
fmt.Println("--- Agentic Incident Resolution Plan ---")
fmt.Println(response.Text())
}
4. Marco de toma de decisiones: Elegir el servicio Google RAG adecuado
Al trabajar en la sección 4. Marco de toma de decisiones: Elegir el servicio Google RAG adecuado, anote primero los requisitos del contrato: entradas necesarias, señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Considere esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina comprobaciones de éxito y evite completaciones parciales silenciosas. Mida la capacidad de recuperación con un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente.
Matriz de comparación
Al trabajar con la Matriz de Comparación, anote primero el contrato: los datos requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Registre los tiempos y el costo de tokens o consultas junto a los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando se pasa de entornos de demostración a entornos compartidos. Mida el rendimiento en un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente.
5. Resumen y conclusiones arquitectónicas
Al trabajar en la sección 5. Resumen y conclusiones arquitectónicas, anote primero el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Mantenga la configuración fuera del código de la aplicación. Los archivos de entorno, los almacenes de datos secretos y las banderas de funcionalidad deben estar en un lugar donde los operadores puedan auditarlos sin tener que leer todo el sistema. Mida la capacidad de recuperación con un conjunto fijo de preguntas antes de ajustar los prompts. El cambio constante de prompts rara vez soluciona un sistema de recuperación deficiente. Al trabajar en la sección 5. Resumen y conclusiones arquitectónicas, anote primero el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Prefiera unidades pequeñas y verificables a scripts extensos. Cuando un paso falla, el fallo debe apuntar a una única responsabilidad y no a un proceso complicado.
Lista de verificación operativa
Al trabajar en la lista de verificación operativa, anote primero el contrato: los datos necesarios, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista mantiene honestas las futuras modificaciones del código.
Documente tanto el camino óptimo como el de recuperación. Los intentos repetidos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son mejoras posteriores.
Mida la capacidad de recuperación con un conjunto fijo de preguntas antes de ajustar los prompts. El cambio frecuente de prompts rara vez soluciona un sistema de recuperación deficiente.
Mantenga el estado del grafo simple y estructurado. Los bloques anidados ocultan qué nodo escribió qué campo y provocan interrupciones en la continuación del proceso tras las interrupciones.
Evalúe por separado las respuestas de una sola ronda y las trayectorias de varias rondas. La agregación de puntuaciones de chat oculta los fallos en el ciclo del herramienta.
Escriba un breve manual de operaciones: cómo rotar las claves, cómo vaciar la cola y cómo revertir la última inserción.
Antes de promocionar el conjunto de tecnologías, congele las versiones, capture una transcripción de referencia para la ruta crítica y confirme los pasos de reversión. Los entornos compartidos requieren límites de velocidad, verificaciones de tenencia y un responsable claro para la rotación de credenciales secretas. Prefiera una fiabilidad sencilla a demostraciones ingeniosas pero puntuales.
Nota para el lote 331adf7ac401: mantenga las claves del proveedor fuera del repositorio, establezca un límite para los tokens por sesión y almacene las transcripciones junto a los archivos de prueba para que los cambios en los modelos posteriores sigan siendo comparables.
Lecturas relacionadas
- Bases de datos vectoriales explicadas: el motor que está detrás de RAG y la búsqueda con IA — Aprenda cómo las bases de datos vectoriales convierten texto en embeddings, potencian la búsqueda semántica y las pipelines RAG, e impulsan aplicaciones de IA en el mundo real como las recomendaciones.