Практические замечания: три уровня технологии RAG в Google Cloud — поиск векторов, движок RAG и механизм получения данных через агента.
Пошаговое руководство по практическим заметкам: три уровня технологии RAG в Google Cloud — векторный поиск, движок RAG и механизм получения данных от агентов: контракты, проверки и готовые блоки кода для использования.
Используйте это как переработанную версию идей из статьи «Три уровня Google Cloud RAG: векторный поиск, двигатель RAG и механизм получения данных от агента» для операторов: четкие этапы, упорядоченные блоки кода и записи о восстановлении, которые сохраняются при передаче задач. Обзор работает лучше всего, когда рассматривается как измеримая структура. Соберите один идеальный пример работы, один случай сбоя и записи о возврате к предыдущему состоянию перед расширением объема работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое какого-либо шага причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций.
Архитектурные и абстракционные слои
Для архитектурного и абстракционного уровней необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Укажите названия результатов работы, определите критерии успеха и не допускайте молчаливого частичного завершения задачи. Цитируйте те фрагменты, которые фактически легли в основу ответа. Без цитат операторы не смогут отличить галлюцинации от пробелов в индексации.
1. Vertex AI Vector Search (Уровень 1: Высокопроизводительная инфраструктура)
Для версии Vertex AI Vector Search (уровень 1: высокопроизводительная инфраструктура) необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии системы. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение стоимости на ранних этапах предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. Необходимо указывать конкретные фрагменты текста, на которых основан ответ. Без цитат операторы не могут отличить галлюцинации от пробелов в индексации.
Основная архитектура и механизмы
Что касается основной архитектуры и механизмов, необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь код. Указывайте те участки текста, которые фактически легли в основу ответа. Без цитат операторы не смогут отличить галлюцинации от пробелов в индексации. Что касается основной архитектуры и механизмов, необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Предпочитайте небольшие, тестируемые единицы кода большим скриптам. Когда шаг не выполняется, причина сбоя должна указывать на конкретную ответственность, а не на запутанную структуру обработки данных.
e.Трёхэтапная система поиска ScaNN
При работе с трёхэтапной системой поиска ScaNN сначала опишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия элементам, определите критерии успешности и не допускайте безответственного частичного выполнения задачи. Измеряйте показатель воспроизводимости на фиксированном наборе вопросов перед настройкой подсказок. Частая смена подсказок редко помогает улучшить качество поиска.
Распределённая инфраструктура: инновации в двигателе сопоставления Vertex
При работе над проектом «Распределённая инфраструктура: инновации двигателя сопоставления вершин» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Записывайте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счёты при переходе от демо-среды к общедоступным средам. Измеряйте уровень воспроизводимости ответов на фиксированном наборе вопросов перед настройкой подсказок. Частая смена подсказок редко помогает улучшить качество поиска.
Сценарии использования Google Vector Search в производстве
При разработке случаев использования Google Vector Search в производственных условиях сначала опишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист помогает сохранять честность последующих изменений в коде. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Измеряйте показатель воспроизводимости на фиксированном наборе вопросов перед настройкой подсказок. Частая смена подсказок редко помогает улучшить качество поиска. При разработке случаев использования Google Vector Search в производственных условиях сначала опишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист помогает сохранять честность последующих изменений в коде. Предпочитайте небольшие, тестируемые единицы кода большим скриптам. Когда какой-то шаг терпит неудачу, ошибка должна указывать на конкретную ответственность, а не на запутанную цепочку операций.
1. Реальное время, мультимодальная электронная коммерция и поиск в визуальном каталоге
- Реальное время, мультимодальная электронная коммерция и поиск в визуальном каталоге работают наилучшим образом, если рассматривать их как измеримую систему. Соберите один эталонный пример успешной работы, один пример сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия соответствующим документам, определите критерии успеха и не соглашайтесь на молчаливое частичное выполнение задачи. Разделяйте политику разбиения данных на части и политику их поиска. Изменение одной из них не должно приводить к переписыванию другой при изменении показателей качества.
2. Генерация миллиардов кандидатов для систем рекомендаций
- Генерация кандидатов в масштабах миллиардов для рекомендательных систем работает наилучшим образом, когда рассматривается как измеримая структура. Перед расширением объёма работы необходимо зафиксировать один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию. Рядом с функциональными результатами следует записывать время выполнения операций, а также стоимость токенов или запросов. Отслеживание затрат на раннем этапе помогает избежать неожиданных счетов при переходе от демо-среды к общедоступным средам. Политику разбиения данных на части следует отделять от политики их поиска. Изменение одной из них не должно приводить к необходимости переписывания другой при изменении показателей качества.
3. Кластеризация финансовых мошенничеств и кибераномалий в реальном времени
- Кластеризация финансового мошенничества и кибераномалий в реальном времени работает наилучшим образом, когда рассматривается как измеримая структура. Соберите один эталонный пример записи, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема обработки. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Разделяйте политику разбиения данных на части и политику их извлечения. Изменение одной из них не должно приводить к необходимости переписывания другой при изменении показателей качества.
- Кластеризация финансового мошенничества и кибераномалий в реальном времени работает наилучшим образом, когда рассматривается как измеримая структура. Соберите один эталонный пример записи, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема обработки. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-либо шаг срабатывает некорректно, причина сбоя должна указывать на конкретную функцию, а не на запутанную цепочку операций.
Код: создание индексов, потоковая обработка данных и выполнение запросов
Для раздела «Код: создание индексов, потоковая обработка данных и выполнение запросов» необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии системы. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Укажите названия создаваемых файлов, определите критерии успеха и не допускайте молчаливого частичного выполнения задачи. Приводите цитаты из источников, на которых основан ответ. Без цитат операторы не смогут отличить галлюцинации от проблем с индексацией.
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. Vertex AI RAG Engine (уровень 2: управляемый промежуточный слой)
Для версии 2. Vertex AI RAG Engine (уровень 2: управляемый промежуточный слой) необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. Необходимо указывать конкретные фрагменты текста, на которых основан ответ. Без цитат операторы не могут отличить галлюцинации от пробелов в индексации.
Основная архитектура и механизмы
Что касается основной архитектуры и механизмов, необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь код. Указывайте те участки текста, которые фактически легли в основу ответа. Без цитат операторы не смогут отличить галлюцинации от пробелов в индексации. Что касается основной архитектуры и механизмов, необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Предпочитайте небольшие, тестируемые единицы кода большим скриптам. Когда шаг не выполняется, причина должна указывать на конкретную ответственность, а не на запутанную структуру обработки данных.
e.Ещё одно архитектурное преимущество: модульные задние планы векторных баз данных
При рассмотрении темы «Ещё одно архитектурное преимущество: модульные задние планы векторных баз данных» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Рассматривайте этот этап как договор между входными данными и проверенными выходными результатами. Дайте названия элементам кода, определите критерии успешности и не допускайте беззвучного частичного выполнения задачи. Измеряйте показатель воспроизведения на фиксированном наборе вопросов перед настройкой подсказок. Частая смена подсказок редко помогает улучшить качество поиска.
Почему такая декуплированная архитектура является прорывом
При изучении материала «Почему такая декуплированная архитектура является прорывом», сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Рядом с функциональными результатами записывайте время выполнения и стоимость токенов или запросов. Отслеживание затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды. Перед настройкой подсказок измерьте уровень воспроизводимости ответов на фиксированный набор вопросов. Частая смена подсказок редко помогает улучшить качество поиска информации.
Пример применения в производстве: Ассистент по политике кадров и соблюдению нормативов в корпорациях
При работе над случаем использования в производстве: помощник по корпоративной политике в области управления персоналом и соблюдению нормативных требований, сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Оцените точность воспроизведения ответов на фиксированном наборе вопросов перед настройкой подсказок. Изменение подсказок редко помогает улучшить качество поиска. При работе над случаем использования в производстве: помощник по корпоративной политике в области управления персоналом и соблюдению нормативных требований, сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые единицы кода большим скриптам. Если какой-то шаг не сработает, ошибка должна указывать на конкретную причину.
возможность, а не запутанная цепочка обработки.Код: Генерация на основе данных с использованием Vertex RAG Store
Код: Генерация на основе данных с использованием Vertex RAG Store работает наилучшим образом, если рассматриваться как измеримая структура. Соберите один идеальный пример вывода, один пример сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работы. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия элементам, определите критерии успеха и не допускайте молчаливого частичного завершения работы. Разделяйте политику разбиения данных на части и политику поиска информации. Изменение одной из них не должно приводить к переписыванию другой при изменении показателей качества.
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. Vertex AI Agent Retrieval (Уровень 3: Автономное рассуждение)
- Vertex AI Agent Retrieval (уровень 3: автономное рассуждение) работает наилучшим образом, когда его рассматривают как измеримую систему. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Записывайте время выполнения операций, а также стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе помогает избежать неожиданных счётов при переходе от демо-режима к общедоступным средам. Установите лимиты на количество токенов за один ход и за сессию. Инструменты типа агентов активно расширяют объём контекста; жесткие ограничения предотвращают появление неожиданных счетов во время демонстраций.
Основная архитектура и ключевые характеристики
Концепция «Основная архитектура и ключевые атрибуты» наилучшим образом работает, когда её рассматривают как измеримую структуру. Соберите один эталонный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Разделяйте политику разбиения данных на части и политику их извлечения. Изменение одной из них не должно приводить к необходимости переписывания другой при изменении показателей качества. Концепция «Основная архитектура и ключевые атрибуты» наилучшим образом работает, когда её рассматривают как измеримую структуру. Соберите один эталонный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-либо шаг срабатывает некорректно, причина сбоя должна указывать на конкретную ответственность, а не на запутанную цепочку операций.
Ключевые атрибуты механизма поиска в Vertex AI Agent
Для ключевых атрибутов механизма поиска в Vertex AI Agent необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии системы. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Укажите названия создаваемых файлов, определите критерии успеха и не допускайте безответственного частичного выполнения задачи. Указывайте конкретные фрагменты текста, на которых основан ответ. Без цитат операторы не смогут отличить галлюцинации от проблем с индексацией.
Сценарий применения в производстве: Автономный агент для решения инцидентов в рамках практик SRE и DevOps
Для сценария промышленного использования: автономный агент для решения инцидентов в рамках практик SRE и DevOps. Перед изменением кода необходимо определить входные данные, ответственного за выполнение шага и критерии завершения. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии системы. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. Необходимо указывать конкретные фрагменты текста, на которых основан ответ. Без цитат операторы не смогут отличить галлюцинации от пробелов в индексации.
Код: создание автономного агента с использованием Google ADK
Для раздела «Код: создание автономного агента с Google ADK» определите входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Указывайте те участки текста, которые легли в основу ответа. Без цитат операторы не смогут отличить галлюцинации от пробелов в индексации. Для раздела «Код: создание автономного агента с Google ADK» определите входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Предпочитайте небольшие, тестируемые единицы кода большим скриптам. При сбое шага он должен указывать на конкретную причину сбоя.
возможность использования, а не запутанную систему обработки.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. Порядок принятия решений: выбор подходящего сервиса Google RAG
При работе над разделом 4. Порядок принятия решений: выбор подходящего сервиса Google RAG сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и что происходит при частичной неудаче. Такой список поможет избежать ошибок при последующих изменениях кода. Рассматривайте этот этап как договор между входными данными и проверенными результатами. Дайте названия элементам, определите критерии успешности и не допускайте безответственного частичного выполнения задачи. Оцените уровень воспроизведения информации на фиксированном наборе вопросов перед настройкой подсказок. Частая смена подсказок редко помогает улучшить качество поиска информации.
Матрица сравнения
При работе с матрицей сравнения сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Рядом с функциональными результатами записывайте время выполнения и стоимость токенов или запросов. Отслеживание затрат с самого начала предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. Перед настройкой подсказок измерьте уровень воспроизведения ответов на фиксированный набор вопросов. Частая смена подсказок редко помогает улучшить качество поиска.
5. Итоги и архитектурные выводы
При работе над разделом 5. Краткое резюме и архитектурные выводы сначала запишите условия работы системы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность последующих изменений в коде. Храните конфигурацию отдельно от кода приложения. Файлы с настройками, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Измеряйте уровень воспроизводимости ответов на фиксированный набор вопросов перед настройкой промптов. Частая смена промптов редко помогает улучшить качество поиска. При работе над разделом 5. Краткое резюме и архитектурные выводы сначала запишите условия работы системы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность последующих изменений в коде. Предпочитайте небольшие, тестируемые модули большим скриптам. Если какой-то шаг не сработает, причина должна быть связана с одной конкретной функцией, а не с запутанной цепочкой операций.
Чек-лист для эксплуатации
При работе с операционным чек-листом сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист помогает сохранять честность последующих изменений в коде.
Документируйте одновременно «идеальный» путь выполнения и путь восстановления. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не последующими улучшениями.
Измеряйте точность воспроизведения ответов на фиксированном наборе вопросов перед настройкой подсказок. Изменение подсказок редко помогает устранить проблемы с низкой точностью поиска.
Сохраняйте структуру графа простой и типизированной. Вложенные структуры скрывают информацию о том, какой узел заполнил тот или иной поле, и мешают возобновлению работы после прерываний.
Оценивайте ответы, полученные за один обмен сообщениями, и последовательности обменов в несколько этапов отдельно. Суммирование оценок чата маскирует сбои в работе инструментов.
Напишите краткий руководство: как обновлять ключи, как опустошать очередь сообщений, как откатить последнюю загрузку данных.
Перед внедрением данной стек-технологии необходимо заморозить версии, сгенерировать эталонный отчет для критически важных этапов и уточнить шаги отката. В совместных средах требуются ограничения на частоту запросов, проверки принадлежности ресурсов и четко определенный ответственный за обновление секретов. Лучше добиваться простой надежности, чем создавать красивые одноразовые демонстрации.
Примечание для задачи 331adf7ac401: не храните ключи поставщика в репозитории, установите лимит токенов на сессию и сохраняйте отчеты рядом с фикстурами для оценки, чтобы последующие замены моделей оставались сопоставимыми.