Search Embeddings
Last updated
Last updated
Рассмотрим пример робота, который является второй частью проекта “AI Chat With Own Document” (в первой части робот вычислил эмбеддинги из фрагментов указанного текстового файла и записал их в файл формата CSV). Данный робот использует ранее полученные эмбеддинги и нейросеть ChatGPT для ответа на любые вопросы по содержимому документа. Т.е., при работе данного робота можно ввести любые запросы на естественном языке, и нейросеть даст ответ, опираясь на содержимое документа.
Проект робота состоит из одной диаграммы. Таким образом, если описывать пошагово, то данный робот работает следующим образом:
Загружает созданный в первой части проекта CSV-файл фрагментами текста и соответствующими им эмбеддингами.
Открывает окно для ввода запроса.
Выполняет запрос пользователя.
В случае, если пользователь ввёл строку (слово), получает эмбеддинги по этой строке (слову).
Отправляет запрос к GPT модели.
Открывает окно с ответом на запрос к GPT модели.
После чего, открывает окно для ввода запроса и выполняет запрос пользователя.
Диаграмма проекта выглядит так (для удобства блоки диаграммы пронумерованы):
Блок “Старт” (с этого блока начинается любая диаграмма).
Блок “Загрузить из CSV” позволяет загрузить Таблицу Данных из CSV-документа. Для данного блока указаны следующие свойства:
Путь к файлу (путь к файлу, из которого необходимо загрузить Таблицу Данных);
Разделитель (символ разделителя);
Кодировка (кодировка файла).
Блок “Окно для ввода текста” показывает модальное окно, предназначенное для получения информации от пользователя. Для данного блока указаны следующие свойства:
Заголовок (текст, который будет отражен в заголовке диалогового окна);
Сообщение (текст, который будет отражен внутри диалогового окна).
Блок “Условие” проверяет указанное условие на истинность, после чего выполнение сценария продолжается в сторону выхода “Да” (если условие выполняется) или в сторону выхода “Нет” (если условие не выполнилось).
Условие записывается в формате: “переменная” равна (==)/ больше (>)/ меньше (<) “значение”.
Например: $a == “Привет”, то есть, если значение переменной $a равно “Привет”, то выход “Да”, в противном случае – выход “Нет”.
$Result > 5, то есть, если значение переменной $Result меньше 5, то выход “Да”, в противном случае – выход “Нет”.
В данном случае, в качестве условия установлено: $TextQuery.Length == 0. Т.е., если длина строки равна нулю, то выход “Да”.
Блок “Получить эмбеддинги” позволяет получить эмбеддинги по строке или списку строк с использованием сервиса Open AI. Для данного блока указаны следующие свойства:
Текст (входной текст для которого будут рассчитаны эмбеддинги);
Модель (модель нейросети для генерации ответа);
Таймаут (максимальное время ожидания ответа в секундах).
Блок “Лог” позволяет выводить в лог произвольные сообщения и/или значения переменных в процессе работы сценария робота. Для данного блока указано свойство “Значение”. В кавычках указана текстовая константа, а имя переменной начинается с символа $.Т.е., данный блок записывает в лог робота получившиеся эмбеддинги по строке пользователя, полученные в предыдущем блоке.
Блок “Найти эмбеддинги” по заданному запросу-эмбеддингу найти в базе знаний, представляющей собой таблицу объектов и их эмбеддингов, самые похожие строки и возвратить индексы этих строк в виде списка, отсортированного по убыванию похожести. Эмбеддинги и для запроса, и для таблицы эмбеддингов, по которой осуществляется поиск, могут быть получены с помощью блока Получить эмбеддинги. При первом использовании блока происходит построение базы данных векторов и это может занимать длительное время. При последующих вызовах блока с одним и тем же "ID базы" будет использоваться уже созданная база данных векторов и скорость работы блока возрастает многократно. Для данного блока указаны следующие свойства:
Эмбеддинг запроса (эмбеддинг, для которого необходимо найти похожие строки в таблице);
База знаний (таблица, по которой будет осуществляться поиск, одна из колонок которой должна содержать эмбеддинги, другие колонки таблицы могут содержать любые пользовательские данные);
Колонка эмбеддингов (индекс колонки из таблицы (по умолчанию установлено значение 1), указанной в свойстве "База знаний", в которой размещены эмбеддинги.);
Количество результатов (Максимальное количество возвращаемых блоком строк-результатов из базы знаний (по умолчанию установлено значение 5).
Блок “Присвоить значение переменной” устанавливает новые значения для одной или нескольких переменных. В данном случае в свойствах указаны два значения, которые необходимо присвоить переменным: переменной $AIQuery необходимо присвоить значение “Answer the question using only knowledge base listed below.`nQuestion: {query}`nKnowledge base: `n{strresult}", а переменной $strresult – пустое значение (для последующей записи в переменную ответа на запрос пользователя).
Блок “Цикл Для каждого (Список)” циклично перебирает все элементы в заданном списке.
Блок “Присвоить значение переменной” устанавливает новые значения для одной или нескольких переменных. В данном случае в свойствах указано одно значение, которое необходимо присвоить переменной.
Блок “Присвоить значение переменной” устанавливает новые значения для одной или нескольких переменных. В данном случае в свойствах указано два значения, которые необходимо присвоить указанным переменным.
Блок “Лог” позволяет выводить в лог произвольные сообщения и/или значения переменных в процессе работы сценария робота. Для данного блока указано свойство “Значение”. В кавычках указана текстовая константа, а имя переменной начинается с символа $.Т.е., данный блок записывает в лог робота значение переменной $AIQuery (получившийся запрос к GPT). В свою очередь переменная $AIQuery включает в себя текст пользователя и Базу Знаний.
Блок “Запрос к GPT модели” позволяет отправлять запросы к классическим генеративным моделям Open AI до ChatGPT и получать ответ. Для данного блока указаны следующие свойства:
Запрос (запрос на естественном языке);
Модель (модель для генерации текста);
Температура (десятичное дробное число от 0 до 1, показывающее степень "случайности" или "креативности" результата, где 0 - наименее креативный результат, а 1 - максимально случайный);
Таймаут (максимальное время ожидания ответа в секундах).
Блок “Окно с сообщением” показывает пользователю модальное диалоговое окно, с заданным заголовком, текстом и набором кнопок. Для данного блока указаны следующие свойства:
Заголовок (текст, который будет отображен в заголовке диалогового окна);
Сообщение (переменная, которая будет отображена внутри диалогового окна, в данном случае, это переменная $Response, которая является ответом генеративной модели на запрос);
Кнопки (кнопки, которые будут доступны пользователю для нажатия).
15. Блок “Конец” (этим блоком завершается работа сценария или возврат диаграммы подпроцесса в основной процесс).