СодержаниеРазделов: 4
Экономика агентов4 мин чтения
x402 двигает деньги. Он не говорит, кто это разрешил
x402 даёт агенту способ заплатить за запрос. И намеренно ничего не говорит о том, кто решил, что агенту можно тратить, на что и до какого потолка. Этот вопрос не исчезает, когда платить становится легко, - он дорожает.
Mikhail Savchenko
Короткий ответ
x402 - это расчётный рельс: сервер отвечает на запрос кодом HTTP 402 и условиями оплаты, клиент платит и повторяет запрос с доказательством. Это транспортный вопрос, и x402 отвечает на него хорошо. Он не отвечает на лежащий под ним вопрос о полномочии: кто решил, что этот агент вправе тратить, на что, до какого потолка и что происходит, когда ответ отрицательный. Рельс переносит ценность после того, как кто-то решил. Решение - другая система, и агент, умеющий платить без неё, не автономен, а бесконтролен.
HTTP 402 лежит в спецификации с 1997 года - зарезервированный, с пометкой, что предназначен для будущего использования. Почти всю историю веба это был код состояния, за которым нечего было сказать стандартного, - а это не то же самое, что невозможность его вернуть, и сводится к той же тишине.
x402 дал ему продолжение. Сервер отвечает на запрос кодом 402 и условиями, на которых ответил бы по-настоящему. Клиент платит. Он повторяет запрос с доказательством, и теперь сервер отдаёт. Ни аккаунта, ни заранее обменянного ключа, ни человека с обоих концов. Для машины, покупающей один вызов API, это ровно та форма, что нужна, и спроектировано это по-настоящему хорошо.
И это, намеренно, только половина задачи.
Что такое рельс и чем он не является
Расчётный рельс закрывает два вопроса: как ценность переходит от A к B и как B узнаёт, что она дошла. Карточные сети закрыли их давно, банковские переводы тоже. x402 закрывает их для машины, которая платит за один запрос, - тот случай, с которым старые рельсы справляются плохо.
Третий вопрос не закрывает ни один рельс: а стоило ли A платить вообще.
У человека этого вопроса обычно не видно, потому что решает и платит один и тот же человек, и решает он про себя. У агента это два разных лица. Агент тратит не свои деньги: дал их кто-то другой, выписку читать тоже кому-то другому, а сам он действует по указанию, которое дали раньше, другими словами и про ситуацию, которой тогда не было.
Разрыв этот не транспортный, и чем меньше трения в транспорте, тем он шире. Пока платить было трудно, трение работало вместо контроля.
Три вещи, нужные тратящему агенту, которых рельс не даёт
Запись о том, на что кто-то согласился. Число в конфиге не годится: это догадка того, кто конфиг писал. Нужна запись о согласии принципала, привязанная к агенту, которую можно предъявить потом и прочитать человеку, которого при этом не было.
Правило, которое не сдаётся уговорам. Агент читает чужой текст как часть работы, а чужой текст умеет с ним спорить. Указание держится ровно до того, как посреди задачи попадётся что-нибудь убедительнее. Поэтому то, что должно держаться в любом случае, проверяет система на той стороне вызова, а не контекст агента.
Способ отдать назад то, что он решать не вправе. Агенту без пути наверх остаются два хода, действовать или отказать, и оба неверны как раз там, где это важно. Покупка, чуть выходящая за условия, - ровно та, которую человек хотел бы увидеть.
Что построили мы и зачем здесь каждая часть
Платежей мы не делаем. Клуб гоняет между агентами вопросы, а не деньги: ваш агент спрашивает агента другого участника на условиях, которые задали оба принципала. Денег тут нет, а вопрос о полномочии тот же самый, и поэтому всё это переносится.
Агент участника работает на условиях мандата - подписанной записи о том, что он вправе обсуждать, что раскрывать, можно ли его цитировать, как часто его можно прерывать и что он обязан эскалировать. У мандата есть версии, и какая из них действовала на момент вызова, видно из самого вызова.
Действующие права агента - это пересечение областей его токена и этого мандата, и считают его заново на каждом запросе. Эту часть обычно пропускают, а от неё и зависит, правда ли всё остальное. Если права заморожены в учётных данных при выдаче, то сужение мандата завтра не меняет ничего из уже розданного. Пришлось бы найти каждый токен и отозвать, включая забытые. А если пересечение считать на каждом вызове, сужение достаёт до всего само, без единого действия.
Из семи областей mandate:write не получает ни один собранный нами агент. Агент, способный расширить собственный мандат, мандата не имеет.
Отвечающий агент работает в изолированном контексте без инструментов. Он может вам рассказать и не может согласиться, забронировать, купить или пообещать. Только из-за этого предела участники и выставили агента наружу: худший случай - фраза, которой они не написали бы, а фразу можно поправить. Обязательство поправить нельзя.
Чего мандат не покрывает, то уходит наверх: становится решением в очереди принципала вместе с тем, из-за чего возникло. Человек отвечает, уже имея контекст перед глазами, а не собирая его заново.
И каждый вызов записывается с привязкой к агенту, принципалу и учётным данным, по которым он пришёл. Не ради самого журнала, а потому что у вопроса «кто это разрешил» должен быть ответ и после события, а не только до него.
Проверка
Когда платежи агентов станут обыденностью, систем, заявляющих, что агент вправе тратить, будет много. Серьёзные от остальных отделяет один вопрос.
Если принципал сузит свои условия сегодня, станут ли уже, чем были, учётные данные, выданные в прошлом месяце?
Если да, то условия - мандат: их читают в момент вызова, и они связывают всё, что в обращении. Если нет, это служебная записка, однажды скопированная в несколько токенов, и контроля у принципала сегодня меньше, чем было при выдаче. Для системы, которая вот-вот начнёт тратить его деньги, это движение не в ту сторону.
x402 на этот вопрос не отвечает, и не должен. Отвечать должен кто-то.
В цифрах
- 402 Payment Required был зарезервирован в спецификации HTTP и оставался нестандартизованным около двадцати пяти лет, пока x402 не дал ему определённое применение.
- Запрос «x402» набирает около 3600 обращений в месяц в США при сложности, на которой термин фактически не защищён, а его первая страница выдачи занята почти целиком сайтами самого протокола и участниками его фонда.
- В нашем клубе действующие права агента - это пересечение областей его токена и мандата принципала, пересчитываемое на каждом запросе, а не замороженное при выдаче.
- Из семи областей доступа mandate:write не получает ни один агент, которого собирает клуб: агент, способный расширить собственный мандат, мандата не имеет.
- Отвечающий агент работает в изолированном контексте вообще без инструментов, поэтому внешняя граница его ошибки - фраза, а не обязательство.
Вопросы
- Разве x402 вообще не занимается полномочиями?
- Он занимается той частью, которой платёжному протоколу и положено: доказательством, что конкретный платёж сделан за конкретный запрос. Чего он не делает и на что не претендует - это установить, что плательщик был вправе платить. Это дело того, кто выдал агенту деньги и указания. Смешивать одно с другим - ошибка, которую стоит назвать заранее, потому что отказ выглядит как успешный платёж. Все поля проходят проверку, деньги уходят, и ни у кого из участников нет записи о том, что человек на это соглашался.
- Разве лимита на трату недостаточно?
- Лимит - это потолок ущерба, а не изложение намерения, и это самая лёгкая половина. Он говорит, что агенту можно потратить сотню; он не говорит, на что, за кого и какие покупки следовало вернуть человеку. Лимит ещё и плохо стареет: в первый же раз, когда он заблокирует законное, его кто-нибудь поднимет, и храповик работает в одну сторону. Держится другое - запись о том, на что принципал действительно дал согласие, применяемая в момент вызова, а не читаемая задним числом.
- Почему важно, пересчитываются права или лежат в токене?
- Из-за того, что происходит, когда человек передумал. Если права впечатаны в учётные данные в момент выдачи, то сужение условий не меняет ничего из уже разошедшегося, и единственное лекарство - найти и отозвать все когда-либо выданные учётные данные. Пересчёт пересечения на каждом запросе делает сужение обратно действующим по построению: оно достаёт и до тех данных, о которых вы забыли. В этом разница между мандатом и служебной запиской.
- Вы встраиваете платежи в клуб?
- Нет. Клуб перемещает вопросы между агентами, а не деньги, и отвечающий агент вообще не имеет инструментов: он может проинформировать и не может обязать. Мы пишем об этом потому, что слой над рельсом - это тот самый слой, который мы строили год, а платёжные протоколы делают его сейчас несущим для всех остальных.