Перейти к основному содержимому

Context engineering

После главы вы сможете ответить на исходный вопрос курса: что передавать модели на следующем витке и в следующем turn — не «всё» и не «только последний ответ», а выбранную проекцию актуального состояния.

Контекст пересобирается на каждом step

Context engineering — управление working set inference. Storage отвечает «что сохранено», retrieval — «что найдено», context policy — «что сейчас увидит модель».

Anthropic описывает context engineering как циклический отбор полезных tokens из растущего множества возможной информации. Это provider guidance, совпадающий с архитектурой capstone: Effective context engineering for AI agents.

Пять слоёв

СлойЗачемЧто нельзя подменять им
ConversationКоммуникативная историяDomain state
Current goalБлижайший outcomeСтарый user request
Task stateРешения, status, revisionsTranscript
ObservationsEvidence от toolsБезусловно актуальный факт
Retrieved memoryВыбранный прошлый/knowledge contextВечную память обо всём

Должна ли модель всегда видеть ввод пользователя?

Текущий unresolved user intent — да, напрямую или в проверяемом semantic summary. Старый дословный вопрос не обязан повторяться вечно, если:

  • ответ уже завершён;
  • новый turn имеет другую цель;
  • важные ограничения вынесены в task state/memory;
  • summary сохраняет исключения и provenance.

Потеря исходной цели опаснее потери вежливой реплики. Поэтому goal — отдельное поле, а не вывод из последнего сообщения.

Что делать с ответами прошлых итераций

Не складывайте hidden reasoning в общий массив. Для следующего step обычно нужны:

  • наблюдаемое решение (tool call или final);
  • tool result;
  • обновлённое task state;
  • unresolved error/approval;
  • короткое rationale, если оно нужно пользователю или review.

Внутренний inference trace не является source of truth и может быть недоступен. Application events и evidence должны быть достаточны без него.

History ≠ state

Старая tool-строка status=created может оставаться в transcript после того, как БД уже содержит out_for_delivery. Context builder должен либо перечитать source of truth, либо маркировать observation revision как stale.

Helios сравнивает entityRevision observation с revision task state и выставляет stale. Это упрощённая учебная политика: production freshness может зависеть от timestamp, ETag, version vector или domain-specific invalidation.

Compaction

Наивно: удалить первые N сообщений. Тогда легко потерять approval, constraint или причину решения.

Надёжнее сохранять семантические инварианты:

  • goal и non-goals;
  • accepted decisions и причины;
  • current domain/task state;
  • pending tool/approval;
  • unresolved failures;
  • evidence/provenance;
  • следующий безопасный шаг.

В capstone старый большой tool payload заменяется typed summary с исходным размером, top-level keys и provenance; самое свежее observation остаётся полным. Замена происходит только в собираемом model request и сопоставляется по callId: append-only event и исходное tool message в durable state не мутируют. Иначе экономия tokens уничтожила бы audit/replay evidence.

Четыре долговечных артефакта

Context brief

## Outcome
## Current state
## Scope / non-goals
## Constraints and authority
## Verification
## Open questions

Decision log

- Decision: использовать event log + projection.
- Why: run должен переживать restart.
- Alternatives: transcript-only, snapshot-only.
- Revisit when: все задачи станут one-shot.

Evidence ledger

ClaimEvidenceStatus
Order revision = 5get_order, revision 5confirmed
Cargo разрешёнcached policy rev 2stale
Новый retriever улучшит recallпока нет evalhypothesis

Handoff summary

## Goal and acceptance
## Decisions already made
## Changed artifacts
## Verification results
## Remaining risks
## Next safe action

Эти артефакты особенно полезны при длинной работе coding/knowledge agents; runtime может хранить их как typed state, а не Markdown.

Progressive disclosure

  1. Дать карте tools/resources и goal.
  2. Догрузить только связанный компонент.
  3. После выбора пути добавить implementation details.
  4. Для проверки получить external evidence.
  5. Сжать завершённый участок в outcome + provenance.

Это уменьшает шум, но добавляет retrieval latency и риск не найти нужное. Для короткой задачи полная маленькая инструкция лучше сложной lazy-loading системы.

Context budget strategies

СтратегияВыигрышЦенаПлохой выбор
Last-N messagesДёшевоТеряет важное не по возрастуДолгий stateful run
Semantic summaryКомпактноОшибки summaryЮридически точные формулировки
RetrievalМасштабируетсяMiss/leakage/latencyМалый фиксированный корпус
Structured state projectionПредсказуемоНужна schema/migrationЧистый creative chat
HybridЛучшее покрытиеБольше moving partsРанний прототип

Security boundary

Tool output, web page, seller description и memory record могут содержать инструкции. Context builder маркирует tool observations как trust: untrusted; role остаётся tool, provenance не теряется. Это не гарантирует, что модель никогда не поддастся injection, поэтому authority проверяется ещё раз в policy layer перед действием.

Лаборатория

npm run test:course:pattern -- "context|memory|injection"

Измените maxObservationCharacters и предскажите, какие поля переживут compaction.

Failure modes

  • Context dump: всё загружено, цель утонула.
  • Transcript as state: много сообщений, неизвестно, что истинно.
  • Stale observation: старый tool text конкурирует с новой БД.
  • Instruction in data: контент повышает собственную authority.
  • Smooth summary: ограничения исчезли, текст звучит уверенно.
  • Cross-tenant retrieval: память одного пользователя попала другому.

Self-check

  • Где отдельно хранятся goal, state и memory?
  • Как определяется freshness?
  • Какие данные нельзя summarise?
  • Что модель увидит после compaction?
  • Как provenance и tenant filter проходят весь pipeline?
  • Можно ли продолжить run без hidden reasoning прошлого step?