Галоўная / Артыкулы / Практычныя прытамулкі: Ваш агент AI не перазьявіце статтю 12

Практычныя прытамулкі: Ваш агент AI не перазьявіце статтю 12

Практычныя прыказкі: ваш агент AI не выжыве. Стаття 12: контракты, пераконтрольванні та слоты для коду для команд, якія використоўваюць гэты патэрн.

2554 слоў

У гэтым керавану практычна перакладзець шлях ад сыр'ёў да рабочай системы для статті «Ваш агент AI не выжыў. Староны 12». Акцэнт ставіцца на практычныя крокі, чысткія пераконтрацыі і код, які можна проста дадаць у репазітарый без неабясненняя меты. У стадії агульнага відзору неабходна практычна апісацыя вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перш чым змяніць код. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю без неабясненняя скрытых станоў. Конфігурацыю трэба зберагчы за межамі коду прыкладнення. Файлы сераўыску, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабясненняя всей структуры.

Дышэўская версія гэтага вучылася ў судзе

Калі працуеце над дышчанай версіяю стэйджа, спачатку запішыце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список пераконтроўкаў дапамагае заставіць пазнейшыя змены коду чыстымі. Дакументаваць трэба як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Зробіце контрольную пазнаку пасля дорогіх крокаў. Система вярнення не должна зноў вырахоўваць плата за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.

Дэбаггін — гэта не бухгалтерыя

Калі вы працуеце над адмініструванням, а не на стадыі розрахункоў, спачатку запісайце умовы кантракту: неабходныя даны, сігнал успеху і тое, што выходзіць па частым невяскованню. Такі список контроля дапамагае залічваць змяны ў кодзе чыста і прозрачна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, невяскованне павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перапактаванне пасля дорогіх крокаў. Система не павинна знову стягваць плата за той самы вызов LLM, калі аператар праказвае спробу на пазнейшым этапе.

Версія гэтай проблемы о 3 часа ночы

Калі працуеце з версіяй стадыі The 3am, спачатку запішыце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Спрыятлівайце гэтую стадыю як кантракт межа даннэмі і перакананымі выходамі. Дайце назву артыфактам, задаць правілы пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце контрольны пункт пасля дорогіх крокаў. Програма для продакцыі не должна зноў выклікаць той самы калл LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працуеце з версіяй стадыі The 3am, спачатку запішыце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Зберагачыце настройкі за межамі коду прыемленае. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.

Лепая памяць вас не ахавае

Лепшая памяць не будзе працаваць належначы, якшо яе спрыяваць як меркаваную паверхню. Запісаце адны ідеальны прыклад, адну справу з неудачай і прыметку пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контраліны і обработка некоректных паведамленняў є часткай продукту, а не наступным этапам дорабачання. Рэзервавайце стан графа як просты і з адначытаемымі дадзеннямі. Вярнутыя блокі маскуюць, який вузел запісаў канкрэтны поле, і спакоююць продовжэнне роботы пасля перарываў.

Ператворыце рашэнне на справжні об’ект

Рашынак прымкі ў формате этапа работае наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна «золатая» транскрыпцыю, адин прыклад неудачы і прыметку па вярнэнні да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэжым графа павінен быць простым і з адначыным типам дадзеных. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продажчыку роботу пасля перарываў.

from semantica.context import ContextGraph

ctx = ContextGraph(advanced_analytics=True)
decision_id = ctx.record_decision(
    category="incident_triage",
    scenario="Checkout 5xx elevated 20 minutes after release 2026.31",
    reasoning="Error onset correlates with rollout window; no infra alerts; "
              "no dependency alarms visible at time of assessment",
    outcome="classified_as_release_regression",
    confidence=0.83,
)

Адна звістка — это строчка журналу. Ланцюг — це інфраструктура.

Запіс “The One” ў цыем этапе працюе наякша, калі яго спрыяваць як меравальную паверхню. Зафіксавайце адны ідеальны прымер, адны кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Спрыявайце цыем этапам як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і не падзейвайце частковае завершэнне без адпаведных змян. Рэзультаты графа трэба падтрымваць у простам і типізаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спаказваюць возможнасць продажы роботы пасля перарываў. Запіс “The One” ў цыем этапе працюе наякша, калі яго спрыяваць як меравальную паверхню. Зафіксавайце адны ідеальны прымер, адны кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Конфігурацыю трэба знаходзіць за межамі коду прыкладнага програмы. Файлы сяродовішча, хранільнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можу аудытаваць іх без неабходнасці чытання всего графа.

