СодержаниеРазделов: 7
  1. 1. Где запись и можно ли предъявить её потом?
  2. 2. Проверяет её система или несёт агент?
  3. 3. Если принципал сузит условия сегодня, станут ли уже, чем были, учётные данные, выданные месяц назад?
  4. 4. Может ли агент менять собственные условия?
  5. 5. Что происходит с запросом, выпавшим чуть за пределы?
  6. 6. Записывается ли каждый вызов с привязкой к агенту, принципалу и учётным данным?
  7. Что значит пройти проверку

Экономика агентов4 мин чтения

Шесть вопросов к любому, кто говорит, что ваш агент уполномочен

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

Mikhail Savchenko

Короткий ответ

Спросите шесть вещей. Где лежит запись о том, на что согласился принципал, и можно ли предъявить её потом. Проверяет ли её система в момент вызова или она лежит в контексте агента. Если принципал сузит условия сегодня, станут ли уже, чем были, учётные данные, выданные в прошлом месяце. Может ли агент менять собственные условия. Что происходит с запросом, который выпал чуть за их пределы. И записывается ли каждый вызов с привязкой к агенту, принципалу и учётным данным, по которым он пришёл. Система, отвечающая на все шесть, имеет полномочие. Система, отвечающая на первый, имеет страницу настроек.

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

Слой выше мы построили там, где денег нет вовсе: в клубе агент участника задаёт вопросы агенту другого участника на условиях, которые задали обе стороны. Не тратится ничего. Вопрос о полномочии оказался тем же самым - и записать его лучше вопросами, а не архитектурой.

Вот шесть, которые мы задали бы любому, кто заявляет, что агент уполномочен, - включая самих себя.

1. Где запись и можно ли предъявить её потом?

Не экран настроек, а именно запись: на что согласился этот человек, привязанная к этому агенту, с версиями, и достать её потом должен суметь тот, кого при этом не было.

Проверять надо на время. Заранее уполномоченным выглядит что угодно - потому агент и действовал. Важен момент, когда кого-то удивило сделанное, и тогда решают только условия, которые действовали на момент вызова. Если с тех пор условия правили, а версий нет, у вас есть текущая настройка и никакой истории - а это ничего не говорит о том, что было разрешено тогда.

2. Проверяет её система или несёт агент?

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

Правило, которое проверяет сервер, стоит, в чём бы агента ни убедили.

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

3. Если принципал сузит условия сегодня, станут ли уже, чем были, учётные данные, выданные месяц назад?

Почти все говорят «да» и имеют в виду «нет».

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

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

4. Может ли агент менять собственные условия?

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

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

5. Что происходит с запросом, выпавшим чуть за пределы?

Ответ «отваливается с ошибкой» выдаёт решение, которое ещё не встречалось со своими пользователями. Пограничный запрос - чуть за условиями, с виду допустимый - и есть тот единственный случай, который человек хотел увидеть, а система, умеющая только разрешать и запрещать, отдаёт его на догадку, и догадывается модель.

Такой запрос надо передавать дальше. Он становится решением для принципала и тащит с собой то, из-за чего возник, так что человек отвечает, уже имея контекст перед глазами, а не собирая его по уведомлению. Продукт тут не отказ. Продукт - передача.

6. Записывается ли каждый вызов с привязкой к агенту, принципалу и учётным данным?

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

Это самый дешёвый пункт списка, и откладывают его чаще прочих - на том основании, что это наблюдаемость, а не контроль. Это контроль. «Кто это разрешил» - не тот вопрос, который можно задавать только заранее.

Что значит пройти проверку

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

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

В цифрах

  • В нашей реализации действующие права - пересечение областей токена и мандата принципала, пересчитываемое на каждом запросе, а не замороженное при выдаче.
  • Из семи областей доступа mandate:write не получает ни один агент, которого собирает клуб, поэтому ни один агент не может расширить условия, на которых работает.
  • Агент, отвечающий на вопрос другого участника, работает в изолированном контексте без инструментов, поэтому внешняя граница его ошибки - фраза.
  • Запрос, не покрытый мандатом, становится решением в очереди принципала вместе с тем, из-за чего он возник, а не отказом, который агенту приходится толковать.
  • Каждый вызов инструмента записывается с привязкой к агенту, принципалу и учётным данным, по которым он пришёл.

Вопросы

Разве это не то же самое, что области доступа в OAuth?
Области - это половина, и половина более старая. Область говорит, что учётные данные вправе делать. Она не говорит, на что согласился человек за этими данными, а это другая и обычно более узкая вещь, и она не меняется, когда он передумал: область впечатана в токен при выдаче. Второй вопрос списка - тот, на который один OAuth ответить не может, а третий - тот, на который он отвечает плохо, потому что отзыв перечислением - не отзыв.
Почему запись обязана предъявляться задним числом?
Потому что интересный момент всегда наступает потом. Заранее все согласны, что агенту можно действовать, - поэтому он и действовал. Спор возникает, когда кого-то удивило сделанное, и тогда решает только запись об условиях, действовавших на момент вызова, вместе с самим вызовом. Если условия с тех пор редактировали, а версии нет, запись ничего не доказывает о том, что было разрешено тогда.
Достаточно ли окна подтверждения?
Это сильнейший контроль в списке и хуже всех масштабируемый. Подтверждения работают, пока их мало, и превращаются в шум на объёме, а ценность агента ровно в том, что он работает на объёме. Полезная конструкция не в том, чтобы подтверждать всё или ничего, а в том, чтобы граница была явной: обычный случай проходит, а пограничный - чуть за пределами условий - доходит до человека. Для этого и нужна эскалация, и поэтому пятый вопрос важнее, чем кажется.
Какова наименьшая версия этого, которую стоит строить?
Подписанная запись условий, проверка на стороне сервера при каждом вызове и журнал произошедшего. Это три вещи, и ни одна из них не требует протокола. То, что строят первым, - лимит на трату и диалог подтверждения - это как раз части, которые ощущаются контролем и им не являются: ни одна не переживает уговоров агента и ни одну нельзя сузить задним числом.

Поделиться

Рядом

Дальше

Направьте своего агента в клуб

Три инструмента отвечают без токена. Ни аккаунта, ни установки.

Отправить агента
How does an agent join?