Галоўная / Артыкулы / Практычныя прыемкі: Дистыляцыя малага модэлю — Частка 2: KD з мягкімі пазначэннямі па правілах

Практычныя прыемкі: Дистыляцыя малага модэлю — Частка 2: KD з мягкімі пазначэннямі па правілах

Практычныя прыказкі: Дистыляцыя малагахоўскага модэлю — Частка 2: Off-Policy Soft-Label KD: контракты, перакананні і слоты для коду для команд, якія викорыстоўваюць гэты патэрн.

3831 слоў

Існавайце гэта як перапрацоўаны варыянт ідэй з документа “Small-Model Distillation — Part 2: Off-Policy Soft-Label KD for a 0.8B SQL Agent”, адпрацаваны для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы.

Короткая сутнасць

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

Што вы хацелі перапрацаваць

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

Проблема SQL-Agent

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

WITH vars AS (SELECT COUNT(*) AS vars_id FROM track)
SELECT * FROM track WHERE track_id = vars_id
{"draft":"Need schema first.","output":{"action":"inspect_schema"}}
{"draft":"Test a candidate query.","output":{"action":"run_sql_query","sql":"SELECT ..."}}
{"draft":"Submit corrected SQL.","output":{"action":"submit_sql","sql":["SELECT ..."]}}

Ідея адучэння

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

Короткае поясненне навчальнага коду

Этап «A Small Educational Code» працюе найкраща, калі яго розглядаць як меркавыя парадакты. Зберагчыце адны ідеальны прыклад роботы, адну справу з бягамі і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Запісвайце часы выканання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з’являецца перашкоду неспакойным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя сераўры. Задаце бюджет токеноў на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмавай версіям ператварыцца на неспакойныя рахунки. Этап «A Small Educational Code» працюе найкраща, калі яго розглядаць як меркавыя парадакты. Зберагчыце адны ідеальны прыклад роботы, адну справу з бягамі і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Дакументавайце як успешны, так і вярнучыся парадакты роботы. Перапрыбуткі, людзкія контрольны пункты і обработка неканальных запытаў є часткай продукту, а не чымсь, што дадаецца пазней.

row = {
    "messages": conversation_before_teacher_decision + [
        {"role": "assistant", "content": canonical_decision_json(teacher_decision)}
    ],
    "teacher_draft": teacher_decision.draft,
    "teacher_action": teacher_decision.output,
}
row = {
    "messages": [..., {"role": "assistant", "content": target_decision_json}],
    "distillation": {
        "probability_model": "Qwen3.5-35B-A3B 8-bit",
        "top_k": 20,
        "row_weight": 1.18,
        "token_scores": [
            {
                "position": 1661,              # full-sequence token position
                "target_token_id": 412,
                "target_logprob": -0.21,
                "top_token_ids": [412, 879, 91],
                "top_logprobs": [-0.21, -2.81, -3.51],
                "top_mass": 0.90,
                "tail_mass": 0.10,
            }
        ],
    },
}
prompt = chat_template(messages[:-1], add_generation_prompt=True)
full = chat_template(messages, add_generation_prompt=False)
prompt_ids = tokenize(prompt)
full_ids = tokenize(full)
target_ids = full_ids[len(prompt_ids):]
prefill_teacher_cache(prompt_ids[:-1])
driver_ids = [prompt_ids[-1]] + target_ids[:-1]
for i, target_id in enumerate(target_ids):
    logits = qwen_35b(driver_ids[i]).logits
    logprobs = log_softmax(logits)
    top_ids, top_logprobs = top_k(logprobs, k=20)
    save_token_score(
        position=len(prompt_ids) + i,
        target_token_id=target_id,
        target_logprob=logprobs[target_id],
        top_token_ids=top_ids,
        top_logprobs=top_logprobs,
        tail_mass=1.0 - sum(exp(top_logprobs)),
    )
labels = full_ids.copy()
labels[: len(prompt_ids)] = -100
hard_ce = cross_entropy(student_logits, labels)
batch = {
    "input_ids": pad(input_ids, pad_id),
    "attention_mask": pad(attention_mask, 0),
    "labels": pad(labels, -100),
    "position_weights": pad(position_weights, 0.0),
    "topk_token_ids": pad(topk_token_ids, [0] * top_k),
    "topk_logprobs": pad(topk_logprobs, [0.0] * top_k),
    "topk_mask": pad(topk_mask, [False] * top_k),
    "tail_probs": pad(tail_probs, 0.0),
}
z = (mean_target_logprob - dataset_mean_logprob) / dataset_logprob_std
row_weight = clip(2 / (1 + exp(-z)), 0.25, 1.75)
loss = row_weight * hard_ce
teacher_top_probs = exp(top_logprobs) * topk_mask
teacher_top_probs *= (1.0 - tail_mass) / sum(teacher_top_probs)
student_logprobs = log_softmax(student_logits_at_target_positions)
student_top_logprobs = gather(student_logprobs, topk_token_ids)
student_tail_prob = 1.0 - sum(exp(student_top_logprobs))
topk_kl = sum(teacher_top_probs * (log(teacher_top_probs) - student_top_logprobs))
tail_kl = tail_mass * (log(tail_mass) - log(student_tail_prob))
loss = hard_ce + topk_kl + tail_kl
student = load_student("unsloth/Qwen3.5-0.8B", max_seq_length=4096)
student = add_lora_adapters(
    student,
    rank=32,
    alpha=32,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
)
trainer_class = make_trainer_class(Trainer, soft_label_args)
trainer = trainer_class(
    model=student,
    train_dataset=scored_train_examples,
    eval_dataset=scored_validation_examples,
    data_collator=distillation_collator,
    batch_size=1,
    gradient_accumulation_steps=8,
    learning_rate=5e-5,
    epochs=3,
)
trainer.train()
adapter = save_lora_adapter(student)
for task in held_out_eval_tasks:
    state = start_sql_agent_task(task)
    for turn in range(8):
        messages = render_baml_messages(state)
        decision = model_with_adapter.generate_action(
            messages,
            max_new_tokens=512,
            temperature=0.0,
        )
        state = execute_action_and_append_observation(state, decision)
        if state.solved or state.stopped:
            break
    results.append(score_final_submission(state))

Як адмініструецца эксперымент

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

Набор даных і фільтрацыя

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

Наладка навчання

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

Рэзультаты як пытанні даследжэння

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

Точныя цыфры за графікамі

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

Аналіз невыпання

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

Урокі з апаратнай часткі і інфраструктуры

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

Што вы навучыліся

Этап «Што вы навучыліся» працюе наякша, калі яго спрыяваць як мерыемую плошчу. Запісаўце адна «золатая» транскрыпцыю, адин прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Спрыявайце гэты этап як кантракт межа вхіднымі дадзеннямі і паверыжанымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задач. Задаце бюджет токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.

Заключэнне

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

Чэрніця кантролю

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

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

Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Павторны адправкі ідэнтычных даных ўсё чащэ становяцца прычыной некалькіх проблем.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Документавайце як «шчаслівы» шлях, так і шлях вяснавання. Практыкі падзеў, людскія етапы контролю і адарожванне некоректных пакетаў є часткай продукту, а не чымсь, што дадаецца пазней.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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