triage_id = ctx.record_decision(
    category="incident_triage",
    scenario="Checkout 5xx elevated after release 2026.31",
    reasoning="Error onset correlates with rollout window; no infra alerts",
    outcome="classified_as_release_regression",
    confidence=0.83,
)

rollback_id = ctx.record_decision(
    category="remediation",
    scenario="Contain checkout 5xx",
    reasoning="Regression attributed to release; rollback is lowest-risk action",
    outcome="rolled_back_to_2026.30",
    confidence=0.91,
)
unblock_id = ctx.record_decision(
    category="release_gate",
    scenario="Resume deploy queue after containment",
    reasoning="Error rate normal for 30 minutes post-rollback",
    outcome="deploy_queue_reopened",
    confidence=0.86,
)
ctx.add_causal_relationship(triage_id, rollback_id, relationship_type="CAUSED")
ctx.add_causal_relationship(rollback_id, unblock_id, relationship_type="INFLUENCED")
why = ctx.trace_decision_chain(unblock_id)
blast_radius = ctx.analyze_decision_impact(triage_id)

Прычыннасць — гэта не паходжанне

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

from semantica.provenance import ProvenanceManager

prov = ProvenanceManager(storage_path="./provenance.db")
prov.track_entity(
    entity_id="release_2026_31",
    source="ci/pipeline_runs/2026-31/manifest.json",
    metadata={"stage": "canary", "extractor": "ManifestParser", "confidence": 0.99},
)
lineage = prov.get_lineage("release_2026_31")
prov.invalidate(
    "release_2026_31",
    agent_id="human_sre_lead",
    reason="Error attribution corrected; degradation traced to payments provider",
)

Вынесці правілы за межы запиту

Для стадіі «Выпанаваць політыку» неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і критэрыя завершэння перад змінайом коду. Аперацыяныя працавнікі павінны магчымае перапрацаваць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Калі наступны крок — це код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

from semantica.reasoning import ReteEngine, Rule, Fact, RuleType

engine = ReteEngine()
engine.build_network([
    Rule(
        rule_id="dual_control_prod",
        name="Human approval required for high blast-radius prod changes",
        conditions=[
            {"field": "env", "operator": "==", "value": "production"},
            {"field": "blast_radius", "operator": "in", "value": ["high", "critical"]},
        ],
        conclusion="require_human_approval",
        rule_type=RuleType.IMPLICATION,
    )
])
engine.add_fact(Fact("chg_014", "change", [{"env": "production", "blast_radius": "high"}]))
matches = engine.match_patterns()

Нудныя стандарты жывуць дольш за ваш фрэймворк

Ёнколі стандарты Boring будуць дзейнаць пасля завершэння вашага этапу, перад змянайом код неабходна ўзначыць вхідныя даны, адпаведальнага за этап і крэтыры завершэння. Аперацыяныя працавнікі должны магчымае перайсці этап з вядомага пункта контролю без неабясненняя схованага стану. Спрыятлівайце гэтам этапу як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, узначыць перакананні на успех і адмовіцеся ад тыхняй частковай роботы без паведамлення. Заставіце людзкую апраўдку для тых ситуацыяй, дзе відбываецца выдатак грошэй або зміняюцца даны для працы. Компіляцыйныя налашчэння не ўзначаюць павнае выпаненне бізнес-задач. Ёнколі стандарты Boring будуць дзейнаць пасля завершэння вашага этапу, перад змянайом код неабходна ўзначыць вхідныя даны, адпаведальнага за этап і крэтыры завершэння. Аперацыяныя працавнікі должны магчымае перайсці этап з вядомага пункта контролю без неабясненняя схованага стану. Зберагачыце налашчэнні параду аплікацыйскаму коду. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое працавнікі можуць аудытаваць без неабясненняя ўместа.

цэлага схема.

Какія насправды ўтратаў для вас будуць

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

Пачніце з адного рабочага процесу

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

Тое, што варта запамятаць

Калі працуеце на стадыі «Тое, што варта запамятаць», спачатку запісайце контракт: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Спрыймайце гэтую стадыю як контракт межа даннемі і перакананымі выходамі. Дайце назву артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Стварайце контрольныя пункты пасля дорогіх крокаў. Система вярнення не павінна зноў выклікаць той самы вызыв LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працуеце на стадыі «Тое, што варта запамятаць», спачатку запісайце контракт: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Зберагайце настройкі параду ад коду прыемлівача. Файлы сераў, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.

Контрольны список для эксплуатацыі

Этап перагляду канцэлкі працоў выконання работае наяўней, калі яго спрыяваць як мерыемую структуру. Запісаўце адна ідеальная версія, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы.

