Викибот

Агенты

Настройте поведение бота

Общая информация

Агенты умеет вести полноценный диалог с пользователем с поддержкой истории сообщений, ищет данные по базе знаний, Первой линии и задаёт дополнительные вопросы пользователю.

При получении запроса от пользователя агент в первую очередь проверяет наличие ответа в Первой линии.

Стоимость обработки сообщений агентом не фиксирована, а варьируется от количества действий, совершенных агентом для ответа. За каждое действие агента, требующее обращение к ИИ, взымается 1 кредит.

Если у вашего бота нет первой линии, то агент не будет искать ответы в ней. Соответственно это может снизить стоимость обработки отдельного сообщения на 1 кредит

Настройка инструкции

Используйте настройку инструкции, чтобы ознакомить агента с вашей предметной областью, задать стиль общения и сценарии его работы. Для хорошего описания инструкции следуйте общим правилам написания инструкций к ЛЛМ:

  1. Четкая инструкция: Убедитесь, что инструкция устанавливает четкую роль для агента. Это должно хорошо объяснять, что от бота ожидают пользователи.
Ты менеджер по продажам туристического агентсва.
  1. Структурированные инструкции: Ваши инструкции должны включать четкие, корректные и последовательные правила для агента, чтобы улучшить его реакцию на разные запросы.

Если пользователь обращается с просьбой найти тур, то следуй сценарию "Поиск тура"

Сценарий "Поиск тура":

  1. Уточни город вылета и желаемое направление
  2. Для поиска тура используй запрос формата: Поиск тура "Город вылета" / "Город или страна прилета" *
  3. При первом поиске тура не уточняй дополнительные детали
  4. Предоставляй туры в виде структурированного списка:
    • Город вылета
    • Город прилета
    • Дата вылета и кол-во ночей
    • Цена
    • Ссылка на тур
  5. Если пользователь выбирает тур, то собери данные о туристах: ФИО, номер телефона, кол-во туристов
  6. Когда все данные собраны, то переведи диалог на оператора

В данном примере задается формат, в котором агент будет искать туры по Базе знаний. "Поиск тура" позволяет агенту выбрать документ с заголовком "Поиск тура", который должен содержать информацию о доступных турах.

  1. Предусмотрение направлений разговора: Важно предусмотреть потенциальные направления диалога и сценарии ошибок. Если вы пишите агенту какое-то условие, то важно описать оба варианта действий: когда условие выполняется и когда не выполняется.

Если тур не найден, не говори что нет подходящих туров. Переведи на оператора и скажи, что оператор обязательно поможет найти.

  1. Гибкость в ответах: Хорошая инструкция допускает гибкость в ответах агента, чтобы обеспечить более естественное взаимодействие с пользователем.
Не повторяй свой предыдущий ответ с подобранными турами.
  1. Используйте специфические примеры: Предоставляйте конкретные примеры ожидаемого поведения в ваших инструкциях, чтобы убедиться, что агент понимает, как должен выглядеть его ответ.

Пример диалога: - тур - Добрый день, подскажите из какого города планируется вылет и какое направление Вас интересует? - Турция из Москвы - примеры туров.... - Спасибо, я выберу первый - Отлично, скажите Ваши ФИО и номер телефона, чтобы я мог забронировать тур для вас - ...

Навыки

На данный момент для настройки доступны три навыка - Полиглот, Фильтрация и Выбор исполнителя. Вы можете в любое время включать\выключать данные навыки, а также дописывать необходимые правила для них.

Полиглот

Навык полиглот позволяет настроить языки, на которых бот может отвечать. Для того, чтобы решить, на каком языке отвечать, бот берет текст вопроса клиента и выбирает наиболее подходящий язык из списка, который был задан при настройке навыка. Если нужного языка в списке нет - бот отвечает на основном языке, который задается в общих настройках бота.

Стоимость навыка 0.1 кредит. Если навык включен, к цене любого текстового ответа бота всегда добавляется 0.1 кредита.

Фильтрация

Навык фильтрации позволяет пропускать сообщения, которые предположительно содержат спам или не должны обрабатываться вообще. Необходимо описать правила - какие сообщения относятся к спаму. После чего бот будет игнорировать все подходящие под условия сообщения. Остальные сообщения проходят на дальнейшую обработку.

Стоимость успешной фильтрации одного спам-сообщения 0.1 кредита. Вы можете настроить и включить данный навык на вкладке Фильтрация на странице Агенты.

Пример настройки навыка:

Правила "Спам":
  - Если это рекламный пост, рассылка - спам.
  - Если сообщение состоит только из эмодзи - спам.

Все остальные сообщения, не подходящие под правила - не спам.

Выбор исполнителя

Навык выбора исполнителя позволяет настроить правила для перевода на оператора, т.е. ограничить темы, по которым бот будет отвечать. Настройка работает по аналогии с навыком фильтрации.

Стоимость успешного срабатывания данного навыка в случае перевода на оператора - 0.2 кредита.

Пример настройки навыка:

