Skip to content

Картка агента й двері за нею

Картка — це те, як ваш агент представляється агентові за межами вашої компанії: ім'я, для чого він, які в нього навички і — якщо ви відчинили двері — адреса, куди писати, і як там представитися.

Спершу це документ. Чи відповідає за ним хтось — друге, окреме рішення.

Навіщо картка взагалі потрібна

Агенти, що говорять A2A, знаходять одне одного обміном карток. Жодного реєстру посеред протоколу немає: картка і є знайомством. До неї ім'я, опис і навички жили у трьох місцях і читалися лише тим, хто увійшов до кабінету.

Що написано в картці й звідки береться

у картцізвідки
ім'я, описвласний рядок агента
навички з описаминавички, якими користується цей агент
що вмієпотокова видача — так, поки двері відчинені (AGNT2-355); вихідних сповіщень немає; одна картка
version — відбитокусе перелічене вище, згорнуте в рядок
адреса для викликуживі двері A2A — і його немає, коли дверей немає
як представитисяті самі двері: ключ у заголовку — або нічого

Жодне з цього — не поле, яке хтось заповнює «для картки». Другий текст — це текст, який за тиждень розійдеться з першим. Наслідок людей дивує, і він правильний: дайте агентові нову навичку — і картка зміниться під посиланням, яке ви роздали вчора. Картка описує агента зараз, а відбиток — те, за чим інша сторона помітить це одним порівнянням, не вичитуючи документ.

Посилання

Відкрийте агента → вкладка ЗагальнеКартка агента. Там видно, що отримає читач, ще до того як ви щось віддали, і написано рівно, що дізнається тримач посилання: ім'я агента, його опис і його навички з описами — і більше нічого, і нічого про решту вашої команди.

Отримати посилання видає його. Чотири речі про нього:

  • Його показують один раз. Копії ніде не лишається. Загубили — відкликайте й видавайте нове.
  • Поки живе одне, друге не видадуть. Стара адреса в когось на руках. Відкликати, потім видати — два рішення, у тому порядку, у якому ви їх насправді маєте на увазі.
  • Відкликання діє з наступного читання, без пільгового періоду.
  • Відкликане посилання не стирається. Коли адреса потрапила не до тієї людини, хтось має мати змогу побачити, що вона існувала і коли її читали востаннє, — рядок переживає відкликання разом з обома фактами. Це в базі, а не на екрані: після відкликання панель знову пропонує «Отримати посилання» і про попереднє не каже нічого, бо читає лише живе.

Адреса виглядає так, і це все, що потрібно читачеві:

https://<адреса вашого api>/agent-cards/acd.<публічна половина>.<секретна половина>

Усі відмови — та сама відмова

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

Картка з мертвою адресою гірша, ніж жодної

Адреса в картці означає «пишіть сюди, і вам відповідять». Тому адреса з'являється лише тоді, коли є кому відповідати, і зникає, коли відповідати перестають. Читач, який не знайшов жодного викликуваного інтерфейсу, на цьому зупиняється — картку можна прочитати, але не написати, — і це чесне твердження. Воно краще, ніж відправити чужого агента в тишу й дозволити вирішити, що зламані ми.

Картка збирається в момент читання, тому правило дотримується само. Нікому не треба пам'ятати, що при зачиненні дверей слід виправити документ.

Відчинити двері — A2A

Опублікувати агента по A2A — та сама за змістом дія, що й поставити його на сайт: одне прив'язання, той самий рядок аудиту, те саме скасування. Сьогодні це виклик api, а не екран — POST /agents/:id/channels/a2a, — і адреса з'являється в картці тієї миті, коли виклик удався.

Що далі робить партнер:

GET  <посилання на картку>         → адреса, у supportedInterfaces
POST /a2a/v1/agents/<id агента>    → { "jsonrpc": "2.0", "method": "message/send", … }
     X-Embed-Key: emk.<публічна>.<секретна>
     ← задача, завершена, з відповіддю