Запісвайце часы выканання і косты токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з самага пачатку запобегае неспакойным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўысы.

Зберагайце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў які поле, і спаказваюць продыржанне роботы пасля перарываў.

Калі дозволяе бюджет, дадзіце тэст на працясную роботу, які перабірае критычны шлях у системе CI з викорыстаннем фіксатываў, а не рэальных платных API.

Зберагайце настройкі парадульна ад коду прыемлівання. Файлы сераўыса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всего графа.

Зберагайце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў які поле, і спаказваюць продыржанне роботы пасля перарываў.

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

Прыметка для ae6c908d5bef: не кладзіце ключы прадаўцаў у репазітарый, задаце максимальную кантитатыву токенав на сесію і зберагачыце транскрыпты празаўсюды з фіксатрамі eval, каб пазнейшыя замены модэляў заставаліся пораўнанымі.

Для прыметкі па забезпечэнню безпекі на стадыі 0 неабходна ўжо пачатку змены коду адзначыць вхідныя даны, власніка етапу і крэтырыі завершэння. Аперацыяныя системы павінны магчымае перазапускати етап з вядомай точкі контролю, не падозрываючы прыхованы стан. Валіце маленькія, тэставальныя елементы працы над велікімі, заплутанымі скрыптамі. Калі етап не выйшаў, прычына неудачы павінна вказываць на адзіную адпаведальнасць, а не на заплутаны процес.

Дзеянне паўжасткі 0/966: звярніце увагу на час выканання, клас памылкі і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазырах, выявіце, чы хачаце застаўіць гэтыя змены.

Калі працуеце над першым этапам зазначэння паўжасткі, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковай памылкі. Такі список контроля дапамагае заставаць пазнейшыя змены ў кодзе чыстымі. Запісвайце час выканання і колькасць токенаў або вартасць запытку па боку функцыйнаых рэзультаатаў. Відразлівае паказанне вартасцей з’являецца перашкоду неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.

Дзеянне паўжасткі 1/966: звярніце увагу на час выканання, клас памылкі і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазырах, выявіце, чы хачаце застаўіць гэтыя змены.

Этап 2 прыткага зміцнення работае наяўна, калі яго спрыяваць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Дакументаваць трэба як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не наступным этапам дапрацоўкі.

Дзеянні прыткага зміцнення 2/966: вимеравайце час выканання, класію памылак і витрату токенав для гэтага запісу, а потым вынікайце, чы рашыцца застаўляць змяну, адпаведна фіксаванаму набору пытанняў, а не лячэнням.

Для этапа 3 прыткага зміцнення, перш чым зменяць код, задаце вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавнікі павінны магчымае перазваляць крок з вядомай точкі контролю, не спадзяваючыся на скрыты стан. Спрыявайце гэтаму этапу як кантракту межа вхіднымі данымі і падтвердзенымі выходнымі рэзультатамі. Назвайце артыфакты, задаце перакананні на успех і адмовіцеся ад беззвучнага частковага завершэння.

Дзеянне паўжасткі 3/966: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтага зьвісткі, а пасля, на аднойчынай базе пытанняў, а не на асобістых спазырах, выявіце, чы хачаце застаўіць змяну.

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

Дзеянне паўжасткі 4/966: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтага зьвісткі, а пасля, на аднойчынай базе пытанняў, а не на асобістых спазырах, выявіце, чы хачаце застаўіць змяну.

Этап 5 прыткага зміцнення работае наяўна, калі яго спрыяваць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адин прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач.

Дзеянне прыткага зміцнення 5/966: вимеравайце час выканання, класыя ошибакі і витрату токенав для гэтага запісу, а пасля, на аднойчынку з фіксаваным наборам пытанняў, а не на анекдотах, выявляйце, чы рэшыцца застаўці змяну.

Для 6-й стадзіі процеса зміцнення неабяжна практыка: перш чым зменіць код, неабяжна вказаць інпуты, адміністратара шагу та крэтыры завершэння. Аперацыйныя працавнікі должны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы прыхованы стан системы. Неабяжна фіксаваць час выкарыстоўвання тэндзоў або каштоўка запытанняў разам з функцыйнальнымі рэзултатамі. Відразувая візуабельнасць каштоўкаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спакульную.

Дзялейныя практыкі зміцнення 6/966: неабяжна вимерваць час выкарыстоўвання, класы каштоўкі тэндзоў і аб’ектаў, а таксама каштоўка тэндзоў для данай практыкі, а потым вырашаць, чы робіцца змена на адной падставе фіксаванага набору пытанняў, а не на адной лічбе індывідуальных прыкладаў.