Практычныя прытамулкі: Інжынерыя контэкста ў практыцы: стварэнне AI для прыменення
Практычныя прыказкі: Інжынерыя контэкста ў практыцы: стварэнне AI для працы: контракты, перакантрольванні та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Наступныя прыміткі паказваюць практычны шлях аднаследжвання знань па тэму «Інжынерыя контекста на практыцы: стварэнне AI-агента для працы з Claude Agent SDK». Акцэнт ставіцца на контракты, пераконтроўкі і месца для коду, які можна легка адразу вставіць, а не на мотывацыйныя аспекты. Калі працуеце на стадії агледжэння, спачатку запісайце контракт: неабяжныя вхідныя даны, сігнал успеху і тое, што выканаецца у разе частковай нявыполненасці. Такі список контроля дапамагае залічыцца з пазнейшымі змянамі ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных поведань ўскладнень є частью самага продукту, а не пазнейшай доработкі.
Змест:
Этап стварэння спіса зместу работае наяўнацей, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія, адзін прыклад неудачы і прыметку па адвярненню перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты обработкі дадзеных павінны быць простымі та з адначыя типамі дадзеных. Вкладаныя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакоююць працу пасля перерываў.
Хочаце глыбэй разабрацца ў інжынерыі контексту?
Этап «Жадаю глыбэй» работае наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна «золатая» транскрыпцыю, адин прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Спрыяйце гэтым этапам як кантракту межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тых падчасовых завершэнняў, якія залишаюцца непазначанымі. Храніце стан графа як плоскі і з адначынным типам. Вярстакаваныя блокі маскуюць, який вузел запісаў кожны поле, і спакшваюць продажчэнне працы пасля перарываў.
1. Чаго мы ствараем
Этап «1. Чам мы ўсе» працюе найэфектывней, калі яго спрыяваць як мерыемую паверхню. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры дакументаў маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшваюць продовжэнне роботы пасля перарываў. Этап «1. Чам мы ўсе» працюе найэфектывней, калі яго спрыяваць як мерыемую паверхню. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як успішны, так і вярнучыся шляхы роботы адночасна. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
# terminal
python3 -m venv .venv
source .venv/bin/activate
python -m pip install claude-agent-sdk==0.2.139
export ANTHROPIC_API_KEY="your-api-key"
# code/
research_agent/
config.py # naive and engineered ClaudeAgentOptions
hooks.py # pre-compaction checkpoint
metrics.py # message-stream and context measurements
runner.py # repeated runs and comparison
tools.py # in-process MCP tools
workspace.py # scratchpad and bounded retrieval
knowledge/
memory_approaches.json
tests/
CLAUDE.md
2. Стварыце простую базовую лінію
Для першага, тыябо стадзіі Naive, перш чым зменіць код, неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыіям следуець магчыма быць перадзваныя з вядомай точкі контролю без неабясненняя схованага стану. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына нехаспекі должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес. Неабходна людская апраўда для тых крокаў, якія выкарыстоўваюць грошы або зменяюць даны ў працэсе виробніцтва. Компіляцыйныя налашчэння не ўзначаюць павнае адпрацоўванне бізнес-процэса.
# research_agent/minimal.py
import asyncio
from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query
QUESTION = "Compare approaches for long-term memory in production AI agents."
async def main() -> None:
options = ClaudeAgentOptions(
model="sonnet",
allowed_tools=["WebSearch", "WebFetch"],
permission_mode="dontAsk",
max_turns=20,
)
async for message in query(prompt=QUESTION, options=options):
if isinstance(message, ResultMessage):
print(message.result or "")
asyncio.run(main())
# research_agent/config.py
def naive_options(*, run_root, server, model, max_budget_usd):
tools = ["Read", "Glob", "Grep", "WebSearch", "WebFetch"]
return ClaudeAgentOptions(
cwd=run_root,
model=model,
tools=tools,
allowed_tools=[*tools, "mcp__research__*"],
permission_mode="dontAsk",
mcp_servers={"research": server},
strict_mcp_config=True,
setting_sources=[],
system_prompt={
"type": "preset",
"preset": "claude_code",
"append": NAIVE_PROMPT,
},
env={"ENABLE_TOOL_SEARCH": "false"},
max_turns=20,
max_budget_usd=max_budget_usd,
)
# research_agent/tools.py
@tool(
"load_knowledge_corpus",
"Return the entire local memory-research collection. Intended only for the naive baseline.",
{},
annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=False),
)
async def load_knowledge(_: dict[str, Any]) -> dict[str, Any]:
return _text_result(load_corpus(corpus_path))
UserMessage(question)
AssistantMessage(ToolUseBlock: load_knowledge_corpus)
UserMessage(ToolResultBlock: entire corpus)
AssistantMessage(ToolUseBlock: WebSearch + WebFetch)
UserMessage(ToolResultBlock: raw search and page content)
AssistantMessage(final report)
# Captured output: python scripts/smoke_test.py
subtype=success
result=OPENROUTER_OK
models=claude-sonnet-5
# Captured output: python scripts/show_naive_trial.py ../measurements/comparison.json
Naive trial 1
SDK result: success
Assistant steps: 4
Tool calls: 6
WebFetch: 3
WebSearch: 1
mcp__research__load_knowledge_corpus: 1
mcp__research__search_knowledge: 1
Final active context: 16,478 tokens
Final tool-result payload: 6,851 tokens
Cumulative tree input: 138,182 tokens
Estimated cost: $0.754
3. Апісанне: Вынесць рабочы стан за межы дыялогу
Для стадіі 3 «Рабочая версія з трыма элементамі» неабходна прадзеявленне вхідных дадзеных, адпаведнага адпаведальніка за крок і крэтарыяў выходу пры перадзеявленні коду. Аператары должны магчымаць паўтарнае адкананне крока з вядомага пункту контролю, не прыпускаючы нявідомага стану. Спрыятлівае ставленне да гэтай стадіі як да кантракту межаў вхідных дадзеных і перакананых выходных рэзультатаў. Назваць всі неабходныя элементы, прадзеявліць крэтарыяў успеху і не прабачаць частковага завершэння без адпаведнай падтверджэння. Патрэбна людская падтверджэння для тых крокаў, якія выкалічваюць грошы або зменяюць данні ў працэсе вырабоцтва. Компіляцыйныя налашчэння не ўзроўнаваны з абсалютным завершэнням задачі.
# research_agent/workspace.py
def initialize_workspace(root: Path, question: str) -> Path:
workspace = root / "workspace"
workspace.mkdir(parents=True, exist_ok=True)
(workspace / "artifacts").mkdir(exist_ok=True)
(workspace / "checkpoints").mkdir(exist_ok=True)
for name, template in WORKSPACE_FILES.items():
path = workspace / name
if not path.exists():
path.write_text(template.format(question=question), encoding="utf-8")
return workspace
4. Выбор: Складанне обмежанага набору для работы
Для процэсу 4 Select Assemble неабяжна стварэнне спецыяльнага этапу, калі чаго трэба з’явіць вхідныя даны, адпаведнага адпаведальнага за шаг і крэтарыі для завершэння працы перад будзь-якімі зменамі ў коде. Аператары должны магчымаць перзапуск шагу з вядомай точкі контролю, не прабуючы вычысляць захаваны стан. Неабяжна фіксацыя часу выкарыстоўвання тэкстаў або запытак, а таксама ўскладненняў, якія вони ствараюць, разам з рэзультатамі функцыянальнай працы. Візуабельнасць костоў з самага пачатку запобегае неспакойным рахункам, калі процэс пераходзіць з дэмавай версіі ў спяльныя среды. Неабяжна людская апрацоўка тых крокаў, якія выкорыстоўваюць грошы або зміняюць даны, якія викорыстоўваюцца у працэсе. Компіляцыйныя налаштаванні не є падставай для стверджэння, што продукт ўсёцікаваў. Для процэсу 4 Select Assemble неабяжна стварэнне спецыяльнага этапу, калі чаго трэба з’явіць вхідныя даны, адпаведнага адпаведальнага за шаг і крэтарыі для завершэння працы перад будзь-якімі зменамі ў коде. Аператары должны магчымаць перзапуск шагу з вядомай точкі контролю, не прабуючы вычысляць захаваны стан. Неабяжна дакументацыя як «шчаслівага» пату, так і пату вярнення ў нормальны стан. Перапрыбуткі, людская апрацоўка і кераванне ситуацыямі, калі пакеты не доходзяюць да пункту призначэння, є частью самага продукту, а не чымсь, што дадаецца пазней.
# research_agent/tools.py
@tool(
"search_knowledge",
"Search the local memory-research collection and return only the most relevant cited passages.",
{
"type": "object",
"properties": {
"query": {"type": "string", "minLength": 1},
"top_k": {"type": "integer", "minimum": 1, "maximum": 10},
},
"required": ["query", "top_k"],
"additionalProperties": False,
},
annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=False),
)
async def search_knowledge(args: dict[str, Any]) -> dict[str, Any]:
try:
return _text_result(
search_corpus(corpus_path, args["query"], args["top_k"])
)
except (KeyError, TypeError, ValueError, sqlite3.Error) as error:
return _error_result(error)
5. Складзіце: Ёсьць можласць вярнуць дадзеныя з дужаўдзіх сесый
Калі працуеце над этапам «5. Складзіце: Ёсьць можласць вярнуць дадзеныя з дужаўдзіх сесый», спачатку запісайце умовы: неабходныя данні, сігнал успеху і тое, што выканаецца у разе частковага нявыпання. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Ствараеце контрольныя пункты пасля дорогіх крокаў. Програма для продакцыі не павінна занова выклікаць той самы календарны вызыв LLM, калі аператар праказвае пазнейшы вузел.
# research_agent/hooks.py
def build_precompact_hook(workspace: Path):
async def archive_before_compaction(
input_data: dict[str, Any],
tool_use_id: str | None,
context: Any,
) -> dict[str, Any]:
del tool_use_id, context
checkpoint_dir = workspace / "checkpoints"
checkpoint_dir.mkdir(parents=True, exist_ok=True)
timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
session_id = input_data["session_id"]
trigger = input_data["trigger"]
stem = f"{timestamp}-{session_id}-{trigger}"
transcript = Path(input_data["transcript_path"])
metadata = {
"session_id": session_id,
"trigger": trigger,
"created_at": datetime.now(timezone.utc).isoformat(),
"source_transcript": str(transcript),
"custom_instructions": input_data.get("custom_instructions"),
"archived": transcript.is_file(),
}
if transcript.is_file():
shutil.copy2(transcript, checkpoint_dir / f"{stem}.jsonl")
(checkpoint_dir / f"{stem}.json").write_text(
json.dumps(metadata, indent=2) + "\n", encoding="utf-8"
)
return {}
return archive_before_compaction
6. Ізолюйце: Дазвольце спецыялістам адбываць фокусаваныя расследаванні
Калі працюеце над стадзіяй «6. Аўтаномна дэлегавацыя зусібоў», спачатку запісайце кантракт: неабходныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрацаввайце гэтую стадзію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыяі успеху і не падтрымвайце тых частковых выпанняў, якія залишаюцца непазначанымі. Зробіце пераконтроўку пасля дорогіх крокаў. Програма для продакцыі не должна занова ставіць плату за той самы вызыв LLM, калі аператар праканае пазнейшы вузел.
# research_agent/config.py
"paper-researcher": AgentDefinition(
description="Analyzes primary research papers for memory mechanisms and trade-offs.",
prompt=(
"Investigate only the assigned paper question. Use primary sources. "
"Return at most five findings, each with a URL and an explicit limitation."
),
tools=["WebSearch", "WebFetch", "mcp__research__search_knowledge"],
model=model,
),
7. Аўтаномна выделяйце выходныя рэзультаты складных інструментаў у средовышчы
Калі працуеце над стадзіяй «7 Isolate Heavy Tool», спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі список контроля дапамагае залічыць пазнейшыя змены коду адкрыта і працэйна.
Запісвайце часы выканання і кост токена або запиту праз ці функцыональныя рэзультаты. Відразлівая візуабельнае прадставлення костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзультат кожнага вызову. Без такога лёгкага следу дэбагаванне агента займае гадзіны.
Калі працуеце над стадзіяй «7 Isolate Heavy Tool», спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі список контроля дапамагае залічыць пазнейшыя змены коду адкрыта і працэйна.
Дакументавайце як «шчаслівы» шлях, так і шлях вяснавання. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
# research_agent/workspace.py (full function; use the Gist when publishing)
def materialize_source(corpus_path: Path, workspace: Path, source_id: str) -> dict:
document = next(
(item for item in load_corpus(corpus_path) if item["source_id"] == source_id),
None,
)
if document is None:
raise ValueError(f"unknown source_id: {source_id}")
path = safe_artifact_path(workspace, f"{source_id}.txt")
content = (
f"Title: {document['title']}\n"
f"URL: {document['url']}\n"
f"Published: {document['published']}\n\n"
f"{document['text']}\n"
)
path.write_text(content, encoding="utf-8")
return {
"path": str(path),
"characters": len(content),
"preview": content[:240],
}
# Captured output: python scripts/demonstrate_failure.py
Blocked artifact path: artifact name must use only letters, numbers, dots, underscores, or hyphens
8. Перадача контэксту між сесіям
Этап 8 «Перадача контэксту» працюе найэфектывней, калі яго розглядаць як параметр, які можна змерыць. Зафіксавайте адны ідеальны прыклад роботы, адну ситуацыю неудачі і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Вядзейце прывялікі, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адповядальнасць, а не на заплутаны ланцюг задач. Рэзультаты роботы графа павінны быць простымі та адпрацоўванымі. Вкладзеныя структуры маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакойваюць роботу пасля перарываў.
# examples/session_modes.py
def session_options(session_id: str) -> dict[str, ClaudeAgentOptions]:
return {
"continue": ClaudeAgentOptions(continue_conversation=True),
"resume": ClaudeAgentOptions(resume=session_id),
"fork": ClaudeAgentOptions(resume=session_id, fork_session=True),
}
9. Складанне агента, спроектаванага з урахоўваннем контэксту
Этап 9 «Складчына контекст-інжэнераванага раштры» працюе наяўней, калі яго спрацоўваюць як вимерную паверхню. Зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Спрацоўвайце гэты этап як кантракт межаў вхідных дадзеных і перакананых выходных рэзультатаў. Дайце назвы артыфактам, задаць критэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшуюць возз'яданне пасля перерываў.
# research_agent/config.py
tools = ["Read", "Write", "Edit", "Glob", "Grep", "WebSearch", "WebFetch", "Agent"]
return ClaudeAgentOptions(
cwd=run_root,
model=model,
tools=tools,
allowed_tools=[*tools, "mcp__research__*"],
permission_mode="dontAsk",
mcp_servers={"research": server},
strict_mcp_config=True,
setting_sources=["project"],
system_prompt={"type": "preset", "preset": "claude_code", "append": ENGINEERED_PROMPT},
env={"ENABLE_TOOL_SEARCH": "true"},
hooks={"PreCompact": [HookMatcher(hooks=[build_precompact_hook(workspace)])]},
agents=research_subagents(model),
max_turns=30,
max_budget_usd=max_budget_usd,
)
# research_agent/runner.py
while True:
async for message in client.receive_response():
metrics.observe(message)
report_path = workspace / "final_report.md"
if mode == "naive" or _report_meets_contract(report_path):
break
if metrics.completion_retries >= MAX_COMPLETION_RETRIES:
break
metrics.completion_retries += 1
await client.query(COMPLETION_REPAIR_PROMPT)
# Captured output: python -m unittest discover -s tests -q
----------------------------------------------------------------------
Ran 12 tests in 0.048s
OK
10. Пораўняйце две архітектуры
Этап «10 Compare the Two» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зафіксавце адны ідеальны прыклад роботы, адны прыклад неудачі і запіс пра відкатанне раней, чым расширваце сферу дзеяння. Запісвайце часы виконання і косты токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Візуабельнае прадставленне костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаныя сераверы. Храніце стан графаў у простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продовжэнне роботы пасля перарываў. Этап «10 Compare the Two» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зафіксавце адны ідеальны прыклад роботы, адны прыклад неудачі і запіс пра відкатанне раней, чым расширваце сферу дзеяння. Дакументавайце як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
# research_agent/metrics.py
if isinstance(message, ResultMessage):
self.query_results += 1
self.session_id = message.session_id
self.result_subtype = message.subtype
result = message.result or ""
self.sdk_success = (
message.subtype == "success"
and bool(result.strip())
and "not logged in" not in result.lower()
)
self.estimated_cost_usd = (
(self.estimated_cost_usd or 0.0) + (message.total_cost_usd or 0.0)
)
self.result_usage = message.usage
self.model_usage = self._merge_model_usage(self.model_usage, message.model_usage)
self.total_tree_input_tokens = self._tree_input_tokens(self.model_usage)
if isinstance(message, SystemMessage) and message.subtype == "compact_boundary":
self.compactions += 1
# terminal
python scripts/show_comparison.py ../measurements/comparison.json
# Captured output: python scripts/show_comparison.py ../measurements/comparison.json
Measured comparison - 3 runs per architecture
Metric Naive Engineered
Artifact success 3/3 3/3
SDK success 3/3 1/3
Mean tree input 102,210 737,036
Mean peak context 17,184 32,668
Final tool-result tokens 7,351 6,202
Mean subagents 0 3
Mean estimated cost $0.663 $3.270
Compactions 0 0
Хочаце глыбэй разабраць інжынерію контексту?
Для стадіі «Хочу зайсці глыбей» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.
Чэк-ліст для аперацый
Для стадіі чэк-ліста для аперацый неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.
Зберагаюце канфігурацыю праза ўнутрь коду аплікацыі. Файлы сяродавішча, храненні секрэтных дадзей і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжнага чытання всіх элементаў системы.
Неабяжнае падтверджэння чалавека трэба для операсій, якія витрачаюць грошы або зменяюць данні ў працэсе.
Напішыце кароткі путаводзік: як зменяць канфігурацыйныя ключы, як спрабаваць апрацаваць данні з очакальнай лісты, як вярнуць стан системы да пярэднега стану.
Документавайце як правільны, так і альтернатыўны парадкі працы системы. Перапрыбуткі, падтверджэння чалавека і обработка непрацясных паведамленняў є часткай продукту, а не дадатковым элементам пасля його стварэння.
Неабяжнае падтверджэння чалавека трэба для операсій, якія витрачаюць грошы або зменяюць данні ў працэсе.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычнага шляху і паказвце спосабы атрыбутавання. У спільных сэрвісах неабходны ліміты частоты запытанняў, пераконтрольванне прав на выкарыстоўвання ресурсаў і чысткі власнік для змены секрэтных даных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Прыметка для пакета 46aa5395a30a: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токеноў на кожную сесію і зберагачыце транскрыпты разам з фіксатрамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннэй.
Для прыметкі па забезпечэнню надзейнасці на стадыі 0 неабходна ўжо пачатку визначыць вхідныя даны, власніка кроку і критэрыя завершэння, перш чым зменіць код. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і вартасць токеноў або запытанняў разам з функцыйнаямі рэзультатамі. Відразлівае паказанне вартасцей запобегае неспадзяваным рахункам, калі процес пераходзіць з дэманстрацыі ў спільныя сэрвісы.
Дзеянне паўжасткі 0/807: звярніце увагу на час выканання, класыя ошибак і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазырэннях, выявіце, чы хачаце застаўіць гэтыя змены.
Калі працуеце над першым этапам зазначэння паўжасткі, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі список контроля дапамагае заставіць пасляэтапныя змены ў кодзе адпаведнымі.
Запісуйце адночасна шлях успеху і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжасткі 1/807: звярніце увагу на час выканання, класыя ошибак і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазырэннях, выявіце, чы хачаце застаўіць гэтыя змены.
Этап 2 практыкы зміцнення працюе найэфективней, калі яго розглядаць як вимерную паверхню. Зафіксавце адны ідеальны прыклад роботы, адну справу з бягамі та прыметкі па варыянты адвярнення пры розширэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі даннымі та пераканаленымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху та адмовіцеся ад безсловеснага частковага завершэння.
Дзеянне зміцнення 2/807: вимеравайце час выканання, класы каштоўкаў та витрату токенав для гэтай прыметкі, а пасля, на аднойчынку з фіксаваным наборам пытанняў, а не на аднойчынку з пераказамі, выберайце, чы рашыцца застаўіць змяну.
Для трэція ўрагу практыкы забезпечэння надзеі неабходна прадзефінавацыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымае перадзеўжваць выкананне кроку з вядомай точкі контролю, не падозрываючы прыхованы стан системы. Конфігурацыю трэба залічваць парад усередзіне коду прыкладнення. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое аперацыйныя працавнікі могу пераглядаць, не чытаючы весь код прыкладнення.
Дзеярожныя деталі 3/807: памерыце час выканання, класіі каштоўкаў і выкарыстоўвання токенаў для гэтай практыкі, а потым вынесце рашэнне пра тое, чы хацяце застаўіць змены, адпаведна фіксаванаму набору пытанняў, а не на адной лічбе прыкладаў.
Калі працуеце над 4-й стадзіяю практыкы забезпечэння безпекі, спачатку запісайце умовы кантракта: неабяжлівыя данні, сігнал успеху і тое, што выходзіць на падзею частковага нявыпання. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач.
Дзеянне 4/807 практыкы забезпечэння безпекі: замерайце час выканання, класы каштоўкаў і витрату токенав для гэтай практыкі, а потым вырашайце, чы робіць змены на адной основе фіксаванага набору пытанняў, а не на адной лячбе.
4-я стадзія практыкы забезпечэння безпекі працуе лепей, калі яе спрыяваць як меравальную плошчу. Запісайце адны ідеальны прыклад работы, адзін кейс нявыпання і прыказку па адкатаванні, перш чым расширваць масштаб. Запісвайце часы выканання і вартасць токенав або запыткаў разам з функцыйнальнымі рэзултатамі. Відкрытая інформацыя пра вартасці запобегае неспакойным рашчыткам, калі працэс пераходзіць з дэмаверыяна на спакульнаныя сераўысы.
Дзеянне паўжчання 5/807: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы робіць змены.
Для 6-й стадзіі паўжчання неабходна перад змянай коду чытко вакажаць параметры, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі должны магчымае перадзвануць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна адначасна задокументаваць шлях успеху і шлях вярнення да нормальнага стану. Практыка павторных спроб, людзкія перакрыцця і обработка некоректных паведамленняў є частью продукту, а не етапамі далейшай дапрацоўкі.
Дзеянне паўжчання 6/807: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы робіць змены.
Калі працуеце над 7-м стадзіям заўважэння па змяцненню, спачатку запісайце контракт: неабходныя вхідныя даны, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконтроўвае чыстасць пазнейшых змян у кодзе. Спрыятлівае ставленне да гэтай стадзіі як да контракта межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння.
Дзеянні па змяцненню 7/807: вымерыце час выканання, класію памылак і витрату токенав для гэтага заўважэння, а пасля выберыце, чы робіць змяну на адной пазначанай базе пытанняў, а не на адной лячбе.
7-я стадзія заўважэння па змяцненню працуе найкраща, калі яе спрыятлівае ставленне як да вимернай плошчы. Запісайце адна ідеальная транскрыпцыя, адзін прыклад невыпання і заўважэнне па анулюванні перш чым расширваце сферу дзейства. Зберагаюце конфігурацыю паза кодам прыкладнага програмнага забезпечэння. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў адном месцы, якое аператары можаць пераканаць без неабходнасці чытання всей структуры.
Дзеянне паўжчання 8/807: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы хацяце застаўіць змены.
Для 9-го этапу паўжчання неабходна перад змянай коду чытка апісаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыяныя працавнікі должны магчымае перадзвануць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес.
Дзеянне паўжчання 9/807: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы хацяце застаўіць змены.
Калі працуеце над 10-ю стадзіяй ударожэння, спачатку запісайце шаблон кантракта: неабяжныя даны, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список контроля дапамагае залічваць пазнейшыя змены ў кодзе чыста і адкрыта.
Запісвайце часы выканання, а таксама вартасць токена чыў запиту пад функцыйнальнымі рэзультатамі. Відразувыя даны пра вартасць запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Дакладнасць ударожэння 10/807: замерыце час выканання, класію паканаў і витраты токена для гэтай стадзіі, а пасля выберыце, чы хацеце застаўіць змену на адной фіксаванай сэтке пытанняў, а не на адной лічбе прыкладаў.
11-я стадзія ударожэння будзе эфектывная, калі яе спрыяваць як меравальную плошчу. Запісвайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштаб.
Дакументавайце як «вялікі» шлях выканання, так і шлях вярнэння. Перапрыбуткі, людзкія контролы і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжасткі 11/807: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенаў для гэтага зьязначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць змены.
Для 12-го этапу паўжасткі неабходна перад змянай коду адзначыць вхідныя даны, адпаведальнага за этап і крэтырыя завершэння. Аперацыяныя працавнікі должны магчыма было перазапускаць этап з вядомай точкі контролю, не падозрываючы прыхованы стан. Штодзе гэты этап трэба спрыятаць як кантрактом межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвіце артыфакты, адзначыце крэтырыі успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння.
Дзеянне паўжасткі 12/807: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенаў для гэтага зьязначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць змены.
Калі працуеце над першым этапам зміцнення, спачатку запісайте умовы: неабяцковыя даны, сигнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список дапамагае залишацца чыстым пад будучыя зміны коду. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, неудача должна вказваць на адну конкрэтную прычыну, а не на заплутаную сітку задач.
Дзеянне зміцнення 0/826: звярніце увагу на час выканання, класы памылак і витрату токенав для гэтага пункту, а потым выявіце, чы рашыцца застаўляць зміны на адной фіксаванай сэтке пытанняў, а не на індывідуальных спостарожэннях.
Першы этап зміцнення працюе лепей, калі яго спрыяглядаць як меравальную плошчу. Запісайце адны ідеальны прыклад роботы, адзін кейс неудачы і прыказку па абратанні змян перад расшырэнням масштаба. Запісвайце часы выканання і вартасць токенав або запытак пад функцыйнальнымі рэзултатамі. Відразувыя даны пра вартасці запобегаюць неспакоўным рашчыткам, калі працэс пераходзіць з дэмавай версіі ў спяльныя сераўеры.
Дзеянні паўжасткі 1/826: звярніце увагу на час працы, клас памылкі і колькасць выкарыстоўваных токенав для гэтага зьязку, а пасля выберыце, чы робіць змяну на аднойчы зафіксаванай сэтке пытанняў, а не на адзінственных прыкладах.