Главная / Статьи / Практические замечания: Что делать, если модель встраивания вашего агента скоро перестанет работать?

Практические замечания: Что делать, если модель встраивания вашего агента скоро перестанет работать?

Пошаговое руководство по практическим рекомендациям: что делать, если модель встраивания вашего агента скоро уйдёт с эксплуатации? — контракты, проверки и готовые блоки кода для команд, использующих эту схему.

4214 слов

Используйте это как переработанную версию идей из статьи «Что, если модель встраивания вашего агента скоро уйдет в прошлое?», ориентированную на операторов: четкие этапы, упорядоченные блоки кода и записи о восстановлении, сохраняющиеся при передаче задач. Этап Обзора работает наилучшим образом, если рассматривать его как измеримую основу. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Записывайте временные показатели, а также стоимость токенов или запросов рядом с функциональными результатами. Отображение стоимости на ранних этапах предотвращает неожиданные счета при переходе от демо-версии к общим средам.

Backfill
   ↓
Validate
   ↓
Canary
   ↓
Cut over
   ↓
Soak
   ↓
Clean up

Проблема

На этапе «Проблема» необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. При следующем шаге, представляющем собой код или вызов инструмента, следует предпочитать структурированные выходные данные с проверкой схемы вместо свободного текста.

1. Исторические данные

На этапе 1 «Исторические данные» необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо задокументировать как успешный, так и восстановительный сценарии работы. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой по схеме перед свободным текстовым описанием.

2. Актуальные данные

На этапе обработки данных 2 Live необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной структурой всего процесса. При следующем шаге, являющемся кодом или вызовом инструмента, предпочтительнее использовать структурированные выходные данные с проверкой соответствия шаблону вместо свободного текста. На этапе обработки данных 2 Live необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения, а также стоимость токенов или запросов. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам.

3. Трафик в производстве

При работе над третьим этапом обработки трафика в режиме производства сначала запишите условия контракта: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых заголовков — распространенная причина избыточных затрат ресурсов.

Historical data      → distributed backfill
Live changes         → async dual-write
Production traffic   → canary + guardrails

Первое правило проектирования: версионирование эмбеддингов

При работе над этапом «Первое правило проектирования» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Документируйте одновременно «успешный путь» и путь восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинакового преамбула — распространенная причина износа оборудования.

record
 ├── namespace
 ├── knowledge-base version
 ├── embed_version
 └── embedding
CREATE TABLE semantic_cache (
    id            BIGSERIAL,
    embed_version TEXT NOT NULL,
    namespace     TEXT NOT NULL,
    query_hash    BYTEA NOT NULL,
    embedding     vector(...) NOT NULL,
    response      JSONB NOT NULL,
    created_at    TIMESTAMPTZ NOT NULL DEFAULT now(),
    last_hit_at   TIMESTAMPTZ NOT NULL DEFAULT now(),
    hit_count     INT NOT NULL DEFAULT 0,
    expires_at    TIMESTAMPTZ NOT NULL,
    PRIMARY KEY (embed_version, id)
) PARTITION BY LIST (embed_version);
CREATE TABLE semantic_cache_v1
    PARTITION OF semantic_cache
    FOR VALUES IN ('gemini-embedding-001');
CREATE TABLE semantic_cache_v2
    PARTITION OF semantic_cache
    FOR VALUES IN ('text-embedding-3-large');
                 semantic_cache
                      │
          ┌───────────┴───────────┐
          │                       │
     embed_version=V1        embed_version=V2
          │                       │
      V1 vectors              V2 vectors

Этап 0 — Заполнение представления V2

При работе над этапом заполнения данных на фазе 0 сначала опишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — распространённая причина избыточных затрат. При работе над этапом заполнения данных на фазе 0 сначала опишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Записывайте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам.

SELECT * FROM semantic_cache;

0.1 Создание раздела V2

Подход «0 1: Создание сцены» работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один пример успешного выполнения, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Установите лимиты на количество токенов за раунд и сессию. Инструменты типа агентов активно расширяют контекст; строгие ограничения предотвращают появление неожиданных счетов при демонстрациях.

V1 partition
   │
   │ still serving
   ▼
V2 partition
   │
   │ being populated
   ▼
migration control table

0.2 Разделение корпуса данных на управляемые диапазоны

