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

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?