Перейти к основному содержимому

AIAgent

Тег AIAgent позволяет создавать и настраивать AI-агентов. Агенты используют LLM, чтобы гибко поддерживать диалог и обрабатывать любые запросы пользователей.

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

state: Start
q!: $regex</start>
a: Чем могу помочь?

state: Translation
q!: * переведи *
# Агент, который будет переводить текст
AIAgent:
id = translator_agent
# LLM, которую использует агент
model = gpt-4o
# Роль в диалоге
role = Профессиональный переводчик
# Цель в диалоге
goal = Переведи текст на другой язык
# Инструкции для агента
instructions = Если нужно, уточни у пользователя целевой язык. Дай 3 лучших варианта перевода
# Агент перейдет в стейт /Start, если у пользователя больше нет вопросов
nextState = /Start

Чтобы начать работу:

  1. Настройте подключение к Caila.
  2. Укажите параметры тега.
  3. Используйте тег в сценарии.

LLM для агента

Чтобы обращаться к LLM, агент использует сервис openai-proxy на платформе Caila.

предупреждение

Вы можете использовать LLM только в платном тарифе Caila.

Добавьте токен в JAICP, чтобы начать работу.

Токен доступа к Caila

Для использования сервисов и генеративных моделей из Caila в сторонних приложениях, в том числе JAICP, нужен персональный токен доступа. Чтобы выпустить токен:

  1. Перейдите в Caila.

    подсказка

    Caila и Conversational Cloud использует общую базу аккаунтов, поэтому если вы зарегистрированы в Conversational Cloud, дополнительно регистрироваться в Caila не нужно.

  2. Перейдите на страницу Мое пространствоAPI-токены.

  3. В правом верхнем углу нажмите Создать токен.

  4. Придумайте имя токена, сгенерируйте его и скопируйте в буфер обмена.

Далее добавьте токен в JAICP:

  1. Перейдите в JAICP.

  2. В разделе Токены и переменные добавьте новый токен:

    • Название — LLM_API_KEY.
    • Значение — полученный токен Caila.

    Вы также можете дать токену любое другое название. В этом случае укажите его название в файле chatbot.yaml в секции injector.LLM_API_KEY_SECRET_NAME:

    injector:
    LLM_API_KEY_SECRET_NAME: "MY_API_KEY"

Параметры

Основные настройки

ПараметрТипОписаниеОбязательный
idСтрока

Идентификатор агента. Каждый агент в сценарии должен иметь уникальный идентификатор.

В одном стейте может быть только один тег AIAgent.
Да
modelСтрока

Укажите LLM, которую будет использовать агент.

Чтобы обращаться к LLM, агент использует сервис openai-proxy на платформе Caila. Вы можете посмотреть доступные модели и их стоимость на странице сервиса.

Часть параметров тега можно использовать, только если LLM поддерживает function calling — агент сам может вызвать нужные функции в сценарии. Такие параметры отмечены лейблом function calling. Список моделей, которые поддерживают function calling, смотрите в документации OpenAI.

примечание
Сайт OpenAI недоступен для российских IP-адресов.
Да
roleСтрокаРоль или персона агента в диалоге. Например: Сотрудник банка. Влияет на тон общения и на то, как агент отвечает на вопросы о себе.Да
goalСтрока

Цель агента. Например: Помоги пользователю сделать заказ.

В диалоге агент будет пытаться выполнить цель. Если цель выполнена, агент перейдет в nextState.
Да
instructionsСтрокаИнструкции для агента. Используйте, чтобы задать поведение агента. Пример: Отвечай только на языке пользователя. Сначала уточни, правильно ли ты понял вопрос.Нет
подсказка

Иногда LLM может давать неожиданные ответы или сообщать неточные данные.

Мы рекомендуем подробно заполнять параметры role, goal и instructions. Так вы сможете получать более предсказуемые и стабильные результаты.

Настройки LLM

ПараметрТипОписаниеОбязательный
temperatureЧисло

Регулирует креативность ответов. При высоких значениях результаты будут творческими и менее предсказуемыми.

Не рекомендуем менять параметры temperature и topP одновременно.

Принимает значения от 0.0 до 2.0. По умолчанию: 1.0. Рекомендуемое: 0.6.
Нет
topPЧисло

Регулирует разнообразность ответов. При низких значениях нейросеть выбирает из меньшего количества вероятных слов, а при высоких — ответ может получиться разнообразнее.

Не рекомендуем менять параметры topP и temperature одновременно.

Принимает значения от 0.0 до 1.0. По умолчанию: 1.0. Рекомендуемое: 1.0.
Нет
frequencyPenaltyЧисло

Штраф за частоту слов и фраз. Чем выше значение, тем меньше вероятность появления слов и фраз, которые уже встречались в ответе несколько раз.

Принимает значения от -2.0 до 2.0. По умолчанию: 0.0. Рекомендуемое: 0.0.
Нет
presencePenaltyЧисло

Штраф за повтор слов и фраз. Чем выше значение, тем меньше вероятность повторов в ответе. Все повторы штрафуются одинаково, независимо от частоты.

