Практычныя нататкі: вывучаем LangGraph — агенты, дошкі і іншае
Практычны разбор тэмы «вывучэнне LangGraph праз агентаў і патэрн «дошкі»»: кантракты, праверкі і гатовыя фрагменты кода для каманд, якія ўкараняюць гэты падыход.
Крыніцы: Learning LangGraph : A Journey Through Agents, Blackboards, and Bottlenecks
Наступныя прыміткі паказваюць практычны шлях для вівучэння “Learning LangGraph : A Journey Through Agents, Blackboards, and Bottlenecks”. Акцэнт ставіцца на контракты, пераконтроўванні і месца для коду, які можна легка адразу вставіць, а не на мотывацыйныя аспекты. Калі працуеце над адглядам, спачатку запісайце контракт: неабходныя вхідныя даны, сігнал успеху і тое, што відбываецца у разе частковай нявыполнення. Такі спіс контролю дапамагае залішацца чыстаснаўным пад час пазнейшых змян у кодзе. Запісвайце час выканання і вартасць токенав або запыткаў праза функцыйнае рэзультат. Відразувыя даны пра вартасць запобегаюць неспакоўным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўы.
Шаг 1: Мінімальны агент
Шаг 1: Мінімальны агент працюе найкрашча, калі яго розглядаць як вімерную паверхню. Зафіксавайце адна «золатая» транскрыпцыя, адзін прыклад неудачы і запіску пра вярнэнне да пачатковага стану перш чым расшырваць сферу дзеяння. Зберагаюце настройкі пазначыльна коду прыемлена. Файлы сераўіснага сэрвісу, хранілішчы секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Зберагаюце стан графа ў простам і тыпаваным фармаце. Вкладныя блокі маскуюць інфармацыю пра тое, які вузел запісаў які поле, і спакоююць працэс пасля перарываў.
from langchain.agents import create_agent # langchain 1.x (NOT langgraph.prebuilt)
from langchain.tools import tool
from langchain_anthropic import ChatAnthropic
# 1. Model
llm = ChatAnthropic(model="claude-haiku-4-5", max_tokens=1024)
# 2. Tool — a plain function + @tool.
# - type hints (drug_name: str) become the input schema
# - the docstring is what the LLM reads to decide WHEN to call it
# The model only "sees" the signature + docstring, so write the docstring
# like an API description.
@tool
def get_drug_targets(drug_name: str) -> str:
"""Return the protein targets for a given drug name."""
return "EGFR, BRAF" # real data-source call goes here
# 3. System prompt — a plain string
SYSTEM_PROMPT = "You are a research assistant. Use the tools to gather evidence."
# 4. Build the agent
agent = create_agent(model=llm, tools=[get_drug_targets], system_prompt=SYSTEM_PROMPT)
# 5. Run it — pass in {"messages": [...]}, get the full message list back
result = agent.invoke({"messages": [{"role": "user", "content": "What does metformin target?"}]})
print(result["messages"][-1].content) # last message = final answer
@tool
def calculator(expression: str) -> str:
"""Evaluate a basic arithmetic expression like '2 + 2 * 3'."""
return str(eval(expression)) # fine for learning; never eval untrusted input in prod
Шаг 2: Даўедзенне двух агентоў да взаімнай свярэнні
Шаг 2: Найэфектывнейшы спосаб прыведзення двух агентаў да супрацоўкі — гэта калі яго расследжваць як мерыябельную структуру. Запісайце адна ідэальная транскрыпцыю, адзін прыклад неудачы і прыметку па адкату перш чым расшырваць масштабы. Дакументавайце як шлях успеху, так і шлях вяснавання разам. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Храніце стан графа ў простым і тыпаванам фармаце. Вярнутыя блокі маскуюць, які вузел запісаў канкрэтны поле, і спакшуюць продовжэнне працы пасля перарываў.
Варыянт 1: Паведамленні
Варыянт 1: Сістэма Messages працюе найкрашча, калі яе розглядаць як меркавыя елемент. Зберагчыце адны ідэальны прыклад працы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць сферу ўжытку. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты працы графа павінны быць простымі і з адначытаемымі дадзеннямі. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, каней вузел запісаў канкрэтны поле, і спакоююць працу пасля перэрываў. Варыянт 1: Сістэма Messages працюе найкрашча, калі яе розглядаць як меркавыя елемент. Зберагчыце адны ідэальны прыклад працы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць сферу ўжытку. Запісвайце час выканання задач, а таксама вартасць токеноў чы запытанняў разам з функцыйнальнымі рэзультатамі. Відразувая вартасці запобегае неспакойным расчыткам, калі працэс пераходзіць з дэмавайнага рэжыма ў спяльныя сераўы.
Варыянт 2: Blackboard
Для варыянта 2: Blackboard, паказваець неабходнасць указваць вхідныя даны, адміністратара крока і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Конфігурацыю трэба залічыць параду ад коду прыкладнення. Файлы сераўнавання, сховішчы секрэтных дадзеных і флагі функцый належыць у аднам месца, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Паець людскія падтверджэння для рэбер, якія вітрачаюць грошы або зменяюць даны у працэйнай сітцы. Падключэння ў час компілявання не адпавядае пачатковай цэлесообразнасці бізнесу.
Крок 3: Выявленне запісаных дадзеных з аднаго агента
Для трэцьяго крока: выкарыстоўвання введзеных дадзэнняў з адного агента, перш чым зменіць код, неабходна задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перзапускіць крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія пераказы і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не елементамі пазнейшай дапрацоўкі. Неабходна прыняць рашэнне чалавека ў тых віпадках, калі выконуецца вылучэнне грошаў або зміняюцыся даны для працы. Працэс кампілявання не ёсць гарантыяй повнай адпаведнасці продукту бізнес-трэбованням.
from pydantic import BaseModel, Field
class ResearchOutput(BaseModel):
attraction: str = Field(description="2 sentences about the attraction")
city: str = Field(description="1 sentence about the city it is in")
agent = create_agent(
model=llm,
tools=[attraction_info, city_info],
system_prompt=SYSTEM_PROMPT,
response_format=ResearchOutput, # <- agent emits this typed object
)
result = agent.invoke({"messages": [...]})
out = result["structured_response"] # a ResearchOutput instance
out.attraction # str
out.city # str
def research_node(state):
out = research(state["topic"]) # ResearchOutput
return {"research": out.attraction, "city": out.city}
Спаянне, якое гэта стварае
Для стваранага такога з’яўлення касавання, перш чым зменшваць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны працэс. Неабходна людская апраўда для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны у працэсе віробніцтва. Працэс складання коду не ёсць гарантыяй полнай адпрацоўкі бізнес-функцый. Для стваранага такога з’яўлення касавання, перш чым зменшваць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна фіксаваць час выканання, а таксама вартасць токеноў чы запітоў разам з функцыйнальнымі рэзультатамі. Відразувая візуабілізацыя вартасцей запобегае неспакою, калі працэс пераходзіць з дэмовай асяроддзя ў спакульнаныя сераўы.
SYSTEM_PROMPT = "...\n" + "\n".join(f"- {t.name}: {t.description}" for t in TOOLS)
Чатыры варыянты, по аднам крану кожны
Калі працюеце з чатырамі варыянтамі, по аднам крану кожны, спачатку запісайце умовы контракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцвачыць змяны ў кодзе. Зберагаюце настройкі за межамі коду прыемліка. Файлы сераўнавання, хранільнікі секрэтных даных і флагі функцый належаць у аднам месца, куды аператары можаць пераглядаць іх без неабяжлівага чытання всей структуры. Стварайце контрольныя пункты пасля дорогіх крокаў. Функцыя вярнення працы не должна занова ставіць плату за той самы вызов LLM, калі аператар перапрыяўляе працу да наступнага вузла.
Крок 4: Чаму гэта так медленна — і што на самай працы гэта лечыць
Калі вы працуеце над крокам 4: «Чаму гэта так медленна — і што на самай працоўнае гэта лячыць», спачатку запісайце умовы працы: неабходныя даны, сігнал успеху і тое, што выходзіць пад частым невялікім бракам. Такі спіс контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Запісуйце адночасна шлях успеху і шлях вяснавання сітуацыі. Перапрыбуткі, людзкія перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Стварайце контрольныя пункты пасля дорогіх крокаў. Сістэма вярнення працы не должна знову ставіць плату за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.
def _crowd_score_sync(attraction: str) -> str: # plain blocking function
total = 0
for i in range(60_000_000):
total += i
return f"... {total % 100} ..."
@tool
async def crowd_score(attraction: str) -> str:
return await asyncio.to_thread(_crowd_score_sync, attraction)
Чаму агент ReAct застаецца медленным незалежна ад усяго
Калі працуеце над пытаннем, чаму агент ReAct застаецца медленным незалежна ад усяго, спачатку запішыце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выканаецца пад частковым нявыполненнем. Такі спіс пераканаецца, каб пазнейшыя змены коду былі чыстымі. Валіце прывілей маленькім, тэставаным елементам працы над вялікімі скрыптамі. Калі якісь крок не выйшоў, нявыполненне должна паказаць на адну адпаведальнасць, а не на заплутаны ланцужок задач. Зробіце перапаказ пасля дорогіх крокаў. Програма не должна зноў выклікаць той самы кантакт з LLM, калі аператар пракушае пазнейшы вузел. Калі працуеце над пытаннем, чаму агент ReAct застаецца медленным незалежна ад усяго, спачатку запішыце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выканаецца пад частковым нявыполненнем. Такі спіс пераканаецца, каб пазнейшыя змены коду былі чыстымі. Запісвайце час выканання і кост токеноў або запытаў пад функцыйнальнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўы.
Шаг 5: Адміністрування цэлых пайплайнаў паралельна
Шаг 5: Адміністрування цэлых пайплайнаў паралельна даходзіць до найкрашчых наследкаў, калі яго розглядаць як мерыябельную структуру. Перш чым расшырваць сферу дзеяння, зафіксавайце адна ідэальная транскрыпцыю, адзін прыклад неудачы і прыметку па аброшчанні працы. Храніце настройкі парадульна да коду прыемлівача. Файлы сераўнавальной асяроддзя, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавляць контроль без неабяжнага чытання всей структуры. Храніце стан структуры у простам і тыпаваным фармаце. Вкладнія блокі маскуюць інфармацыю пра тое, які вузел запісаў якое поле, і спакоююць возз'яджанне пасля перэрываў.
Шаг 6: Рэальнае функцыонаванне кэшавання
Шаг 6: Кэшаванне будзе працавац наявнальней, калі яго трэба расследавац як параметр, які можна змерыць. Запісаўце адны ідэальны прыклад работы, адну сітуацыю неудачы і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткаю продукту, а не элементамі пазнейшай дапрацоўкі. Рэзерваваюце стан графа ў простам і тыпізаваным фармаце. Вярнутыя структуры дакументаў маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакойваюць працэс пасля перарываў.
system_prompt = "You are a travel research agent..." # string: no keys
content = [{ # dict: has keys
"type": "text",
"text": "You are a travel research agent...",
"cache_control": {"type": "ephemeral"}, # <- attaches here
}]
from langchain_anthropic.middleware import AnthropicPromptCachingMiddleware
agent = create_agent(
model=llm, tools=[...], system_prompt=SYSTEM_PROMPT, # plain string
middleware=[AnthropicPromptCachingMiddleware()],
)
Шаг 7: Зробленае так, каб «чорная дошка» была стойкай
Шаг 7: Канцэлерскія дошкі будуць стойкія, калі іх спрыяваць як до памерэнняя поверхню. Зберагчыце адны ідэальны прыклад, адну справу з бягамі і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць сферу дзеяння. Валіце малыя, тэставаныя елементы замест большых скрыптов. Калі якісь шаг не выйшае, прычына бягу должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцуг задач. Рэзультаты графа трэба зберагчыць у простаму і тыпаванаму фармаце. Вярнутыя структуры маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спаказваюць працу пасля перарываў. Шаг 7: Канцэлерскія дошкі будуць стойкіяя, калі іх спрыяваць як до памерэнняя поверхню. Зберагчыце адны ідэальны прыклад, адну справу з бягамі і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць сферу дзеяння. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнальныя рэзультаты. Відкрытасць костаў з самага пачатку запобегае неспакойным рашчытам, калі працэс пераходзіць з дэмавайнага рэжыма ў спяльныя сераўы.
Чэк-ліст для эксплуатацыі
Для канцэларскага чак-лісту, пры змяне коду, неабходна ясная ваказка пра вхідныя даны, адміністратара крока і крэтэрыяя завершэння. Аперацыйныя працавнікі павінны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы спадарацца пра схованы статус.
Спрыяйце гэтаму этапу як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, вакажце крэтэрыяя успеху і не прабуйце прыймаць часткова завершанне без падтверджэння.
Забезпечыце людзкія падтверджэння для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе віробніцтва. Компіляцыйныя налашчэння не ёсць адпаведнікамі пачатковай цэлесообразнасці праекту.
Напісце кароткі посоўнік: як ротавацыя канты, як апустошыць очаквальную лісту, як вярнуць стан да пярэдніх налашчэнняў.
Зазначайце час выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з’являецца перашкодай неспакойным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя асяроддзя.
Неабяжна людская празначэнне для тых элементаў, якія выдвайнаюць грошы або зменяюць даныя праработкі. Працаванне ў часе компілявання не абяжаецца пачынкамі бізнес-процэсаў.
Перш чым пераводзіць стэк, заморажваюць версіі, фіксуюць «золаты» транскрыпты для крытычных ліній працы і паверачваюць крокі для адката. У спадзяльных срэдах патрэбны ліміты частоты, перакананні ў прыналежнасці і чыстае адпаведальнае аб’екта для ротацыі секрэтных дадзенняў. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Запіс для 7a480fca3eb9: не клаціце ключы прадаўцоў у рэпазітары, задаце верхнюю межу токенаў на сесію і храніце транскрыпты празаўседы ў фіксаты eval, каб пазнейшыя замены модэляў заставаліся парабяльнымі.
Калі працуеце над пунктом апрэглівання 0, спачатку запісайце умовы кантракту: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі спіс контроля дапамагае заліцвачыць пазнейшыя змены коду. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткаю продукту, а не пазнейшым дапрацоўкам.
Дзеянне апрэглівання 0/913: змерыце час выканання, класію памылак і вітрату токенав для гэтага пункту, а потым выявіце, чы хацеце застаўіць змену на адной пазначанай сэткі пытанняў, а не на адной лячбе.
Пункт апрэглівання 1 будзе працаваць наякша, калі яго спрыймаць як меравальную плошчу. Запісайце адну ідэальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярненне да пачатковага стану, перш чым расшырваце сферу дзейнасці. Спрыймайце гэты этап як кантракт межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння.
Дзеянне паўжасткі 1/913: звярніце увагу на час выканання, класы памылак і вітрату токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшацься застаўляць змяну.
Для запісу паўжасткі 2, перш чым зменяць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Канфігурацыю трэба залічыць праз аплявацыйны код. Файлы сераўіса, хранільнікі секрэтных дадзенняў і флагі функцыйяй должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаючы весь граф.
Дзеянне паўжасткі 2/913: звярніце увагу на час выканання, класы памылак і вітрату токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшацься застаўляць змяну.
Калі працуеце над пунктом 3 адзынківання, спачатку запісайце умовы: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі спіс дапамагае заліцварваць будучыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач.
Дзялянка адзынківання 3/913: змерьце час выкарыстоўвання, класыя ошыбкі і колькасць токенаў, якія былі выкарыстоўаны для гэтага пункту, а потым выявіце, чы робіць змены на адной основе фіксаванага набору пытанняў, чы не на адной лячбе.
Пункт 4 адзынківання будзе працаваць наяўней, якшо яго спрыяваць як меравальную плошчу. Запісайце адны ідэальны прыклад працы, адзін кейс неудачы і прыказку па абратанні пакуль не расшыруеце сферу дзейнасці. Запісвайце часы выкарыстоўвання і кост токенаў чы запытаў разам з функцыйнальнымі рэзультатамі. Відкрытая інформацыя пра косты запобегае неспакойным рашчыткам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя.
Дзеянне паўжчання 4/913: звярніце увагу на час выканання, класыя ошыбак і колькасць токенаў, якія былі выкарыстаны для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазырэннях, выявіце, чы хацяце застаўіць змены.
Для дзеяння паўжчання 5 перад змінай коду неабходна вялічыць параметры, выканаўцае крок і крытэрыя завершэння. Аперацыёныя працавнікі должны магчымае перадзвануць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна аддзекаваць як шлях успеху, так і шлях вяснавання проблем. Праказы, людзкія перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не чымось, што дадаецца пазней.
Дзеянне паўжчання 5/913: звярніце увагу на час выканання, класыя ошыбак і колькасць токенаў, якія былі выкарыстаны для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазырэннях, выявіце, чы хацяце застаўіць змены.
Калі працуеце над пунктом 6 адзынківання, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэты этап як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце крытэрыя успеху і не падзеўляйцеся частковым завершэнням без паведамлення.
Дзялённе 6/913 адзынківання: змерьце час выкарыстоўвання, класыя ошыбкі і колькасць токенав, якія былі выкарыстаны для гэтага пункту, а потым вынікніце рашэнне пра тое, чы хацеце застаўіць змену, адпаведна фіксаванаму набору пытанняў, а не лячэнням.
Пункт 7 адзынківання працуе лепей, калі яго спрэчваюце як меравальную плошчу. Запісайце адна ідэальная транскрыпцыя, адзін прыклад нявыпання і запіс пра адвёртыванне працы, перш чым расшырваце сферу дзейснення. Зберагайце настройкі параду ўнутры коду прыемлівача. Файлы сераўнавання, хранільнікі секрэтных даных і флагі функцый павінны знаходзіцца ў адном месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
Дзеянне паўжчання 7/913: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць змены.
Для дзеяння паўжчання 8 адначасна з перамены коду неабходна вялічыні вхідных дадзенняў, абавесцявальніка крока і крытэрыяы завершэння. Аперацыйныя працавнікі павінны магчымае перадзванаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выканаецца, прычына памылкі павінна вказываць на адну конкрэтную абавесцявальніка, а не на заплутаны ланцужок задач.
Дзеянне паўжчання 8/913: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць змены.
Калі працюеце над пунктом 9 адаптавання, спачатку запісайце шаблон: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такі спіс контроля дапамагае залічваць пазнейшыя змены коду чыста і прозрачна.
Запісвайце часы віканання, а таксама кост токенаў чы іншых запітоў праза функцыйнае рэзультат. Відразлівае відображэнне костаў з’являецца перашкоду неспакою, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя.
Дакладнасць пункта 9/913 адаптавання: звярніце увагу на час віканання, класы абяканняў і расход токенаў для гэтага пункта, а потым выявіце, чы трэба застаўляць змены на адной фіксаванай сэтке пытанняў, а не на адной лічбе прыкладаў.
Пункт 10 адаптавання будзе эфектывны, калі яго спрыяваць як меравальную плошчу. Запісвайце адны ідэальны прыклад працы, адзін прыклад абякання і запіс паўтарнага запуску, прычаму расшырваючы сферу дзеяння.
Дасведчыце як успішны, так і вярнучыся пацек. Прабавы запускі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжасткі 10/913: звярнуце увагу на час выканання, класію памылак і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хачаце застаўіць змяну.
Для запісу паўжасткі 11 перад змянай коду неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аперацыяныя працавнікі должны магчыма было перазапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Штодзе гэты этап трэба спрыятаць як кантракт між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвіце артыфакты, візначыце пераканальныя крытэрыя і адмовіцеся ад беззвучнага частковага завершэння.
Дзеянне паўжасткі 11/913: звярнуце увагу на час выканання, класію памылак і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хачаце застаўіць змяну.
Калі працуеце над пунктом 12 адаптавання, спачатку запісайце шаблон: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такій чэк-ліст дапамагае залішыцца адказным пад час будучых зменаў коду. Храніце настройкі праз чынны код аплікацыі. Файлы сераўіса, хранальнікі секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць аўдытаваць іх, не чытаючы весь код.
Дакладнасць пункту 12/913 адаптавання: звярніце увагу на час выканання, класыя ошыбакі і вітрату токенав для гэтага пункту, а потым выберыце, чы робіць змену на адной пазначанай базе пытанняў, а не на адной толькі прымітцы.
Пункт 13 адаптавання будзе эфектывны, якшо яго спрыяваць як меравальную плошчу. Запісайце адны ідэальны прыклад працы, адзін прыклад абякання і прымітку па вярнэнню да пачатковага стану, перш чым расшырваць сферу дзеяння. Валідзіце маленькія, тэставальныя елементы замест большых скрыптав. Калі якісь крок абякае, абяканне должна паказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок дзеянняў.
Дзеянне паўнэйшага забезпечэння 13/913: звярзіце вачэнне на час выканання, класыя ошыбак і колькасць токенаў, выкорыстоўваных для гэтага запісу, а пасля, на аднойчынай сэтце запытаў, а не на асобістых спазырах, вынікніце рашэнне пра тое, чы хацеце застаўіць змяну.
Для дзеяння паўнэйшага забезпечэння 14 паказваце вхідныя даны, адпаведальнага за крок і крытэрыяы завершэння прычым перад зменай коду. Аперацыйныя працавнікі павінны магчымае перадзвярнуць крок з вядомага пункта контролю, не прыпускаючы невядомага стану. Запісвайце час выканання і косць токенаў або запытаў праза функцыйнае рэзультаты. Відкрытая інформацыя пра косці запобегае неспакоўным рашчыткам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя.
Дзеянне паўнэйшага забезпечэння 14/913: звярзіце вачэнне на час выканання, класыя ошыбак і колькасць токенаў, выкорыстоўваных для гэтага запісу, а пасля, на аднойчынай сэтце запытаў, а не на асобістых спазырах, вынікніце рашэнне пра тое, чы хацеце застаўіць змяну.
Калі працюеце над пунктом 15 практыкы забезпечэння безпекі, спачатку запісайце шаблон: неабяжныя вхідныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпалення. Такі спіс контроля дапамагае залічваць будучыя змены коду чыста і адкрыта.
Документавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцці і апрацоўка некорэктных паведамленняў ёсць часткай самага продукту, а не якімісь дадатковымі правкамі пазнейшае.
Дзялей 15/913 практыкы забезпечэння безпекі: вымерайце час выканення, класы памылак і колькасць выкорыстоўваных токенав для гэтага пункту, а потым выберайце, чы робіць змену на аднойчынных крэтарах, а не на аснове індывідуальных спостарэнняў.