Q&A
Last updated
Слот Q&A предназначен для генерации ответа Агента на Реплика Собеседника, руководствуясь выбранной в Слоте Data source.Слот принимает Реплика в client_message и отправляет ее на сервис генерации ответа (FAQ сервис) с учетом выбранной Data source, получает ответ от сервиса и записывает его в Системная контекстная переменная faq_result.Слот Q&A содержит в настройках Ресурсы Компании — Data source (Q&A Datasource).
Используемая в FAQ сервисе LLM модель: Llama3.
Name — название Слота, которое будет отображено в Дерево сценария. Максимальная длина значения поля — 40 символов. Если название не введено, Платформа автоматически копирует название выбранной Data source из поля Datasource в поле Name.
Валидация: по нажатию кнопки CREATE (при создании слота) или SAVE (при редактировании Слота) проверяется количество символов в поле:
при количестве символов более 40 в поле выводится ошибка Name must contain no more than 40 characters
Data Source* — Data source (Datasource), которая служит источником для поиска ответа на Реплика
Валидация: по нажатию кнопки CREATE (при создании Слота) или SAVE (при редактировании Слота) проверяется наличие выбранной Data source в поле:
при импорте конфига (Экспорт, импорт, замена сценария агента) может возникнуть ситуация, когда поле Data Source будет пустым, если открыть такой Слот, то его нельзя будет сохранить, пока не выберешь Data source (закрыть окно редактирования Слота без сохранения можно).
Send answer to channel — опция, которая отвечает за поведение Слота: отправлять ли ответ в канал (см. Работа слота), включена по дефолту
Chunk size* — максимальный размер одного текстового сообщения с ответом от Слота. Поле появляется при включенной опции Send answer to channel. Лимиты на значение поля — от 100 до 1000000 символов.
Валидация: по нажатию кнопки CREATE (при создании слота) или SAVE (при редактировании слота) проверяется количество символов в поле:
при количестве символов менее 100 или более 1000000 в поле выводится ошибка Chunk size has to be between 100 and 1000000 characters
FAQ-сервис отдает ответ в Слот постепенно частями, Слот принимает ответ от FAQ-сервиса так же частями и подсчитывает сумму их длин;
С момента, как сумма длин частей достигает минимального размера (минимальный размер одного текстового сообщения считается по формуле Chunk size - 50 символов) и до момента, когда она становится равна Chunk size - 30 символов, система ищет в тексте ответа сепаратор — разделительный знак препинания (., ?, !, :, ;)
Если на данном промежутке находится сепаратор:
останавливается накопление сообщения, сообщение обрезается по сепаратору и отправляется в канал
начинается накопление нового сообщения и повторяются операции, начиная с пункта 4.b.ii.
Если на данном промежутке не найден сепаратор, то накопление ответа продолжается до момента, когда сумма длин частей становится равна Chunk size. На данном промежутке текста система ищет сепаратор или пробел.
Если на данном промежутке находится сепаратор или пробел:
останавливается накопление сообщения, сообщение обрезается по сепаратору или пробелу и отправляется в канал
начинается накопление нового сообщения и повторяются операции, начиная с пункта 4.b.ii.
Если на данном промежутке не найден сепаратор или пробел:
останавливается накопление сообщения, сообщение обрезается ровно по количеству символов Chunk size и отправляется в канал.
начинается накопление нового сообщения и повторяются операции, начиная с пункта 4.b.ii.
Таким образом в канал может уйти несколько сообщений, пока не будет отправлен весь ответ от FAQ-сервиса;
После получения всех частей ответа Слот записывает весь текст ответа в Контекстная переменная faq_result
Пример: значение поля Chunk size — 500 символов, на промежутке с 450 до 470 символов система ищет сепаратор (., ?, !, :, ;). Был найден сепаратор — ., сообщение было обрезано по нему и отправлено в канал. Началось накопление нового сообщения, на промежутке с 450 до 470 система не нашла сепаратор, накопление сообщения продолжилось, пока не был найден пробел на промежутке с 470 до 500 символов. Сообщение было обрезано по пробелу, отправлено в канал, началось накопление нового сообщения, которое содержало всего 466 символов. Оно было отправлено в канал, весь ответ был записан в Контекстная переменная faq_result.
Include slot history to prompt (steps count) — количество шагов истории общения со Слотом, которое необходимо использовать в качестве контекста в момент запроса к FAQ-сервису:
в Платформа хранится история общения в 6 шагов (один шаг это один запрос + полный ответ) для каждого Слота Q&A и LLM в каждом Чате;
Проблема: на данный момент хранится история общения в 3 шага, а не 6 🐞В слоте Q&A количество пар вопрос-ответ в Include slot history to prompt steps count не совпадает с требуемым
один шаг хранится 2 недели, затем удаляется из истории общения;
по умолчанию значение поля равно 0;
при отсутствии значения в поле после сохранения Слота в поле подставляется значение 0;
в поле допустимо использование Выражение;
если в поле содержится невалидное значение — не число; число не в диапазоне от 0 до 6; Выражение, дающее результат не в формате числа либо числа не в диапазоне от 0 до 6 — то при работе Слота будет подставлено значение 0.
Custom prompt — пользовательская подсказка (промпт), содержащая инструкции по генерации ответа Слотом. Максимальное значение поля — 1500 символов.
Валидация: по нажатию кнопки CREATE (при создании слота) или SAVE (при редактировании слота) проверяется количество символов в поле:
В поле допустимо использование Выражение и Выражение с управляющей конструкцией. Значение Выражение будет вычислено и подставлено в качестве пользовательского промпта.
Характеристики, которые можно указать с помощью дополнительных инструкций:
Имя модели;
Тон ответа;
Формат ответа;
Длина ответа.
Ограничения и специфика:
Нет гарантий, что дополнительные инструкции будут 100% случаях выполняться;
Дополнительные инструкции можно описывать на целевом языке Q&A модели;
Не стоит повторять в дополнительных инструкциях инструкции системного промпта Q&A модели
Стабильнее и разнообразнее инструкции поддерживает английский язык (англоязычный агент с англоязычным промптом)
Кнопка SHOW DATASOURCE IN NEW TAB — по нажатию кнопки выбранная в поле Data Source Data source открывается в соседней вкладке браузера.
В Слоте Q&A допустимо использование Выражение в поле Include slot history to prompt (steps count) и Выражение и Выражение с управляющей конструкцией в поле Custom prompt. Подробнее: Синтаксис
При генерации ответа Слот Q&A ориентируется в первую очередь на инструкции системного (встроенного) промпта:
Задача — ответить на вопрос по контексту (контекст — часть Data source, наиболее вероятно содержащая ответ на вопрос);
Ответ должен быть прямым, без додумок, только по контексту;
Ответ должен быть только на заданном языке;
Если вопрос не релевантен контексту, ответить, что невозможно ответить;
Если контекста недостаточно, чтобы дать ответ на вопрос, ответить, что невозможно ответить;
Не упоминать контекст.
О создании Data source: Q&A Data Sources
Максимальная продолжительность обучения Агента не более 10 минут на один Слоты Q&A с уникальным значением в Data Source.
Не допускается использование Слота Q&A в цикле Repeat без Блокирующий слот в Ветка сценария Repeat Next, при Обучение Агента будет выведена ошибка валидации: To use Q&A slot in loop you need blocking slot (Wait for Reaction, Button Menu etc) in Repeat Next branch (не реализовано)
Слот Q&A принимает на вход Контекстная переменная client_message (в т.ч предварительно модифицированную, например, в Слоте Memory).
Слот Q&A вычисляет содержимое поля Custom prompt, если оно заполнено
Слот Q&A вычисляет содержимое поля Include slot history to prompt (steps count):
если в поле содержится невалидное значение — не число; число не в диапазоне от 0 до 6; Выражение, дающее результат не в формате числа либо числа не в диапазоне от 0 до 6 — то будет подставлено значение 0.
Слот отправляет в FAQ-сервис запрос формата:
{ "model_id": <числовой идентификатор модели>, "question": <текст вопроса (client_message)>, "options": { <-- Опциональный объект "additional_instructions": <содержимое поля Custom prompt> }, "history": { "messages": [ <-- шаги истории общения для контекста { "type": "client" (or "agent"), "content": "some question for q&a" } ] }}
FAQ-сервис производит генерацию ответа на текст из client_message на основании информации в выбранной Data source в поле Data Source в настройках Слота, истории общения (если значение поля Include slot history to prompt (steps count) валидно и больше 0), системного промпта и пользовательского промпта (при его наличии). Ответ отправляется FAQ-сервисом в Слот.
Существует Лимит на длину ответа от FAQ-сервиса равный 1024 токена (токен — это минимальная единица текста, на которую модель (Llama3) разбивает текст для обработки). Ответ от FAQ-сервиса никогда не превышает данный лимит. Среднее количество символов на токен — 4 символа, соответственно, примерная максимальная длина полного ответа от FAQ-сервиса — 4096 символов.
Для голосового канала Voice box API ответ всегда будет отдаваться стримингом по предложениям
Слот отправляет текст ответа в канал, как описано в п.4.b раздела Атрибуты слота, если в настройках Слота включена опция Send answer to channel.
После получения всех частей ответа, Слот записывает текстовый результат (ответ) в переменную faq_result
если операция была прервана по таймауту в faq_result попадает текст error: timeout
faq_result — Системная контекстная переменная, не подлежит изменению пользователем
Информация о работе Слота отражается в следующих отчетах:
Chat History — записывается результат выполнения слота в следующем формате - создаются 2 или 3 записи в таблице:
Начало обработки сообщения FAQ сервисом (всегда)
Author - System
тип Q&A processing start
контент:
slot id
входная фраза
Datasource name
сейчас допустимо текущее на момент выгрузки имя датасорса
в новом отчете нужно будет выводить имя датасорса на момент общения - из опубликованной версии
Полный текст ответа,
Author - Agent
тип: Q&A reply
контент - текст сообщения
Окончание обработки сообщения FAQ сервисом (всегда)
Author - System
тип Q&A processing end
контент:
slot id
признак answer sent (“отправлен ли ответ в канал” )
chunk size
chunk number
при отсутствии выбранной Data source в поле выводится ошибка Please choose datasource
Текстовые сообщения отправляются в канал следующим образом:
при количестве символов более 1500 в поле выводится ошибка Prompt size should not exceed 1500 characters
При импорте только конфигурационного файла без файлов Data source Слоты Q&A в Сценарий агента будут созданы с пустыми Data source (Data source будут созданы, но не будут содержать в себе файлов).
При попытке обучить такого Агента будет выведена ошибка валидации и Агент не обучится.
Chat context — переменная faq_result
Project usage — количество попаданий в Слот.
Slot stats — отмечается прохождение Слота (в т. ч. в случае прерывания операции по таймауту).
Chat History — если включена опция отправки ответа в канал, то сообщения от Агента отражаются в отчете и отмечаются как текстовые сообщения.
скорость выполнения генерации ответа (от поступления задачи в FAQ сервис, до выдачи им ответа в сценарий)