Несколько агентов взаимодействуют через файловые почтовые ящики.
От субагента к товарищу по команде: разовый → постоянный; безымянный → названный; нет связи → почтовый ящик с файлами.
В чем разница между субагентом и товарищем по команде?
Субагент S04 прост и груб: появиться → бежать → вернуться к сводке → умереть. Одноразовый случай, без имени, без двусторонней связи между отцом и сыном.
Соратник s09 – независимый агент, имеющий имя, который можно неоднократно будить, а также отправлять и получать сообщения:
субагент (s04): spawn -> gt; выполнить -> вернуть -> уничтожен
товарищ по команде (s09): спавн -> работа -> холостой ход -> работа -> ... -> выключение
Эти два механизма служат разным целям:
<ул>Почтовый ящик представляет собой файл JSONL.
Как члены команды общаются друг с другом? s09 использует самый примитивный механизм: файл JSONL только для добавления.
.team/ config.json # Состав команды входящие/ alice.jsonl # Сюда добавляются письма Алисе боб.jsonl Lead.jsonl
отправить open("alice.jsonl", "a").write(msg); read означает чтение всего файла, анализ JSONL, а затем truncate для очистки (очистка семантики).
Зачем использовать файлы вместо очередей в памяти? Документы, естественно, долговечны. Агент перезапускается, процессы выходят из строя, даже машина перезагружается — электронные письма все еще там. Кроме того, он легко читается и поддерживает grep, а возможности отладки очень хорошие.
Посмотрите на весь процесс отправки сообщения от лида Алисе.
Следующий виджет позволяет отправить сообщение Алисе и посмотреть, что происходит на диске на каждом этапе.
5 типов сообщений
s09 определяет 5 типов сообщений (VALID_MSG_TYPES), но реализованы только первые два, а последние три добавлены в класс протокола s10:
сообщение — обычное текстовое сообщение. трансляция — отправляется всем товарищам по команде, кроме вас. shutdown_request / shutdown_response — запрос/ответ на корректное завершение работы (s10). plan_approval_response — утверждение плана (s10). Почему это заявлено, но не реализовано? Поскольку s09 хочет сделать «расширение протокола» открытым, тип сообщения является перечислением. Чтобы добавить новый, вам нужно всего лишь добавить запись в словарь и обработать ее в маршруте _exec.