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

Расчёт против авторизации: что агентная торговля говорит о пределах действий

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

Крупный план серверной стойки со светодиодными индикаторами и сетевыми кабелями, символизирующий сверку состояния в бэкенд-системе.

Сигнал корпуса

Повторяющийся паттерн в экспериментах с агентной торговлей: агент, получивший денежный баланс и рыночный поток данных, не просто размещает несколько продуманных ордеров. Он начинает крутиться. Покупает, продаёт, снова покупает, и журнал сделок заполняется циклами, которые не объясняются заявленной стратегией. Заманчиво прочитать это как провал стратегии — плохие сигналы, слабый аппетит к риску, слишком настойчивый промпт. Такое прочтение упускает более полезный сигнал. Интересный сбой здесь структурный: нет расчётной границы между намерением агента и состоянием, на которое он опирается в следующий момент.

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

Авторизовано — не значит исполнено

Разрешение и результат — разные вещи, и агентные фреймворки регулярно их смешивают. Агент может иметь действующий мандат на торговлю и при этом действовать на устаревшем состоянии. Мандат говорит, что ему разрешено делать; он ничего не говорит о том, что мир содержит в данный момент. Когда эти две вещи не разделены, следующее решение агента строится на предположении, а не на факте.

Рассмотрим три различных объекта, которые торговый цикл обязан держать раздельно:

  • Ордер — инструкция, которую агент имеет право выдать.
  • Исполнение — частичное или полное исполнение этого ордера площадкой.
  • Учтённая позиция — сверенное, рассчитанное владение после клиринга.

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

Повторяющиеся циклы — видимый симптом отсутствующей сверки. Если агент не может прочитать, чем он владеет, он не может знать, достигло ли цели его предыдущее действие. Поэтому он действует снова. И снова. Эта круговерть — не стратегия; это разрыв сверки, выраженный в торговой активности. Та же динамика проявляется всякий раз, когда агенту дают возможность без соответствующего пути обратного чтения.

Close-up of an industrial air duct labeled SUPPLY

Что должен нести расчётный слой

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

Ключи идемпотентности на намеренное действие, а не на запрос

Большинство реализаций идемпотентности используют ключ на HTTP-запросе. Для агента это неверная единица. Агент может повторить запрос, переформулировать промпт или породить субагента, который выдаёт то же логическое действие через другой путь. Если ключ выводится из запроса, одно и то же намерение может произвести несколько эффектов. Ключ должен выводиться из намеренного действия — стабильного идентификатора, который агент фиксирует до действия и переиспользует при каждом повторе и на каждом транспорте.

intent_id = hash(agent_id, action_type, target, quantity, window)

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

Путь отката с теми же полномочиями, что и прямой путь

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

##Blue liquid poured into glass test tubes in a lab, stock photomedia/server-rack-closeup-79da28-73e14b.jpg)

Сверка обычно представляет собой нижестоящую пакетную задачу: ночной процесс, который сравнивает внутренние записи с площадкой. Для агента это слишком медленно и слишком далеко от решения. Сверка должна быть предоставлена как инструмент, который агент может вызвать до того, как действовать снова. Инструмент отвечает на узкий вопрос: каково моё рассчитанное состояние прямо сейчас и какие из моих намерений ещё не разрешены? Агент, который может это спросить, перестанет гадать. Агент, который не может, продолжит действовать на устаревшем состоянии.

Обобщение за пределами финансов

Структура не специфична для торговли. Любая область с этапом расчёта имеет ту же форму и тот же режим отказа, когда агенту дают авторизацию без пути обратного чтения.

  • Оформление заказа. Агент авторизует платёж, платёжный процессор его захватывает, и состояние заказа рассчитывается асинхронно. Агент, который относится к авторизованному платежу как к завершённому заказу, повторит оформление, спишет дважды или пообещает запасы, которыми не владеет. Ключ идемпотентности принадлежит намерению покупки, а не вызову API.
  • Бронирование. Бронь запрашивается, подтверждается, а затем удерживается против ёмкости, которая может быть освобождена. Агент, который читает подтверждение как рассчитанную бронь, допустит перебронирование, когда удержание истечёт, потому что он так и не сверил эти две вещи.
  • Провижининг. Ресурс запрашивается, создаётся, а затем становится доступным с задержкой. Агент, который действует на запрос так, будто это уже работающий ресурс, выдаст зависимые действия против чего-то, что ещё не существует.

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

Честный компромисс

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

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

Правило дизайна

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

ПоделитьсяXLinkedInПостоянная ссылка6 мин чтения

Связанное чтение

На какие вопросы это отвечает

Why do trading agents buy and sell repeatedly?

Repeated round-trips are usually a reconciliation gap, not a strategy. If the agent cannot read back its settled position, it treats its own intent as state and acts again on stale information.

What is the difference between an order, a fill and a position?

An order is an instruction the agent may issue. A fill is the venue's execution of that order. A position is the reconciled, settled holding. Conflating them lets an agent act on cash or inventory it does not actually control.

Why key idempotency on intent rather than the request?

An agent may retry, rephrase, or route the same logical action through different requests. Keying on the request allows duplicate effects; keying on a stable intent identifier collapses them to one.

Does every agent need a settlement layer?

Any agent whose actions have a settlement step does. Read-mostly or low-stakes domains may skip it, but that trade-off should be explicit, because the failure mode is an agent that cannot tell what it has done.