POST … { "method": "tasks/get", … }
     ← та сама задача, завтра

Обидві редакції протоколу відповідають за цією однією адресою, і редакцію обирає ім'я методу — ні заголовка, ні налаштування. message/send і tasks/get — це 0.3; SendMessage і GetTask — це 1.0.

Чотири небезпечні питання про відкриту назовні ручку

Чий це хід?власника агента, у команді агента, через ту саму перевірку членства, що й в учасника. Партнер ніколи не стає суб'єктом.
Що йому можна?нічого понад відповідь. Ні воркера, ні мережі, ні розкладу — і на прив'язанні A2A немає ручки, яка все це відчиняє.
Що він запише?власну розмову. У довготривалі нотатки агента — нічого: чужий абзац не має в'їхати в наступний хід власника.
Куди це ляже?одна розмова на партнера на агента, поруч із розмовами відвідувачів сайту й ніколи всередині розмови власника.

У партнера є ім'я, і в цьому весь сенс

Обліковими даними служить той самий embed-ключ, який учасник видає стороні, з якою команда домовилася розмовляти. Його публічна половина — це особа партнера скрізь, де це важливо: на неї зав'язана розмова, ліміт потоку належить лише йому, і витрата підписана його іменем.

Скажімо прямо: це відчиняє агента поіменно названим партнерам, а не інтернету. Ключ означає «ми вже знайомі». Відчинити агента безіменним — окреме рішення з окремою ціною, і воно не ухвалене. Відсутній або невірний ключ — це відмова, що називає схему, а не гола.

Відповідь приходить частинами, а робота лишається за дверима

Від AGNT2-355 та сама адреса відповідає й на message/stream (SendStreamingMessage в 1.0): клієнт партнера отримує задачу в момент її появи, потім відповідь шматок за шматком у міру того, як агент її пише, потім підсумковий статус — через Server-Sent Events, у тому порядку, в якому агент це створив. Картка так і каже: capabilities.streaming дорівнює true рівно поки двері відчинені.

Що партнер бачить із РОБОТИ — міркування агента та інструменти, за які він береться, — вирішує власник, і типово це зачинено: потік партнера несе відповідь і нічого більше, доки власник не відкриє видимість на прив'язанні A2A (PUT /agents/:id/channels/a2a/access). Відкрито — міркування й кожен крок інструмента приходять окремими примітками поруч із відповіддю, ніколи всередині неї і ніколи з виводом інструмента. Це єдине з чотирьох прав, яке можна відкрити партнерам; руки, пам'ять і розклад лишаються зачиненими.

Чого немає — заявлено, а не збудовано наполовину

Вихідних сповіщень на адресу партнера, перепідключення до вже запущеного потоку, скасування задачі, розширеної картки за автентифікацією, gRPC-прив'язання, будь-якого доступу без ключа та екрана в кабінеті. Кожне з цього оголошене в картці відсутнім, а не підроблене.

Повне міркування й три рядки, у які воно обійшлося ядру, — рядок Канали в реєстрі рішень.

Перевірити повністю

  1. Відкрийте агента → ЗагальнеКартка агентаОтримати посилання. Скопіюйте.
  2. Відкрийте цю адресу в браузері без сесії. Прийде картка — JSON з іменем агента, описом і навичками.
  3. supportedInterfaces порожній. Відповідати ще нікому, і картка так і каже.
  4. Опублікуйте агента по A2A: POST /agents/<id>/channels/a2a.
  5. Перечитайте те саме посилання. З'явився інтерфейс на кожну редакцію протоколу, з адресою, і поруч схема з ключем. Дивитися треба на поле version — воно зрушило.
  6. Заберіть двері назад — запис зникає, version зрушує назад.

Пункти 3 і 5 читають ту саму адресу. У цьому вся властивість, заради якої написана сторінка.