Галоўная / Артыкулы

Практычныя прытамулкі: Стварэнне кваліфікацыйных агентаў

Практычныя прыказкі: стварэнне кваліфікованых агентаў – контракты, перакрыцчы і слоты для коду для команд, якія выкарыстоўваюць гэты патэрн.

Выдавец: REACTAPP.TOP13 хв чытання2943 слоў

Крыніцы: Building skilled agents

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

Што такое навык, на самай працоўні?

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

Аналагія

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

У кодзе

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

skills/
└── weather-skill/
    ├── SKILL.md          # frontmatter + instructions
---
name: weather-skill
description: Get current weather for a location. Use when the user
  asks about weather, temperature, or conditions anywhere.
---

# Get weather skill

.... {other instructions here}

Давайце створым лёгкі прыстрой для крэплення

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

from dotenv import find_dotenv, load_dotenv

from langchain.agents import create_agent
from langchain.tools import tool
from langchain_openai import ChatOpenAI

_ = load_dotenv(find_dotenv())

llm = ChatOpenAI(
    model="gpt-5.6-luna",
    use_responses_api=True,
    reasoning={"effort": "low"},  #The reasoning is medium by default so set this to l
)

@tool
def get_weather(location: str) -> str:
    """
    Get the weather for a given location
    """
    return f"The weather in {location} is sunny"

@tool
def get_exchange_rate(currency_from: str, currency_to: str) -> str:
    """
    Get the exchange rate between two currencies
    """
    return f"The exchange rate for {currency_from} to {currency_to} is 1.00"

Іспытанне навыкаў для керавання іспытам інструментаў

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

skills/
└── weather-skill/
    ├── SKILL.md
└── forex-skill/
    ├── SKILL.md
---
name: forex-skill
description: Get live exchange rates between two currencies. Use this whenever the user asks about currency conversion, exchange rates, how much something costs in another currency, or comparisons like "is the dollar strong right now" — even if they don't use the words "forex" or "exchange rate" explicitly (e.g. "how much is 500 SGD in yen", "should I exchange money now or wait"). Always use this instead of guessing from memory, since exchange rates move constantly and Claude's training data has no visibility into current rates.
---

# Forex Skill

Fetches the live exchange rate between two currencies and reports it back in a clear, practical format.

## Instructions

1. **Identify both currencies.** Convert casual references to standard 3-letter ISO codes before calling the tool (e.g. "dollars" → ask which dollar: USD, SGD, AUD, etc.; "yen" → JPY; "pounds" → GBP).
2. **Handle ambiguous currency names.** If the user says something like "dollars" or "pounds" without specifying which country, ask them to clarify before calling the tool — don't assume USD/GBP by default.
3. **Call the `get_exchange_rate` tool**, passing both currency codes:

   ```python
   get_exchange_rate(currency_from="<code>", currency_to="<code>")
   ```

4. **If the tool call fails or returns an error**, tell the user plainly that the rate lookup failed — don't fall back to guessing a rate from memory.
5. **Call once per currency pair.** For multi-currency questions (e.g. "compare SGD to USD, EUR, and JPY"), call the tool separately for each pair.
6. **Do the math for the user.** If they gave an amount ("convert 500 SGD to JPY"), multiply it out yourself using the returned rate — don't just hand back the raw rate and leave them to calculate it.

## Output format

...

## Examples

...

Эксперымент 1: Навыкі ў файлах

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

from deepagents.backends import FilesystemBackend
from deepagents.middleware import FilesystemMiddleware, SkillsMiddleware

backend = FilesystemBackend(root_dir="../", virtual_mode=True)

agent = create_agent(
    model=llm,
    tools=[get_weather, get_exchange_rate],
    middleware=[
        SkillsMiddleware(backend=backend, sources=["./skills/"]),
        FilesystemMiddleware(
            backend=backend,
            tools=["read_file"],   # read_file and nothing else
            system_prompt=None,
        ),
    ],
)

Спробуйце самі

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

>>> agent.invoke({"messages": [HumanMessage("What is the weather in Singapore?")]})

Singapore is currently **sunny**. It's a good time for outdoor plans.

Эксперымент 2: Аддаленныя навыкі

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

from urllib.request import urlopen
from deepagents.backends import StateBackend
from deepagents.backends.utils import create_file_data

backend = StateBackend()

skill_url = "https://raw.githubusercontent.com/.../langgraph-docs/SKILL.md"
with urlopen(skill_url) as response:
    skill_content = response.read().decode('utf-8')

skills_files = {
    "/skills/langgraph-docs/SKILL.md": create_file_data(skill_content),
}

agent = create_agent(
    model= llm
    middleware=[
       SkillsMiddleware(
          backend=backend,
          sources=["./skills/"]
       ),
       FilesystemMiddleware(backend=backend)
    ]
)

result = agent.invoke(
    {
        "messages": [{"role": "user", "content": "What is langgraph?"}],

        # seeded into the in-state filesystem. needed for the first run
        "files": skills_files,
    },
)

Эксперымент 3: Без інструментаў

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

---
name: weather-skill
description: Get current weather for a location. Use when the user asks
  about weather, temperature, or conditions anywhere.
---

# Get weather skill

To get the weather of a location, run:

```bash
python skills/weather-skill/scripts/get_weather.py "<location>"
```

Returns JSON with weather condition. Parse and present naturally.

Run this script on each location the user asked for, one at a time.
#skills/weather-skill/get_weather.py
def main():
    location = sys.argv[1] if len(sys.argv) > 1 else None
    if not location:
        print(json.dumps({"error": "location argument required"}))
        sys.exit(1)
    print(json.dumps({"location": location, "weather": "sunny"}))

if __name__ == “__main__”:
    main()
from deepagents.backend import LocalShellBackend

backend = LocalShellBackend(
    root_dir=str(Path.cwd()),
    virtual_mode=False,
    inherit_env=True,
)

middleware = [
    FilesystemMiddleware(
        backend=backend,
        tools=["read_file", "ls", "glob", "execute"],
        system_prompt=None,
    ),
    SkillsMiddleware(backend=backend, sources=["./skills/"]),
]

agent = create_agent(model=llm, middleware=middleware)   # no tools=

Чакайце. Чы гэта справды запрацавало?

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

Today's weather:
**Sydney:** Sunny
- **Melbourne:** Sunny

Рашэнне — логаванне, але не у stdout.

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

from pathlib import Path
import logging

LOG = Path(__file__).resolve().parent.parent / "skill.log"
logging.basicConfig(
    filename=LOG, level=logging.INFO,
    format="%(asctime)s [pid=%(process)d] %(message)s",
)
logging.info("invoked argv=%r cwd=%s", sys.argv, os.getcwd())
22:29:55,316 [pid=45724] invoked argv=[...get_weather.py, 'Sydney']    cwd=.../notebooks
22:29:55,316 [pid=45724] resolved location=Sydney
22:29:56,795 [pid=45725] invoked argv=[...get_weather.py, 'Melbourne'] cwd=.../notebooks
22:29:56,795 [pid=45725] resolved location=Melbourne

Баг, які поясніў весь дызайн

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

.

Што такое virtual_mode?

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

Актычны аргумент для всіяго дызайну

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

То кальвен жа вам трэба стварыць?

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

Але чы рэальна трэба якіясь навыкі?

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

Заключныя думкі

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

Чэк-ліст для эксплуатацыі

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

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

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

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

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

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

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

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

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

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

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

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