Принимает значения от -2.0 до 2.0. По умолчанию: 0.0. Рекомендуемое: 0.0.
Нет
maxTokensЧислоМаксимальное количество токенов, которое модель может сгенерировать за одну итерацию. Рекомендуемое значение: 4000.Нет

Вы можете подробнее узнать об этих параметрах в документации OpenAI.

примечание

Сайт OpenAI недоступен для российских IP-адресов.

Получение данных и вызов функций

ПараметрТипОписаниеОбязательный
function calling
requiredData
Массив объектовДанные, которые агент должен узнать у пользователя.Нет
function calling
functions
Массив строкАгент сможет вызывать эти функции в сценарии.Нет

История и дополнительные данные

С помощью этих параметров вы можете передать историю сообщений и дополнительные данные в агента. Это позволит агенту учитывать контекст диалога.

ПараметрТипОписаниеОбязательный
chatHistoryEnabledЛогическийЕсли true, агент получит историю диалога с ботом.Нет
chatHistoryLimitЧислоКоличество последних сообщений, которые агент получит из истории диалога с ботом. По умолчанию: 50.Нет
contextОбъектДополнительные данные, которые может использовать агент. Могут быть в любом формате.Нет

Переход в стейты

предупреждение
  • Если пользователь находится в диалоге с агентом:

  • Используйте параметры, которые указаны ниже, чтобы изменить логику перехода по стейтам.

ПараметрТипОписаниеОбязательный
function calling
nextState
СтрокаБот перейдет в этот стейт, если агент считает цель выполненной и у пользователя больше нет вопросов.Нет
function calling
noMatchState
СтрокаБот перейдет в этот стейт, если агент считает, что запрос пользователя не относится к цели.Нет
intentConfidenceЧислоПороговое значение для интентов и паттернов в сценарии. Если указано, то для каждого запроса к агенту:
  1. Бот выполняет $nlp.match относительно корня сценария /.
  2. Если вес совпадения с интентом или паттерном больше порогового значения, то бот переходит в такой стейт.
Нет
function calling
llmClassificationEnabled
Логический

Если true, агент сможет сам переводить диалог в другие стейты с тегом AIAgent.

При выборе стейта агент учитывает:
  • Роли и цели других агентов — параметры role и goal.
  • Названия стейтов, которые содержат агентов.
Мы рекомендуем давать стейтам названия, которые сильно отличаются друг от друга. Агент может чаще ошибаться, если в сценарии есть стейты с похожими названиями, например: NoMatch1 и NoMacth2.
Нет

Использование в сценарии

Аналитика

Агент проставляет следующий комментарий для каждой фразы пользователя: Фраза обработана тегом AIAgent.

В разделе АналитикаДиалогиФразы по этому комментарию вы можете найти фразы, которые были обработаны агентом.

Пример

В этом примере показан бот, который помогает пользователю создать заявку на выпуск карты.

theme: /

state: Start
q!: $regex</start>
script:
// Создаем новую сессию
$jsapi.startSession();
// Указываем данные о пользователе
$session.userData = {
userId: 111111,
userName: "Иван"
};
# Бот сразу переходит в стейт /Card
go!: /Card

state: Card
# Агент, который оформляет банковские карты
AIAgent:
id = card_application
model = gpt-4o
role = Сотрудник банка
goal = Помоги пользователю открыть карту
instructions = Отвечай на языке пользователя
# Для открытия карты нужны возраст, город и телефон пользователя
requiredData =
[
{
"name":"userAge",
"type":"number",
"description":"Возраст пользователя",
"reasonForQuestion":"Оформить карту могут только совершеннолетние"
},
{
"name":"userCity",
"type":"string",
"description":"Город пользователя",
"condition":"Только если пользователю уже есть 18 лет",
"dependsOn":"userAge"
},
{
"name":"userPhone",
"type":"string",
"description":"Телефон пользователя",
"condition":"Только если пользователю уже есть 18 лет",
"dependsOn":"userAge"
}
]
# Агент может вызвать функцию, чтобы создать заявку на карту
functions = ["createCardApplication"]
# Передаем данные о пользователе в качестве контекста
context = {{JSON.stringify($session.userData)}}
chatHistoryEnabled = true
# Бот перейдет в /Feedback, если агент выполнит цель
nextState = /Feedback

state: Feedback
InputText:
prompt = Оцените работу бота
varName = feedback

В начале диалога пользователь попадает в стейт Card:

  1. Агент спросит у пользователя возраст. Если пользователь моложе 18 лет, агент сообщит, что не может оформить карту.
  2. Если пользователю уже есть 18 лет, агент узнает город и телефон пользователя.
  3. Агент попросит подтверждение перед созданием заявки на карту.
  4. Если пользователь подтвердит, агент вызовет функцию createCardApplication и сообщит о создании заявки.
  5. Так как цель достигнута, агент переведет диалог в nextState — в стейт Feedback.
подсказка

В сценарии вы можете использовать сразу несколько агентов. Смотрите пример в статье Продвинутые возможности.

Пишите, я помогу!

Пишите, я помогу!

База знаний по документации