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