Подход с разделением на этапы 0 и 2 работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один пример успешного выполнения, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Документируйте одновременно путь успешного выполнения и путь восстановления. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не элементами последующей доработки. Установите лимиты на количество токенов за один ход и за сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов при демонстрациях.

┌─────────────────────────────────────────┐
│ Migration control table                 │
├──────────────┬─────────────┬────────────┤
│ Range        │ Status      │ Worker     │
├──────────────┼─────────────┼────────────┤
│ 1 - 50K      │ complete    │ worker-1   │
│ 50K - 100K   │ processing  │ worker-2   │
│ 100K - 150K  │ pending     │ worker-3   │
│ 150K - 200K  │ pending     │ worker-4   │
└──────────────┴─────────────┴────────────┘
SELECT ...
FOR UPDATE SKIP LOCKED;

0.3 Получение данных с пагинацией по набору ключей

Подход 0 3 Fetch with stage работает наилучшим образом, когда его рассматривают как измеримую структуру. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое какого-либо шага причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Установите лимиты на количество токенов за один ход и за сессию. Инструменты агентного типа активно расширяют объем контекста; жесткие ограничения помогают избежать неожиданных счетов. Подход 0 3 Fetch with stage работает наилучшим образом, когда его рассматривают как измеримую структуру. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Записывайте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-версии к общим средам.

SELECT ...
FROM semantic_cache_v1
WHERE id > :last_id
  AND id <= :range_end
ORDER BY id
LIMIT :batch_size;
Migration range
    ≈ scheduling/checkpoint boundary
Embedding batch
    ≈ model/provider throughput boundary

0.4 Генерация эмбеддингов с использованием специального пула

На этапе 0.4 Генерация эмбеддингов необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг на основе известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой схемы перед текстовыми данными произвольной формы.

Embedding capacity
                           │
            ┌──────────────┴──────────────┐
            │                             │
     online traffic                 migration traffic
            │                             │
            ▼                             ▼
       production path              dedicated pool

0.5 Буферизация и регулирование частоты записи

Для буфера и этапа 0.5 необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой по схеме перед свободным текстовым описанием.

existing records
      │
      ▼
embedding batches
      │
      ▼
buffer
      │
      ▼
throttled writes
      │
      ▼
V2 partition

0.6 Проверка каждого завершённого диапазона

Для этапа 0 6 необходимо проверять каждый этап, определять входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы вместо обширных скриптов. При сбое шага он должен указывать на конкретную причину, а не на сложную цепочку операций. При следующем шаге, являющемся кодом или вызовом инструмента, предпочтительнее структурированные выводы с проверкой схемы вместо свободного текста. Для этапа 0 6 необходимо проверять каждый этап, определять входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам.

write range
    │
    ▼
validate
    │
 ┌──┴────┐
PASS    FAIL
 │        │
 ▼        ▼
checkpoint retry
complete   │
           ▼
      persistent failure
           │
           ▼
        halt + alert

0.7 Создание индексов V2

При работе над этапом 0.7 Создание запишите сначала спецификацию: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает избегать ошибок при последующих изменениях кода. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных является распространенной причиной ресурсозатрат.

V1
├── existing data
└── existing index
V2
├── migrated data
└── new index

Этап 1 — Проверка V2 перед запуском в производство

При работе над этапом «Подтверждение версии 2», соответствующим первой фазе, сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых заголовков — распространенная причина избыточных затрат ресурсов.

row_count(V1) == row_count(V2)
retrieval_quality(V2) < retrieval_quality(V1)
Golden-set query
       │
       ├──────────────► V1 retrieval
       │
       └──────────────► V2 retrieval
                              │
                              ▼
                       quality comparison
Golden-set evaluation
          │
      ┌───┴───┐
     PASS    FAIL
      │        │
      ▼        ▼
   Canary     Stop
              tune

Фаза 2 — Тестирование нового пути с использованием канарейок

При работе над этапом Phase 2 Canary сначала запишите условия взаимодействия: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые модули вместо обширных скриптов. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — распространённая причина избыточных затрат. При работе над этапом Phase 2 Canary сначала запишите условия взаимодействия: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Записывайте время выполнения, а также стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды.

1% → 10% → 50% → 100%

2.1 Путь запроса

