Вы могли бы сделать пару вещей. Вы можете сделать его более линейным:
A1 -> A2 -> A3 -> AF
Или вы можете сделать так, чтобы AF сделал соединение. Я сделал так:
- чтобы все родительские агенты записывали в одну и ту же топи c, поэтому в этом случае
(A1,A2,A3)
будет писать в agent_final's_topic
. agent_final
содержит таблицу, которая выглядит как {id: {A1: x, A2: y, A3: z}}
. x
, y
и z
имеют значение None или независимо от того, что генерируют родительские агенты. - Когда
agent_final
читает сообщение, он проверяет таблицу на наличие идентификатора, добавляет значение к правильному поле (соответствует агенту, от которого пришло сообщение) - Если все 3 поля не равны
None
, то все три участвующих Агента завершены, так что теперь вы можете делать все, что предполагалось final_agent
. - Если есть пропущенные поля, вы можете сохранить обновленный dict обратно в таблицу, а затем перейти к следующему сообщению, ничего не делая.
Бесстыдный плагин:
Я создал библиотеку для такой обработки ( github , pypi ). Отправьте все сообщения о зависимостях в одну топи c, напишите ключ, функцию слияния и достаточности и следуйте инструкциям в README, чтобы использовать ее для блокировки обработки, пока несколько вышестоящих агентов не сделают свое дело.