Практычныя прыказкі: Што, якщо модель усаджэння вашага агента скора перестане працаваць?
Практычныя прыказкі: Што, якщо модель усаджэння вашага агента скора перестане працаваць? – контракты, пераконтрольванні та шаблоны коду для команд, якія використоўваюць такі падход.
Існавайце гэта як перапрацоўаны варыянт ідэй з артыкула «Што, якщо модель усадкі вашага агента скора перестане працаваць?» для спецыялістаў: чыткія этапы, аранжаваныя блакіткі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы. Этап «Аптаварыс» найэфектывней працюе, калі яго розглядаць як мерыябельную плошчу. Запісайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметку з вярнення да пачатковага стану прычаму расшырэння масштаба. Запісвайце часы виконання і кост токенав або запытаў праза функцыйнае рэзультат. Відразлівае паказанне костаў з’являецца прычыну неспакою, калі процес пераходзіць з дэмаверсіі ў спакульнаныя сераўысы.
Backfill
↓
Validate
↓
Canary
↓
Cut over
↓
Soak
↓
Clean up
Проблема
Для стадіі «Проблема» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры перадзмене коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба знаходзіць за межамі коду прыемленае. Файлы сераўнавання, хранілішчы секрэтных данных і флагі функцыйяў павінны быць у адном месца, якое працавнікі можуць пераглядаць, не чытаючы весь граф. Калі наступны крок — це код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.
1. Історычныя даны
Для стадіі 1 «Історыя данных» неабходна прадзефінаванне вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымае перапрацаваць крок пачаткуючы з вядомага контрольнага пункту, не прымушаныя здогадвацца пра схованы стан. Неабходна аддзеіставіць дакументацыю як для стандартнага, так і для альтернатывнага ходу выканання. Практыка павторных спроб, перакрыцчя ад чалавека і обработка непрацэсуемых паведамленняў ёсць часткай продукту, а не элементамі пазнейшага дапраўлення. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя данні з перакананням ў схеме, чым вольнай формы тэкст.
2. Жывыя данні
Для стадіі обробкі прыемных дадзей 2 Live неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтыяры завершэння перад зменым коду. Аперацыяныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выканаецца, прычына неудачы павінна вказваць на адзін конкрэтны элемент, а не на заплутаны ланцуг задач. Калі наступны крок — це код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, замест вольнага формата тэксту. Для стадіі обробкі прыемных дадзей 2 Live неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтыяры завершэння перад зменым коду. Аперацыяныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выканання і кост токенаў або запытаў разам з функцыйнаімі рэзультатамі. Відразувыя даны пра косцы запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмавай версіі ў спяльныя сераўысы.
3. Трафік у працоўным режыме
Калі працуеце з 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
Калі працуеце над стадзіяй Phase 0 Backfill, спачатку запісайце умовы кантракта: неабяжлівыя даны, сигнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканаецца, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыполнення павінна вказваць на адзіну абяжлівасць, а не на заплутаны ланцужок задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзял у тое ж самае прамэру ёсць частым выклікам затрат. Калі працуеце над стадзіяй Phase 0 Backfill, спачатку запісайце умовы кантракта: неабяжлівыя даны, сигнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканаецца, што пазнейшыя змены коду будуць чыстымі. Запісвайце час выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі праця пераходзіць з дэмавай версіі ў спяльныя сераўы.
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 перад запускам у прыемліце
Калі працюеце над стадзіяй «Парадж 1: Адзначэнне V2», спачатку запісайце угоду: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Зберагайце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перасылка ідэнтычных прамуслов ёсць частым выклікам зношэння ресурсаў.
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», спачатку запісаце кантракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптов. Калі якісь крок неяксамоства, гэта неяксамоства павінна вказваць на адну адпаведальнасць, а не на заплутаны ланцужок задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных прамаравых дастакоў — частая прычына збыткав.
Before:
reads → V1
After:reads → V2
Фаза 4 — Пасля-Flip Soak
Этап занурэння пасля перамены на 4-й фазе дае найкращыя результаты, калі яго расследжваць як меравальную паверхню. Зафіксавайце адны «золаты» прымер, адну справу з бягамі та запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Зберагаюце настройкі пазначкай за межамі коду прыемліка. Файлы сераўнавання, хранільнікі секрэтных данных та флагі функцый должны знаходзіцца ў аднам месцы, куда аператары можу працаваць без неабяжнага чытання всіх дадзеных. Встановіце ліміты токенаў на кожны раунд і на кожную сесію. Інструменты з агентным режымам актыўна расширваюць контэкст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоючыя рахункі.
5-я фаза — Завершальная перакананне і чыстка
Этап апошнайя пераканалення на 5-й фазе дае найкращыя рэзультаты, калі яго спрыявае можлівасць вимеры. Зберажыце адны ідеальны прыклад роботы, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшага дапрацоўкі. Задазвайце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоўныя рахункі.
1. Зупніце двойную запіс V1
Этап двойнага запісу The 1 Stop V1 працюе наяўней калі яго спрыяваць як до меры прыемлемых рэзультатаў. Зберагчыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс паўторнага запуску пры перадачы задання на большы масштаб. Валідзіруйце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць кроку не задаеся, прычына неудачы павінна быць асоўваная з конкрэтным элементам, а не з усім сложным ланцоўкам заданняў. Задаеце ліміты на колькасць токенав за раунд і за сесію. Інструменты з агентным падходам актыўна расширваюць контекст; строгі ліміты не дазволяюць, каб дэманстрацыі ператварыліся на неспакоючыя рахункі. Этап двойнага запісу The 1 Stop V1 працюе наяўней калі яго спрыяваць як до меры прыемлемых рэзультатаў. Зберагчыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс паўторнага запуску пры перадачы задання на большы масштаб. Запісвайце час выканання і вартасць токенав або запытак праза функцыйнае рэзультат. Відкрытая інформацыя пра вартасці заранее запобегае неспакоючым рахункам, калі процес пераходзіць з дэманстрацыі ў спяльныя сераўеры.
2. Адрабоць фінальную пераверку
Для фінальнага этапа адзыявання 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. Зробіце версію вбудоввання прадукту празнэчным элементам
Калі працуеце над стадзіяй 1 «Стварэнне версіі з вбудованым элементам», спачатку запішыце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Дакументаваць трэба як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не чыставаннем пазнейша. Зберагачвайце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадача таго ж самога прамэра є частым выклікам ресурсоў.
2. Выпаленне дадзеных даных як інжынер базы дадзеных
Калі працюеце над этапам «2 Backfill», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неудачы. Такі список пераконтроўкі дапамагае заліцьварыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісь крок не выйшае, неудача павінна вказываць на адну адповядальнасць, а не на заплутаны ланцужок задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных даных — частая прычына працоўных проблем.
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