На этапе запроса лучший результат достигается, если рассматривать его как измеримую величину. Соберите один идеальный пример обработки запроса, один пример сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Установите лимиты на количество токенов за раунд и за сессию. Инструменты типа агентов активно расширяют контекст; жёсткие ограничения предотвращают появление неожиданных счетов при демонстрации функций.

Incoming query
      │
      ▼
   L1 cache
      │
   ┌──┴───┐
  HIT    MISS
   │       │
   ▼       ▼
return   V2 embedding
           │
           ▼
       V2 retrieval
           │
           ▼
      quality check
        ┌──┴───┐
      strong  weak
        │       │
        ▼       ▼
       RAG   fallback V1
        │       │
        └──┬────┘
           ▼
        response

Поиск с учётом версии

Этап извлечения с учетом версии работает наилучшим образом, когда его рассматривают как измеримую характеристику. Соберите один идеальный пример обработки, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не этапом последующей доработки. Установите лимиты на количество токенов за один запрос и за сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов при демонстрации функций.

namespace
+
knowledge-base version
+
embedding version
namespace   = customer-A
kb_version  = 42
embed_version = V2

2.2 Регламенты качества

Этап 2 2 Quality Guardrails работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-то шаг сбивается, причина сбоя должна указывать на конкретный элемент ответственности, а не на запутанную цепочку операций. Установите лимиты на количество токенов за один ход и за сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов. Этап 2 2 Quality Guardrails работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Записывайте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-версии к общим средам.

Состояние системы

На этапе проверки работоспособности системы необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг, исходя из известной точки контроля, без необходимости угадывания скрытого состояния. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. При следующем шаге, представляющем собой выполнение кода или вызов инструмента, предпочтительнее использовать структурированные выходные данные с проверкой соответствия шаблону, а не свободный текст.

Качество получения данных

На этапе проверки качества извлечения данных необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг, исходя из известной точки контроля, без необходимости угадывать скрытое состояние. Необходимо документировать как успешный, так и аварийный сценарии работы. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой по схеме перед использованием свободного текста.

Состояние миграции

На этапе проверки состояния миграции необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной структурой всего процесса. При следующем шаге, представляющем собой код или вызов инструмента, лучше использовать структурированные результаты с проверкой соответствия шаблону вместо свободного текста. На этапе проверки состояния миграции необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение затрат на раннем этапе помогает избежать неожиданных счетов при переходе от демо-среды к общедоступным средам.

1%
 │
 ▼
guardrail
 │ PASS
 ▼
10%
 │
 ▼
guardrail
 │ PASS
 ▼
50%
 │
 ▼
guardrail
 │ PASS
 ▼
100%

2.3 Откат должен представлять собой изменение конфигурации

При работе над этапом 2.3 «Откат должен» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность последующих изменений в коде. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых данных является распространенной причиной избыточных операций.

stop traffic
restore data
redeploy services
rebuild indexes
hope
active embed_version = V2
             │
             ▼
        config change
             │
             ▼
active embed_version = V1

Конкурентные ситуации во время дополнения данных: как насчет реальных обновлений?

При работе над этапом The Race During Backfill сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых заголовков — распространенная причина избыточных ресурсов.

10:00  worker reads record A
10:01  record A is updated
10:02  worker writes V2 generated from the older content
                application write
                        │
                ┌───────┴───────┐
                │               │
                ▼               ▼
             V1 write       async queue
                                │
                                ▼
                             V2 write

Этап 3 — Изменение пути чтения

При работе над этапом 3 «Flip the stage» сначала запишите условия взаимодействия: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые модули вместо обширных скриптов. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — распространённая причина избыточных затрат. При работе над этапом 3 «Flip the stage» сначала запишите условия взаимодействия: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Регистрируйте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным.

Before:
reads → V1
After:reads → V2

Этап 4 — Последующая настройка после изменений

Этап замачивания после изменения на этапе 4 работает наилучшим образом, если рассматривать его как измеримую поверхность. Соберите один пример успешной работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Установите лимиты на количество токенов за раунд и сессию. Инструменты агентов активно расширяют контекст; жёсткие ограничения предотвращают появление неожиданных счетов при демонстрациях.

Этап 5 — окончательная проверка и уборка

Этап окончательной верификации на этапе 5 работает наилучшим образом, если рассматривать его как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не последующими доработками. Установите лимиты на количество токенов за одну попытку и за сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов при демонстрациях.

