Search Embeddings

Рассмотрим пример робота, который является второй частью проекта “AI Chat With Own Document” (в первой части робот вычислил эмбеддинги из фрагментов указанного текстового файла и записал их в файл формата CSV). Данный робот использует ранее полученные эмбеддинги и нейросеть ChatGPT для ответа на любые вопросы по содержимому документа. Т.е., при работе данного робота можно ввести любые запросы на естественном языке, и нейросеть даст ответ, опираясь на содержимое документа.

Проект робота состоит из одной диаграммы. Таким образом, если описывать пошагово, то данный робот работает следующим образом:

  1. Загружает созданный в первой части проекта CSV-файл фрагментами текста и соответствующими им эмбеддингами.

  2. Открывает окно для ввода запроса.

  3. Выполняет запрос пользователя.

  4. В случае, если пользователь ввёл строку (слово), получает эмбеддинги по этой строке (слову).

  5. Отправляет запрос к GPT модели.

  6. Открывает окно с ответом на запрос к GPT модели.

  7. После чего, открывает окно для ввода запроса и выполняет запрос пользователя.

Диаграмма проекта выглядит так (для удобства блоки диаграммы пронумерованы):

  1. Блок “Старт” (с этого блока начинается любая диаграмма).

  2. Блок “Загрузить из CSV” позволяет загрузить Таблицу Данных из CSV-документа. Для данного блока указаны следующие свойства:

  • Путь к файлу (путь к файлу, из которого необходимо загрузить Таблицу Данных);

  • Разделитель (символ разделителя);

  • Кодировка (кодировка файла).

  1. Блок “Окно для ввода текста” показывает модальное окно, предназначенное для получения информации от пользователя. Для данного блока указаны следующие свойства:

  • Заголовок (текст, который будет отражен в заголовке диалогового окна);

  • Сообщение (текст, который будет отражен внутри диалогового окна).

  1. Блок “Условие” проверяет указанное условие на истинность, после чего выполнение сценария продолжается в сторону выхода “Да” (если условие выполняется) или в сторону выхода “Нет” (если условие не выполнилось).

Условие записывается в формате: “переменная” равна (==)/ больше (>)/ меньше (<) “значение”.

Например: $a == “Привет”, то есть, если значение переменной $a равно “Привет”, то выход “Да”, в противном случае – выход “Нет”.

$Result > 5, то есть, если значение переменной $Result меньше 5, то выход “Да”, в противном случае – выход “Нет”.

В данном случае, в качестве условия установлено: $TextQuery.Length == 0. Т.е., если длина строки равна нулю, то выход “Да”.

  1. Блок “Получить эмбеддинги” позволяет получить эмбеддинги по строке или списку строк с использованием сервиса Open AI. Для данного блока указаны следующие свойства:

  • Текст (входной текст для которого будут рассчитаны эмбеддинги);

  • Модель (модель нейросети для генерации ответа);

  • Таймаут (максимальное время ожидания ответа в секундах).

  1. Блок “Лог” позволяет выводить в лог произвольные сообщения и/или значения переменных в процессе работы сценария робота. Для данного блока указано свойство “Значение”. В кавычках указана текстовая константа, а имя переменной начинается с символа $.Т.е., данный блок записывает в лог робота получившиеся эмбеддинги по строке пользователя, полученные в предыдущем блоке.

  1. Блок “Найти эмбеддинги” по заданному запросу-эмбеддингу найти в базе знаний, представляющей собой таблицу объектов и их эмбеддингов, самые похожие строки и возвратить индексы этих строк в виде списка, отсортированного по убыванию похожести. Эмбеддинги и для запроса, и для таблицы эмбеддингов, по которой осуществляется поиск, могут быть получены с помощью блока Получить эмбеддинги. При первом использовании блока происходит построение базы данных векторов и это может занимать длительное время. При последующих вызовах блока с одним и тем же "ID базы" будет использоваться уже созданная база данных векторов и скорость работы блока возрастает многократно. Для данного блока указаны следующие свойства:

  • Эмбеддинг запроса (эмбеддинг, для которого необходимо найти похожие строки в таблице);

  • База знаний (таблица, по которой будет осуществляться поиск, одна из колонок которой должна содержать эмбеддинги, другие колонки таблицы могут содержать любые пользовательские данные);

  • Колонка эмбеддингов (индекс колонки из таблицы (по умолчанию установлено значение 1), указанной в свойстве "База знаний", в которой размещены эмбеддинги.);

  • Количество результатов (Максимальное количество возвращаемых блоком строк-результатов из базы знаний (по умолчанию установлено значение 5).

  1. Блок “Присвоить значение переменной” устанавливает новые значения для одной или нескольких переменных. В данном случае в свойствах указаны два значения, которые необходимо присвоить переменным: переменной $AIQuery необходимо присвоить значение “Answer the question using only knowledge base listed below.`nQuestion: {query}`nKnowledge base: `n{strresult}", а переменной $strresult – пустое значение (для последующей записи в переменную ответа на запрос пользователя).

  1. Блок “Цикл Для каждого (Список)” циклично перебирает все элементы в заданном списке.

  1. Блок “Присвоить значение переменной” устанавливает новые значения для одной или нескольких переменных. В данном случае в свойствах указано одно значение, которое необходимо присвоить переменной.

  1. Блок “Присвоить значение переменной” устанавливает новые значения для одной или нескольких переменных. В данном случае в свойствах указано два значения, которые необходимо присвоить указанным переменным.

  1. Блок “Лог” позволяет выводить в лог произвольные сообщения и/или значения переменных в процессе работы сценария робота. Для данного блока указано свойство “Значение”. В кавычках указана текстовая константа, а имя переменной начинается с символа $.Т.е., данный блок записывает в лог робота значение переменной $AIQuery (получившийся запрос к GPT). В свою очередь переменная $AIQuery включает в себя текст пользователя и Базу Знаний.

  1. Блок “Запрос к GPT модели” позволяет отправлять запросы к классическим генеративным моделям Open AI до ChatGPT и получать ответ. Для данного блока указаны следующие свойства:

  • Запрос (запрос на естественном языке);

  • Модель (модель для генерации текста);

  • Температура (десятичное дробное число от 0 до 1, показывающее степень "случайности" или "креативности" результата, где 0 - наименее креативный результат, а 1 - максимально случайный);

  • Таймаут (максимальное время ожидания ответа в секундах).

  1. Блок “Окно с сообщением” показывает пользователю модальное диалоговое окно, с заданным заголовком, текстом и набором кнопок. Для данного блока указаны следующие свойства:

  • Заголовок (текст, который будет отображен в заголовке диалогового окна);

  • Сообщение (переменная, которая будет отображена внутри диалогового окна, в данном случае, это переменная $Response, которая является ответом генеративной модели на запрос);

  • Кнопки (кнопки, которые будут доступны пользователю для нажатия).

15. Блок “Конец” (этим блоком завершается работа сценария или возврат диаграммы подпроцесса в основной процесс).

Last updated