Создание человекоподобных и надёжных AI-агентов с Parlant: агентная методология
Что такое агентный дизайн
Агентный дизайн означает создание AI-систем, способных действовать самостоятельно в рамках заданных границ. В отличие от традиционного софта, где для каждого входа задаётся фиксированный выход, агентные системы опираются на вероятностные модели. Дизайнеры должны формулировать желаемые поведения и ограничения, полагаясь на модель в вопросах контекста и исполнения.
Изменчивость ответов AI
Вероятностные модели намеренно дают разные, но релевантные ответы. Например, при просьбе сбросить пароль пользователь может получить несколько вариантов корректных ответов. Такая изменчивость делает диалог естественным и человекоподобным, но требует продуманных правил и защит для обеспечения безопасности и предсказуемости.
Почему важны чёткие инструкции
Языковые модели интерпретируют инструкции, а не выполняют код в буквальном смысле. Расплывчатые указания могут привести к непредсказуемым или небезопасным решениям. Нужно давать конкретные, ориентированные на действия правила, чтобы поведение агента соответствовало политике и ожиданиям пользователей.
Примеры неясных и уточнённых правил
Неясное правило:
agent.create_guideline(
condition="User expresses frustration",
action="Try to make them happy"
)
Такое правило двусмысленно и может привести к нежелательной импровизации.
Более конкретное правило:
agent.create_guideline(
condition="User is upset by a delayed delivery",
action="Acknowledge the delay, apologize, and provide a status update"
)
Построение комплаенса: слои контроля
Полностью контролировать LLM нельзя, но поведение можно направлять и ограничивать через слои контроля.
Уровень 1: правила
Используйте правила для определения обычного поведения и ожидаемых ответов.
await agent.create_guideline(
condition="Customer asks about topics outside your scope",
action="Politely decline and redirect to what you can help with"
)
Уровень 2: шаблоны ответов
Для критичных ситуаций применяйте заранее утверждённые шаблоны ответов, чтобы агент не импровизировал на чувствительные темы.
await agent.create_canned_response(
template="I can help with account questions, but for policy details I'll connect you to a specialist."
)
Такой подход снижает риски и поддерживает согласованность в важных случаях.
Вызов инструментов и проблема угадывания параметров
Когда агент выполняет действия через API или функции, часто отсутствуют важные детали. Например, «Назначь встречу с Сарой на следующей неделе» не указывает, о какой Саре идет речь, в какой день и время, и в каком календаре создавать событие. Это и есть проблема угадывания параметров.
Проектируйте инструменты с понятными описаниями, подсказками по параметрам и однородными типами параметров. Интуитивные имена инструментов и примеры использования помогают агенту выбрать нужный инструмент и корректно заполнить входные данные, что повышает точность и снижает ошибки.
Агентный дизайн — итеративный процесс
Поведение агента развивается через наблюдение, оценку и улучшение. Начните с типичных сценариев «happy path», разверните систему в безопасной среде и следите за неожиданными ответами или нарушениями правил. Добавляйте целевые правила для исправления повторяющихся проблем — например, отключите повторные попытки апсейла, если пользователи регулярно отказываются. Постепенные правки превращают прототип в надёжную систему общения.
Написание эффективных правил
Каждое правило должно включать условие, конкретное действие и опционально указание инструментов. Пример:
await agent.create_guideline(
condition="Customer requests a specific appointment time that's unavailable",
action="Offer the three closest available slots as alternatives",
tools=[get_available_slots]
)
Структурированные беседы: journeys
Для сложных многошаговых задач, таких как бронирование или онбординг, используйте структурированные сценарии — journeys. Они задают состояния и переходы, позволяя агенту проводить пользователя через процесс, сохраняя естественность диалога.
Пример потока бронирования:
booking_journey = await agent.create_journey(
title="Book Appointment",
conditions=["Customer wants to schedule an appointment"],
description="Guide customer through the booking process"
)
t1 = await booking_journey.initial_state.transition_to(
chat_state="Ask what type of service they need"
)
t2 = await t1.target.transition_to(
tool_state=check_availability_for_service
)
t3 = await t2.target.transition_to(
chat_state="Offer available time slots"
)
Баланс между гибкостью и предсказуемостью
Эффективный агент сочетает разговорность и предсказуемость. Чрезмерно строгие сценарии делают диалог механическим, а слишком расплывчатые инструкции — непоследовательными. Давайте агенту четкую цель с возможностью гибкой формулировки, например: объяснить тарифы, подчеркнуть ценность и задать вопросы о потребностях клиента перед рекомендацией.
Проектирование для реальных разговоров
Разговоры нелинейны: пользователи могут менять тему, пропускать шаги или возвращаться назад. Чтобы справляться с этим, применяйте:
- Сохранение контекста: храните и используйте ранее предоставленную информацию.
- Поэтапное раскрытие информации: не перегружайте пользователя всем сразу.
- Механизмы восстановления: корректно обрабатывать недопонимания через уточняющие вопросы или мягкую перенаправку.
Начинайте с основных функций и итеративно улучшайте систему на основе реальных наблюдений. Используйте чёткие правила, шаблоны ответов для чувствительных случаев и journeys для сложных сценариев. Будьте прозрачны в возможностях агента и его ограничениях — это поможет создать надёжных и удобных в использовании AI-агентов.