1. Прекратить двойное запись в версии V1

Этап двойного записи 1 Stop V1 работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Предпочитайте небольшие, тестируемые единицы вместо обширных скриптов. Когда какой-то шаг сбивается, причина сбоя должна указывать на конкретного ответственного, а не на запутанную цепочку операций. Установите лимиты на количество токенов за один ход и за сессию. Инструменты агентов активно расширяют объем контекста; строгие ограничения предотвращают появление неожиданных счетов. Этап двойного записи 1 Stop V1 работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Записывайте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-версии к общим средам.

2. Проведите окончательную проверку

Для заключительной стадии проверки второго запуска необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг, исходя из известной точки контроля, без необходимости угадывать скрытое состояние. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. При следующем шаге, представляющем собой код или вызов инструмента, следует предпочитать структурированные выходные данные с проверкой схемы вместо свободного текста.

V2
 │
 ▼
final validation
 │
 ├── FAIL → stop cleanup
 │
 └── PASS
        │
        ▼
    continue cleanup

3. Удалить представление V1

Для этапа 3 «Удаление V1» необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг, исходя из известной точки контроля, без необходимости угадывать скрытое состояние. Необходимо документировать как успешный, так и аварийный сценарии работы. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой по схеме перед свободным текстовым описанием.

Backfill
  ↓
Validate
  ↓
Canary
  ↓
100% V2
  ↓
Soak
  ↓
Final validation
  ↓
Delete V1

Полный жизненный цикл

На этапе «Полный жизненный цикл» необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной структурой всего процесса. При следующем шаге, представляющем собой код или вызов инструмента, лучше использовать структурированные результаты с проверкой соответствия шаблону вместо свободного текста. На этапе «Полный жизненный цикл» необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение затрат на раннем этапе помогает избежать неожиданных счетов при переходе от демо-среды к общедоступным средам.

EMBEDDING MIGRATION
                           │
                           ▼
                    Create V2 storage
                           │
                           ▼
                      Backfill V2
                 work stealing + retries
                           │
                           ▼
                    Range validation
                           │
                           ▼
                    Build V2 indexes
                           │
                           ▼
                  Golden-set evaluation
                           │
                    ┌──────┴──────┐
                   FAIL          PASS
                    │              │
                    ▼              ▼
                stop/tune       Canary
                              1% → 10% → 50%
                                       │
                                       ▼
                                  Guardrails
                                       │
                                       ▼
                                  100% V2
                                       │
                                       ▼
                                  Read flip
                                       │
                                       ▼
                                   V2 soak
                                       │
                                       ▼
                                Final validation
                                       │
                                       ▼
                                  Drop V1
Live production writes
                           │
                           ▼
                       V1 write
                           │
                           └──── async dual-write → V2
Migration safety
                       │
        ┌──────────────┼──────────────┐
        ▼              ▼              ▼
       Data          Quality         Traffic
       safety         safety         safety
        │              │              │
   checkpoints      golden set      canary
   retries          guardrails      fallback
   validation       evaluation      rollback

При работе над этапом «Уроки, которые можно применять в разных ситуациях», сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список поможет избежать ошибок при последующих изменениях кода. Храните конфигурацию отдельно от кода приложения. Файлы с настройками, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — частая причина избыточных расходов.

При работе над этапом 1 «Создание версии с встраиванием» сначала запишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный сценарий работы и сценарий восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинакового преамбула — распространенная причина износа ресурсов.

2. Заполнение данных как инженер базы данных

При работе над этапом «Заполнение обратно» сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список контроля помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-то шаг терпит неудачу, ошибка должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых данных является распространенной причиной избыточных ресурсов.

3. Разделяйте миграцию данных и миграцию трафика

V2 exists
   ≠
V2 is trusted
   ≠
V2 is serving production

4. Считайте качество получения данных частью корректности

Data correctness
      +
Retrieval quality
      +
Production health

5. Сохраняйте старый путь в качестве резерва

6. Сделайте процесс отката скучным

change configuration
change code + redeploy + restore state

7. Удаляйте последнее

Итоги

model identity
      +
vector storage
      +
traffic routing
Partition
   ↓
Backfill
   ↓
Validate
   ↓
Canary
   ↓
Cut over
   ↓
Soak
   ↓
Clean up

Чек-лист для эксплуатации