中文翻译暂不可用,显示俄语原文。
Как вы проектируете промпт для агента с инструментами?
Краткий тезис
Промпт для агента с инструментами — это системное сообщение, которое не только задаёт роль LLM, но и описывает доступные функции, правила их использования, формат вывода (обычно ReAct — Reasoning + Acting]]) и содержит few-shot примеры, обучающие агента правильной последовательности «мысль → действие → наблюдение». Качественный промпт предотвращает галлюцинации, заставляет агента сначала анализировать, а потом вызывать инструменты, и критически влияет на надёжность всего агентного пайплайна.
1. Термины: Агент, Инструменты, ReAct
Агент — LLM-модель, которая автономно решает задачу, вызывая внешние функции (инструменты) и обрабатывая их результаты.
Инструменты (tools) — функции, которые агент может вызвать: поиск в БД, отправка email, работа с API, запуск кода. Обычно описываются в JSON-схеме (function calling).
ReAct (Reasoning + Acting) — парадигма промптинга, в которой LLM чередует «Thought» (анализ ситуации) и «Action» (вызов инструмента). После вызова возвращается «Observation», затем цикл повторяется. Это предотвращает поспешные действия и улучшает интерпретируемость.
2. Основные компоненты промпта агента
Любой качественный промпт для агента с инструментами должен содержать:
| Компонент | Описание | Пример |
|---|---|---|
| Роль | Чем агент является | «Ты — AI-ассистент для автоматизации бизнеса» |
| Список инструментов | Имена, описание, параметры | search_db(query) — поиск клиентов |
| Правила поведения | Когда и как использовать инструменты | «Не выдумывай информацию, используй инструменты» |
| Формат вывода | Шаблон ответа: Thought/Action/Observation | «Мысль: …\nДействие: …\nРезультат: …» |
| Few-shot примеры | 1–3 полных диалога | Показывают правильную последовательность |
2.1 Роль и контекст
Роль задаёт тон и ограничения. Пример:
Ты — корпоративный помощник. Работай исключительно с данными из инструментов. Ничего не придумывай.
2.2 Описание инструментов
Каждый инструмент нужно описать с:
- именем функции
- списком параметров (тип, обязательность)
- примером вызова
- что возвращает
Лучше использовать JSON-схему, как в OpenAI function calling, но в промпте можно дать текстовое описание для моделей без нативной поддержки.
2.3 Правила (Constraints)
Чёткие правила уменьшают галлюцинации и нецелевое использование:
- «Всегда сначала подумай, потом действуй» (ReAct)
- «Если не знаешь ответа — используй инструмент, не гадай»
- «Не вызывай один и тот же инструмент дважды подряд без нового наблюдения»
- «Если инструмент вернул ошибку — сообщи пользователю, не пытайся игнорировать»
Можно оформить в виде маркированного списка.
2.4 Формат ответа (ReAct loop)
Стандартный шаблон:
Мысль: (анализ ситуации, планирование следующего шага)
Действие: имя_инструмента(аргументы)
Результат: (данные от инструмента)
Мысль: (анализ результата, вывод)
Ответ пользователю: (финальный ответ)
Этот формат можно вставить прямо в системное сообщение, а в few-shot примерах показать его применение.
3. Few-shot примеры — ключевой элемент
Few-shot learning — передача нескольких готовых примеров в промпт, чтобы модель поняла паттерн. Для агента это особенно важно:
- показывает последовательность мыслей и действий
- демонстрирует корректное использование инструментов
- учит обрабатывать ошибки и неоднозначности
3.1 Структура few-shot примера
Каждый пример — полный диалог:
Пользователь: Найди контакт Петра из компании "Ромашка"
Ассистент:
Мысль: Нужно найти Петра в БД, использую search_db по имени и названию компании.
Действие: search_db("Пётр", "Ромашка")
Результат: [{"name": "Пётр Сидоров", "email": "petr@romashka.ru"}]
Мысль: Нашёл контакт, теперь сообщу пользователю.
Ответ пользователю: Контакт найден: Пётр Сидоров, email: petr@romashka.ru.
3.2 Количество примеров
| Число примеров | Эффект |
|---|---|
| 1 | Минимальное улучшение, хорошо для простых случаев |
| 2–3 | Оптимально: покрывают основные сценарии (успех, ошибка, неоднозначность) |
| >3 | Улучшение насыщается, растёт длина промпта и стоимость |
3.3 Какие сценарии стоит включить
- Успешное использование одного инструмента
- Цепочка из двух-трёх инструментов (поиск → затем email)
- Обработка пустого результата («ничего не найдено»)
- Корректный отказ (если запрос вне компетенции)
4. Пример полного системного промпта
SYSTEM_PROMPT = """
Ты — AI-ассистент для автоматизации бизнеса.
У тебя есть доступ к инструментам:
1. search_db(query: str) — поиск в базе клиентов. Возвращает список контактов.
2. send_email(to: str, subject: str, body: str) — отправка email. Возвращает статус.
Правила:
- Всегда сначала подумай, потом действуй.
- Используй инструменты, когда не знаешь точного ответа.
- Никогда не выдумывай информацию.
- Не вызывай один и тот же инструмент повторно без нового результата.
- Если инструмент вернул ошибку — сообщи пользователю.
Формат ответа:
Мысль: (твои рассуждения)
Действие: имя_функции(аргументы)
Результат: (что вернул инструмент)
(повторяй, если нужно)
Ответ пользователю: (итоговое сообщение)
Пример:
Пользователь: Найди email Ивана.
Мысль: Нужно найти Ивана в БД, используя search_db.
Действие: search_db("Иван")
Результат: [{"name": "Иван Петров", "email": "ivan@example.com"}]
Мысль: Данные найдены.
Ответ пользователю: Email Ивана Петрова: ivan@example.com.
"""
5. Динамическое обновление промпта
Промпт не статичен; его нужно адаптировать под конкретный запрос:
- Inject контекста: Текущее время: {time}. Данные пользователя: {user_info}
- Ограничить инструменты: для некоторых задач можно скрыть опасные функции
- Менять число few-shot примеров в зависимости от сложности
Также можно использовать проверку на соответствие шаблону: после генерации ответа агента парсить «Мысль/Действие/Результат» и валидировать формат.
6. Оценка качества промпта агента
| Метрика | Описание |
|---|---|
| Task Success Rate | Доля запросов, завершённых корректно |
| Tool Usage Accuracy | Правильность вызова инструмента (параметры, тайминг) |
| Hallucination Rate | Процент ответов с выдуманными данными |
| Effort (кол-во шагов) | Среднее число действий до решения. Высокое — плохо |
| Format Adherence | Доля ответов, строго следующих формату ReAct |
Эти метрики собираются на тестовом датасете и позволяют итерировать промпт.
7. Типичные ошибки при проектировании
- Слишком много правил — модель путается.
- Мало примеров — агент не понимает формат.
- Примеры только успешные — не учится обрабатывать ошибки.
- Отсутствие ограничения на «думать» — агент может сразу вызывать инструмент без анализа.
- Описания инструментов неоднозначны — модель неверно передаёт параметры.
8. Продвинутые техники
- Plan-and-Solve: сначала агент составляет план (список шагов), затем выполняет их. Промпт делится на две фазы.
- Self-Reflection: добавить шаг «Проверь своё решение» после получения наблюдений.
- Chain-of-Thought перед действием: «Давай подумаем пошагово: что известно, что нужно узнать, какой инструмент применить».
- Внешний планировщик: иногда промпт передаёт только выполнение, а план генерируется отдельным LLM-вызовом.
Все эти техники требуют соответствующей настройки промпта и few-shot примеров.
Пет-проект для закрепления
Задача: Создать агента-помощника для управления задачами. Он должен уметь:
- искать задачи по названию (search_tasks)
- создавать новые задачи (create_task)
- изменять статус (update_status)
Инструменты:
- search_tasks(query: str, status: str = None) -> list
- create_task(title: str, description: str, due_date: str) -> dict
- update_status(task_id: int, new_status: str) -> str
Шаги:
- Напиши системный промпт с ролью, правилами и двумя few-shot примерами (успешный поиск и цепочка создание+обновление).
- Реализуй mock-функции (или используй Python-заглушки).
- Сделай скрипт, который принимает запрос пользователя, передаёт его LLM (через OpenAI API или локальную модель), парсит ответ и выполняет инструменты.
- Добавь логирование каждого шага (Thought, Action, Observation).
- Собери 10 тестовых запросов и рассчитай Task Success Rate и Hallucination Rate.
Ожидаемый результат: Работающий агент, который корректно проходит ReAct-цикл и решает задачи. Промпт можно улучшать, меняя few-shot примеры и правила.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 52 | Планирование и декомпозиция задач агентом |
| 54 | ReAct паттерн и его реализация |
| 55 | Управление несколькими агентами и оркестрация |
| 56 | Безопасность агентов с инструментами |
| 57 | Оценка качества работы агентов |
| 58 | Память и контекст в агентных системах |
Навигация
- Предыдущий: 52
- Следующий: 54
- Индекс: 00. Индекс разборов