Очень часто можно наткнуться на пример того, как агенту перед началом текста самой задачи, в команде или AGENTS.md задают роль по типу:
Ты - супер пупер разработчик/токсик/тестировщик с огромным количеством лет опыта и т.д. и т.п
По своей сути, роль задает агенту профессиональную, жанровую или коммуникативную позицию, из которой он должен выполнять задачу. Но насколько хорошо и для каких задач подходит этот контекстный паттерн проектирования агентных систем?
За последние пару лет ученые провели порядка 9 исследований, из которых можно сделать следующий вывод:
Роль не делает агента умнее и не гарантирует правильность ответа. Ее основная функция - настроить поведение модели: стиль, уровень объяснения, фокус внимания, критерии проверки и способ подачи материала.
Что это значит для нас, рядовых разработчиков?
1️⃣ Данный паттерн стоит использовать только тогда, когда необходимо задать стиль или тон ответа, либо уровень объяснения (например, «Ты — редактор научно-популярного текста. Сделай фрагмент яснее, но не упрощай термины» или «Объясни как преподаватель додикам студентам первого курса. Без сложной терминологии, но с точными определениями»)
2️⃣ Когда нужно проверить решение, код или текст, то нужно использовать не только роль, но и явно задавать ограничения (например, «Ты — Go-разработчик. Проверь код на ошибки компиляции, гонки данных, edge cases и читаемость»)
3️⃣ При решении сложной задачи задаваемая агенту роль с большей долей вероятности ухудшит итоговый результат работы агента. Но тут 50/50 и нужно проводить различные запуски, смотря как в целом реагирует система. К тому же, помимо заданной роли необходимо явно прописывать порядок рассуждения (например, «Реши как внимательный аналитик: сначала выпиши условия, затем проверь ограничения, потом дай ответ»)
4️⃣ Нужен точный факт? Роль - ваш самый главный враг в этом вопросе! Не надейтесь на нее и явно требуйте от агента, чтобы существовал источник данных и дополнительную проверку
5️⃣ В очень специфических областях, например медицине, юриспруденции или финансовых вопросах опасно полагаться на роль. Лучше требуйте обязательное наличие источника, даты и задавайте ограничения
Если вы считаете, что данный паттерн проектирования идеально подходит под вашу задачу, не ограничивайтесь обычным указанием роли. Хороший запрос/промпт/часть команды и т.д. должен включать в себя 4 части:
Ты — [роль].
Твоя задача — [что нужно сделать].
Учитывай [критерии, ограничения, адресата].
Выведи результат в формате [формат ответа].
p.s. Поделитесь в комментариях, как часто используете этот контекстный паттерн проектирования и насколько он крут (или не очень) по вашему мнению 😇