Акты Становления

011: Агент/Выражения

Это специальный способ записи, который позволяет объединить несколько путей в ссылке на переменную или пути вывода. С его помощью можно создавать потоки данных, которые работают по условию или одновременно (параллельно).

Ссылки на переменные и пути вывода — это как провода, по которым текут данные. А выражения — это как переключатели и разветвители для этих проводов, они добавляют в схему логику.

Это простой, но мощный способ создавать условия («если..., то...») и параллельные потоки данных. Благодаря им агент может вести себя сложнее и умнее, подстраиваясь под ситуацию.

В выражениях используются два знака: || (означает «ИЛИ») для условий и && (означает «И») для одновременных действий. Их можно применять двумя способами: чтобы собрать данные для инструмента из разных мест или чтобы отправить результат работы инструмента в несколько мест сразу.

Входные выражения (Много-в-один)

†state.userInput

processData(data)

†state.default

Когда выражения используются во входных параметрах вызова инструмента, они позволяют одному параметру получать данные из нескольких источников. Это создаёт поток данных типа «многие-к-одному» (M:1), что позволяет гибко агрегировать данные, например, используя запасные варианты (fallback) или объединяя данные.

Эта возможность очень важна для создания надёжных инструментов, которые можно использовать много раз. Вместо того чтобы требовать данные в строго определённом формате, инструмент может сам подстраиваться под ситуацию и брать информацию оттуда, где она есть в данный момент.

Запасной вариант с ||

Когда в ссылке на переменную используется ||, это работает как запасной вариант. Выражение †state.userInput || †state.default говорит системе: сначала поищи данные в state.userInput. Если их там нет, возьми данные из state.default. Это удобно, чтобы задавать значения по умолчанию или работать с необязательными данными.

{
  "_tool": "processData",
  "data": "†input.optionalData || †state.defaultData"
}

Одновременная зависимость с &&

Когда в ссылке на переменную используется &&, это работает как пропускной пункт. Он проверяет, что все нужные данные существуют. Если все на месте, выражение передаёт значение последнего пути в цепочке. Это отличный способ убедиться, что инструмент запустится только тогда, когда все необходимые для него данные готовы.

// Этот инструмент запустится, только если загружены и профиль пользователя, и его права.
// Параметр `permissions` получит значение из `†state.permissions`.
{
  "_tool": "renderDashboard",
  "permissions": "†state.userProfile && †state.permissions"
}

Выходные выражения (Один-ко-многим)

verifyUser()

†data.user.verified

†data.user.failed

Когда выражения используются в пути вывода, они позволяют записать результат работы одного инструмента сразу в несколько мест. Это создаёт поток данных типа «один-ко-многим» (1:M), что позволяет создавать ветвления (когда в зависимости от результата выбирается разный путь) и веерную рассылку (когда результат отправляется всем сразу).

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

Альтернативные пути (Ветвление) с ||

Использование || в пути вывода позволяет инструменту объявить возможные исходы своей работы. Логика самого инструмента решает, по какому пути записать результат. Это полезно для создания условий, когда инструмент может либо успешно завершить работу, либо потерпеть неудачу.

// Если `verifyUser` сработал успешно, результат записывается в `data.user.verified`;
// в противном случае — в `data.user.failed`
{
  "_tool": "verifyUser",
  "userId": "perfect-stranger",
  "_outputPath": "†data.user.verified || †data.user.failed"
}

Одновременные пути (Веерная рассылка) с &&

Использование && в пути вывода даёт команду системе сделать «веерную рассылку» — записать один и тот же результат в несколько мест одновременно. Это полезно, чтобы оповестить о результате разные части системы или для записи в журнал событий.

// Одновременная запись в объекты `user` и `audit` в состоянии.
{
  "_tool": "generateSummary",
  "text": "Long body of text here...",
  "_outputPath": "†data.user.summary && †data.audit.summary"
}

От выражений к стратегиям

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

В следующем документе, 012: Агент/План, рассказывается, как эти гибкие связи используются для построения полноценного, стратегического Плана.