Если вопрос касается оплаты, переводи на оператора.

Все остальные вопросы переводи на бота.

Вызов функций внешних API

Агент может вызывать пользовательские функции с помощью http-запросов. Например, агент может уточнить у пользователя номер заказа, вызвать http-метод https://endpoint/api/get_order=1 и предоставить пользователю информацию о его заказе.

Агент поддерживает GET и POST запросы. Для POST запросов тело запроса должно быть application/json. Поддерживается передача заголовков, в том числе и Authorization.

На странице Агенты -> Ответ нажмите Добавить функцию, откроется окно для создания функции.

Основная структура JSON-описания

На вкладке Описание необходимо добавить JSON, который должен следовать строгому формату.

name (строка)

Описание: Уникальное имя функции, отражающее её цель.

Пример:

"name": "validate_user_email"

description (строка)

Описание: Краткое описание назначения функции.

Пример:

"description": "Проверяет, зарегистрирован ли адрес электронной почты в системе."

parameters (объект)

Описание: Определяет входные параметры, которые принимает функция.

Состав:

  • type (объект): Указывает, что параметры являются объектом.
  • properties (объект): Описывает все ожидаемые свойства (поля).
  • required (массив): Указывает обязательные для передачи поля.

Пример:

"parameters": {
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Адрес электронной почты пользователя."
    }
  },
  "required": ["email"]
}

Типы данных

string

Описание: Простой текст.

Поля:

  • description (строка): Объясняет, что представляет собой строка.
  • pattern (строка): Регулярное выражение для проверки формата.

Пример:

"phone": {
  "type": "string",
  "pattern": "^\\+7\\d{10}$",
  "description": "Номер телефона, начинающийся с +7 и 10 последующими цифрами."
}

number

Описание: Числовое значение, может быть как целым, так и дробным.

Поля:

  • description (строка): Объясняет, что означает число.

Пример:

"age": {
  "type": "number",
  "description": "Возраст пользователя в годах."
}

object

Описание: Сложная структура, содержащая взаимосвязанные поля.

Поля:

  • properties (объект): Описывает составные части объекта.
  • required (массив): Определяет обязательные поля внутри объекта.

Пример:

"user": {
  "type": "object",
  "properties": {
    "id": { "type": "number" },
    "name": { "type": "string" }
  },
  "required": ["id", "name"]
}

array

Описание: Коллекция данных, может содержать как простые, так и сложные типы.

Поля:

  • items (объект): Описывает тип данных, содержащийся в массиве.
  • description (строка): Объясняет, что представляет собой массив.

Пример:

"tags": {
  "type": "array",
  "items": {
    "type": "string"
  },
  "description": "Список тегов, связанных с элементом."
}

Пример полной функции

{
  "name": "check_user_subscriptions",
  "description": "Проверяет, есть ли у указанных пользователей активные подписки.",
  "parameters": {
    "type": "object",
    "properties": {
      "users": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "number",
              "description": "Уникальный идентификатор пользователя"
            },
            "name": {
              "type": "string",
              "description": "Имя пользователя"
            }
          },
          "required": ["id", "name"],
          "description": "Объект информации о пользователе"
        },
        "description": "Массив объектов пользователей, содержащих id и имя"
      },
      "include_inactive": {
        "type": "boolean",
        "description": "Флаг, указывающий включать или нет неактивные подписки в результаты"
      }
    },
    "required": ["users"]
  }
}

Действие

На вкладке Действия настраивается вызов вебхука. Если вы верно указали описание функции, то автоматически появятся кнопки с доступными аргументами. В примере по умолчанию это location и unit. Данные кнопки позволяет вставить переменные, с которыми агент вызывает функцию, в шаблоны Вебхук URL и тела запроса.

Настройки агента

Тестирование

На странице Агенты также доступен функционал по клонированию и удалению агентов. Данная функция позволяет улучшать и тестировать инструкцию и навыки, не влияя на текущих клиентов.

Как лучше всего тестировать агента:

  1. Клонируйте текущего агента;
  2. Внесите изменения в навыки, инструкцию или настройки;
  3. Перейдите на вкладку тестирование, выберите нового агента и оцените результаты исправлений;
  4. Если все отлично, вы можете включить нового агента в работу, старый агент будет выключен автоматически.

Полезные приёмы

  • Если необходимо, чтобы бот отвечал по какой-то теме на основе своих общих знаний, то можно использовать инструкцию вида: Если пользователь спрашивает про <ваша тема>, то ты можешь использовать свои общие знания, для таких вопросов не ищи в первой линии или в базе знаний, сразу отвечай, то, что ты знаешь.

Ограничения

  • На данный момент агент получает около 10 последних сообщений с пользователем, значение может изменяться как в меньшую так и в большую сторону.
  • Для ответа на вопрос агенту доступны данные из базы знаний, которые он искал в последний раз, данные из предыдущих поисков он "забывает".
  • Агент не умеет считывать информацию с каких-либо сайтов (переходить по URL), кроме той, что добавлена в Базу знаний.