Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Генеративная оркестрация также поддерживает многоагентные системы, где один агент вызывает других агентов. Разбивая задачи на несколько специализированных агентов, вы делаете приложение более модульным, масштабируемым и управляемым.
Встроенные агенты
Встроенные агенты, также известные как дочерние агенты, — это небольшие многоразовые рабочие процессы внутри одного и того же агента. Часто это просто темы, которые основной агент использует как подпрограммы. Например, главный агент может вызвать тему «Перевод текста» как один из этапов более крупного плана. Встроенные агенты разделяют контекст с основным агентом, поэтому передача данных между ними проста.
Лучшая практика: держите инлайн-агентов сосредоточенными на одной задаче и тщательно их тестируйте.
Подключенные агенты
Связанные агенты — это отдельные агенты со своей собственной организацией, инструментами и знаниями. Главный агент делегирует часть запроса дочернему агенту. Например, IT-агент звонит агенту по продажам, чтобы узнать информацию о ценах. Подключённые агенты обеспечивают модульность и разделение доменов, а также могут обходить ограничения планов. У них могут быть разные привилегии или знания, поэтому применяйте контроль управления и аудита.
Однако использование связанных агентов требует тщательного управления:
Оркестровка: У родительского оркестратора должно быть чёткие критерии передачи подключённому агенту. Обычно оркестратор передаёт данные, когда намерение пользователя совпадает с доменом связанного агента. Для облегчения этого процесса четко опишите назначение связанного агента в конфигурации родителя. Рассматривайте весь связанный агент как агентный «инструмент» с описанием с точки зрения родителя.
Передача данных: Вы должны управлять передачей данных. Определите, какой контекст от родителя передать связанному агенту. Copilot Studio по умолчанию передаёт историю переписки, когда один агент звонит другому, чтобы подключённый агент понимал предыдущий контекст разговора. Но, возможно, придётся пройти и определённые параметры. Например, если главный агент уже знает имя пользователя ранее, он может отправить его связанному агенту, чтобы избежать повторного запроса.
Безопасность: Подключённый агент может иметь доступ к вещам, которых нет у родительского агента. Убедитесь, что звонок к подключённому агенту случайно не обходит ограничения. Например, если родительский агент не имеет права удалять записи, но подключённый агент может, родительский агент не должен вызывать подключённого агента в случаях, когда удаление может произойти без надлежащего одобрения. Относитесь к звонку с подключённым агентом как к любому другому мощному действию. Если это что-то чувствительное, подвергайте его необходимым проверкам или согласию пользователя.
Аудит и мониторинг: Ведите лог, когда был вызван подключённый агент и что он сделал. Поскольку это отдельный агент, у вас есть отдельные транскрипты. Для отладки важно связывать родительские и связанные сессии. Обычно идентификаторы в телеметрии связывают эти два элемента.
Когда разделять агентов
Не создавайте отдельного агента для каждой подзадачи. Используйте отдельные агенты, если подзадача:
- Достаточно сложен, чтобы иметь собственный набор инструментов или знаний (разная область экспертизы)
- Требуется другие правила управления или контроля доступа, чем основной агент
- Можно повторно использовать во многих основных агентах (то есть это как сервисный агент).
Если ни одно из этих условий не применимо, простой встроенный агент может хорошо справиться с задачей и при этом проще, чем полностью подключённый агент. Отдельные агенты создают накладные расходы в систему. Время выполнения немного увеличивается из-за переключения контекста и сложности поддержания нескольких агентов. Так что используйте их с осторожностью. Для практичного подхода начните с одного агента. Затем делитесь на несколько агентов только тогда, когда ясно видите необходимость модульности или границу, которую один агент не должен пересекать.
Лучшие практики для многоагентной оркестрации
При создании инструкций для родителей и субагентов в многоагентной системе применяются следующие лучшие практики.
1. Принцип единого ответа
Убедитесь, что только один агент общается с пользователем за ход. В многоагентной системе только родительский агент должен давать окончательный ответ. Субагенты — это исследователи, а не реагирующие специалисты.
- Сделайте: Добавьте к родительским инструкциям: «Вы единственный агент, который общается с пользователем. Объедините выводы всех детских агентов в единый ответ.»
- Не стоит: Оставляйте это неоднозначным. Без явных указаний подагенты отвечают пользователю напрямую, вызывая дублирующиеся или частичные сообщения.
2. Инструкции субагента должны указывать свою роль
Всегда говорите субагентам, что они субагенты. Субагенты сами по себе не знают, что они часть оркестровки. Без явных указаний они ведут себя как автономные агенты и отправляют сообщения напрямую пользователю.
- Сделайте: Добавьте к инструкциям каждого субагента: «Ты — субагент. НЕ отвечайте пользователю напрямую. Ваша задача — искать информацию и возвращать свои результаты материнскому агенту. Родительский агент отвечает за всю коммуникацию с пользователем.»
- Не делайте: Предполагайте, что субагенты сами определяют схему оркестрации.
3. Используйте ясный, прямой язык в инструкциях
Всегда используйте директивный язык. Избегайте мягких или вежливых формулировок. Платформа внедряет инструкции на уровне системы, используя сильный язык (MUST, NOT, NEVER). Инструкции, написанные мягким языком («пожалуйста, постарайся», «тебе стоит», «было бы хорошо»), теряют приоритет, когда они конфликтуют.
- Делайте: «НИКОГДА не отвечайте пользователю напрямую. ТОЛЬКО возвращай свои находки.»
- Сделайте: «На каждый вопрос пользователя должен быть ровно один последний ответ.»
- Не делайте: «Пожалуйста, старайтесь не отправлять сообщения пользователю, а вместо этого возвращайте свои данные.»
- Не стоит: «В идеале нам нужен единый комбинированный ответ.»
4. Используйте один источник знаний для каждого субагента (без пересечения)
Назначайте каждому субагенту отдельные, непересекающиеся источники знаний. Если два субагента ищут одну и ту же базу знаний, один из них находит ответ первым. Второй субагент либо возвращает дублирующиеся результаты, либо полностью пропускает поиск, не добавляя значения.
- Делайте: CA-1 ищет Knowledge Source A (например, HR-политики). CA-2 ищет Источник знаний B (например, ИТ-документацию).
- Don't: Дайте обоим субагентам доступ к одним и тем же документам, таблицам Dataverse или SharePoint сайтам.
- Примечание: если у вас только один источник знаний, используйте одного агента с знаниями, а не делитесь на два субагента. Мультиагент добавляет ценность только тогда, когда источники действительно отличаются.
5. Используйте точные и чёткие описания субагентов
Пишите чёткие, чёткие описания для каждого субагента, видимые родительской компании. Родительский агент использует описания субагентов для определения маршрутизации. Если описания расплывчатые, идентичные или неточные, родитель не может принимать правильные решения по маршрутизации.
- Делайте: CA-1: «Ищет документы по HR-политике по вопросам, связанным с сотрудниками.» CA-2: «Ищет IT-базу знаний по вопросам технической поддержки.»
- Не стоит: Не давайте обоим агентам одинаковое описание, если они обслуживают разные домены.
- Не стоит: Используйте общие описания вроде «Этот агент может помочь с вопросами».
6. Родительские инструкции должны определять узор оркестрации
Расскажите родительскому агенту, как организовать. Не просто говори «используйте детских агентов». Родителю нужны чёткие инструкции по шаблону: вызывать агентов, ждать результатов, объединять, затем отвечать.
- Сделайте: «Когда пользователь задаёт вопрос: 1. Вызвать обоих детских агентов для сбора информации. 2. Дождитесь, пока оба детских агента вернут свои находки. 3. Объедините результаты в единый, единый ответ. 4. Дайте пользователю ровно один ответ. Детские агенты не должны отвечать напрямую пользователю.»
- Не делайте: «Когда пользователь задаёт вопрос, вызовите дочерних агентов, получите ответ из обоих источников и дайте единый совместный ответ.» (Слишком расплывчато. Инструкция не приказывает субагентам молчать.)
7. Включить директиву «без прямого ответа» в делегирование задачи
Даже при чётких инструкциях субагента добавление подкрепления в делегированную задачу обеспечивает страховочную сеть.
- Сделайте: Добавьте в инструкции родителям: «При делегировании дочернего агента всегда включайте в задачу: 'Возвращайте только свои выводы. Не отвечайте пользователю.'»
- Не делайте: Полагайтесь исключительно на инструкции субагента. Контекст задачи даёт субагенту больше сигналов, усиливающих паттерн.
8. Тестирование с помощью запросов по несоответствию доменов
Всегда проверяйте вопросы, не соответствующие домену ни одного субагента. Это тестирование показывает, правильно ли субагенты возвращают «информация не найдена» или возвращают неверную информацию, зависают или отправляют запутанные сообщения.
- Делайте: Тестируйте с запросами вне всех доменов субагентов (например, спросите о погоде, когда агенты занимаются HR и IT).
- Сделайте: Убедитесь, что родитель с достоинством обрабатывает «оба агента ничего не нашли».
- Не делайте: Тестируйте только с помощью самых простых запросов по делу, которые идеально совпадают с доменом одного субагента.
9. Предпочитайте спрашивать, а не информировать, когда ждёте последующего ответа
Используйте взаимодействие в стиле вопрос/вопрос, когда ожидаете ответа пользователя. Используйте формат inform/send только для финальных односторонних сообщений. Если агент спрашивает пользователя с помощью одностороннего сообщения (inform), ответ пользователя возвращается на родительский планировщик в виде совершенно нового запроса. В этом случае лучше продолжить тот же разговор с субагентом.
- Сделайте: Напишите инструкции вроде: «Если нужна разъяснение, задайте пользователю вопрос и ждите его ответа.»
- Не стоит: Пишите инструкции вроде: «Сообщите пользователю о вариантах и дайте ему выбор.» «Информировать» — это одностороннее сообщение, а «спросить» — двусторонний обмен.
Список быстрых справочников
| # | Проверьте |
|---|---|
| 1 | Родительские инструкции явно говорят: «только я отвечаю пользователю» |
| 2 | Каждая инструкция субагента говорит «не отвечать пользователю напрямую» |
| 3 | Инструкции используют строгие директивные формулировки (ОБЯЗАТЕЛЬНО, НИКОГДА, ТОЛЬКО) |
| 4 | Каждый субагент имеет уникальный, не пересекающийся источник знаний |
| 5 | Описания субагентов точны, чёткие и конкретные |
| 6 | Родительские инструкции определяют полный паттерн оркестрации (вызывать → ждать → объединять → ответить) |
| 7 | Родитель передаёт «нет прямого ответа» в контексте делегированной задачи |
| 8 | Проверено с помощью запросов по несоответствию доменов |
| 9 | Различие между вопросом и информированием правильное в инструкциях субагента |