Inicio / Artículos / Notas prácticas: Los tres niveles de Google Cloud RAG: Búsqueda vectorial, motor RAG y recuperación por agente

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.

3958 palabras

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

  1. 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

  1. 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

  1. 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.
  2. 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)

  1. 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

  • RAG sin la mística: recuperación luego generación — Un camino sencillo desde el particionamiento y los índices hasta respuestas fundamentadas que pueden ser auditadas con operadores de citación.
  • Notas prácticas: CLAUDE.md vs SKILL.md vs MCP: La pila de agentes moderna explicada — Guía práctica de Notas prácticas: CLAUDE.md vs SKILL.md vs MCP: La pila de agentes moderna explicada: contratos, verificaciones y espacios para código reutilizable para equipos que desarrollan MCP.
  • Tu agente RAG olvida todo después de un mensaje: aquí cómo lo arreglaste con Databricks… — Guía paso a paso de Tu agente RAG olvida todo después de un mensaje: aquí cómo lo arreglaste con Databricks…: contratos, verificaciones y espacios para código listos para usar para los equipos.
  • Notas prácticas: reemplaza el cerebro de tu agente RAG con un modelo de 20B. Se hizo más inteligente. — Guía paso a paso de Notas prácticas: reemplaza el cerebro de tu agente RAG con un modelo de 20B. Se hizo más inteligente: contratos, verificaciones y espacios para código listos para usar para los equipos que desarrollan soluciones RAG.
  • Notas prácticas: RAG vs Ajuste fino vs Agentes de IA: Cuándo usar qué en sistemas de IA del mundo real — Guía práctica detallada de las Notas prácticas: RAG vs Ajuste fino vs Agentes de IA: Cuándo usar qué en sistemas de IA del mundo real: contratos, verificaciones y espacios para código listos para usar para los equipos.
  • Notas prácticas: Cada pipeline Agentic RAG utiliza búsqueda vectorial. — Guía práctica detallada de las Notas prácticas: Cada pipeline Agentic RAG utiliza búsqueda vectorial: contratos, verificaciones y espacios para código listos para usar para los equipos que desarrollan sistemas RAG sin problemas.
  • Notas prácticas: Los agentes de IA ya no necesitan búsquedas vectoriales: Adentro del Agentic — Guía práctica de Notas prácticas: Los agentes de IA ya no necesitan búsquedas vectoriales: Adentro del Agentic; la pila de búsqueda que reemplazará a RAG en 2026: contratos, verificaciones y código listo para usar.
  • Notas prácticas: Búsqueda híbrida para la memoria de los agentes: vectorial, léxica y — Guía práctica de Notas prácticas: Búsqueda híbrida para la memoria de los agentes: vectorial, léxica y: contratos, verificaciones y espacios de código listo para usar para los equipos que implementan este patrón.