Обучение ИИ векторному методу

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

Одна из проблем, с которой часто сталкиваются пользователи, которые используют Генеративную модель ИИ – получение ложной или искаженной информации. Искусственный интеллект может "уверенно" отвечать неправильно, если не ограничен контекстом или не знает, где искать достоверный источник. Данное явление называют "галлюцинацией ИИ".

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

Решением становится метод подбора — подход, при котором ИИ не "выдумывает" ответ, а выбирает наиболее релевантный фрагмент из заранее подготовленной базы знаний.

В данной инструкции мы подробно рассмотрим процесс обучения ИИ методу подбора.

hashtag Что такое метод подбора?

circle-info

Метод подбора — это способ, с помощью которого искусственный интеллект находит наиболее подходящий объект из множества возможных, основываясь на определённой логике или метрике сходства. Такой подход позволяет извлекать наиболее релевантные данные из подготовленного набора, минимизируя риск ошибки.

hashtag Для обучения нам понадобятся следующие платформы и сервисы:

  • NocoDB

  • n8n

  • Pinecone

  • OpenAI

hashtag Формирование базы данных

В первую очередь нам необходимо подготовить данные для загрузки в ИИ и сформировать базу данных в формате вопрос-ответ. Сделать это можно на платформе NocoDB, однако быстрее и проще будет создать подходящий список в Google Sheets.

1

Открываем Google Sheets и создаем таблицу

  • В созданной таблице создаем две колонки – question (вопрос) и answer (ответ).

2

Перерабатываем материал в вопрос-ответы

  • Берём интересующий материал и формируем вопросы и ответы.

circle-exclamation
3

Скачиваем листы в формате CSV

  • После формирования базы вопросов и ответов скачиваем каждый лист в формате CSV.

4

Создаём базу в NocoDB и таблицу

  • Открываем NocoDB, нажимаем Create Base, задаём имя и снова Create Base.

  • Создаём новую таблицу (Create Table), переименовываем колонку Title в нужное имя (Edit field) и меняем тип поля на Long text.

5

Добавляем дополнительные колонки

Добавляем ещё 4 колонки (к уже переименованной Title), итого должно получиться 5 колонок:

  • question — Field type: Long text

  • answer — Field type: Long text

  • embedded — Field type: Checkbox

  • to_embed — Field type: Checkbox (значение Default value должно быть включено)

  • to_delete — Field type: Checkbox

6

Импортируем CSV в NocoDB

  • Нажимаем на три вертикальных точки → Upload → Upload CSV.

  • Перетягиваем CSV или загружаем из файловой системы.

  • Важно: названия колонок в CSV и таблице NocoDB должны совпадать. Либо вручную сопоставьте столбцы.

  • Нажмите Import.

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


hashtag Создание индексов в Pinecone

Pinecone — облачная векторная база данных. При передаче текста в ИИ он преобразуется в вектор (массив чисел), отражающий смысл текста. Для эффективного поиска похожих векторов используют индекс — структуру, оптимизированную для быстрого поиска.

1

Создаём индекс в Pinecone

  • Откройте Pinecone и нажмите Create index.

2

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

  • Введите название индекса и поставьте галочку на Custom settings.

3

Конфигурация: Dimension

  • В разделе Configuration установите Dimension = 3072.

4

Создание индекса

  • Нажмите Create index и после создания скопируйте ссылку на индекс — она потребуется далее.


hashtag Обучение ИИ по базе знаний (загрузка эмбеддингов в Pinecone через n8n)

1

Создаём Workflow в n8n

  • В n8n создаём новый Workflow.

  • Цепочка узлов будет выглядеть так (схема в оригинале):

Краткое описание узлов:

  • Schedule Trigger — триггер по расписанию.

  • NocoDB — получает строки (вопросы/ответы) из таблицы.

  • HTTP Request — запрос к OpenAI для генерации эмбеддингов.

  • Embeddings — формирует массив векторов.

  • 50 Vectors — формирует пакет из 50 векторов для загрузки.

  • Upsert — загружает векторы в Pinecone.

  • Mark as Embedded — помечает записи в NocoDB как обработанные.

2

Schedule Trigger

  • Устанавливаем интервал запуска цепочки (если нужно автоматизировать пополнение векторов).

3

NocoDB (получение данных)

  • В узле выбираем Credential (NocoDB и Pinecone должны быть настроены в n8n как Credentials).

  • Указываем Project Name и Table name.

  • В Options → Fields указываем: - I d,question,answer

  • В поле Filter by Formula используем фильтр:

triangle-exclamation
4

HTTP Request (вызов OpenAI embeddings)

  • Заполняем Header Parameters: Authorization: Bearer OPENAI_KEY (замените OPENAI_KEY на ваш ключ в формате Bearer).

  • В Body Parameters передаём:

Name: input Value: {{ $json.question }}

Name: model Value: text-embedding-3-large

5

Embeddings (обработка ответа OpenAI)

  • Узел получает эмбеддинги от OpenAI и передаёт их дальше.

6

50 Vectors (формирование пакета для Pinecone)

В узле Code используем такой код:

  • Код подготовит массив векторов для загрузки в Pinecone и массив для пометки записей в NocoDB как embedded.

7

Upsert (загрузка в Pinecone)

  • URL: https://<cсылка_на_pinecone>/vectors/upsert

  • Method: POST

  • Authentication: Predefined (Credential Type: PineconeApi)

  • Header Parameters: accept: application/json

  • Body Parameters: vectors = {{ $json.vectors }}

8

Mark as Embedded (пометка записей в NocoDB)

  • URL: https://<Адрес_nocodb>/api/v2/tables/<айди_таблицы>/records

  • Method: PATCH

  • Authentication: Predefined (Credential Type: NocoDB API Token)

  • Header: accept: application/json

  • В Body (тип: Expression) указываем:

  • Сохраняем Workflow и запускаем вручную или по триггеру. После успешного выполнения в колонке embedded появятся галочки — данные загружены в Pinecone.


hashtag Настройка сценария в Smartbot

  1. Войдите в личный кабинет Smartbot и перейдите в раздел "Сценарии".

  2. Нажмите "Создать сценарий", задайте имя и создайте сценарий.

Схематически сценарий состоит из 7 блоков:

  • Нет подходящего сценария

  • Выполнить SmartQuery

  • Выполнить SmartQuery

  • Отправить HTTP-запрос

  • Webhook

  • Выполнить SmartQuery

  • Отправить сообщение

Краткая расшифровка блоков:

  • Блок 1: Нет подходящего сценария — реагирует на любое сообщение пользователя, запускает цепочку.

  • Блок 2: Выполнить SmartQuery — техническая связка (промежуточный блок).

  • Блок 3: Выполнить SmartQuery — готовит URL и тело запроса.

Пример переменных и тела (в блоке 3):

  • %string_temp% — итоговый URL.

  • %body% — передаём вопрос и ID пользователя.

  • %n8n_url% — ссылка на ваш n8n сервер.

Важно: URL должен совпадать с Path вебхука в n8n.

  • Блок 4: Отправить HTTP-запрос — POST %string_temp% с телом {{ %body% | to_json }} и заголовком content-type: application/json.

  • Блок 5: Webhook — принимает ответ от n8n. Для работы создайте API-токен в Smartbot и выберите его в настройках Webhook.

  • Блок 6: Выполнить SmartQuery — извлекаем ответ из Webhook и сохраняем в переменную %bot_message%:

  • Блок 7: Отправить сообщение — выводим %bot_message% пользователю.

  • Проверка: is not empty

Code (успех) — формирование тела ответа

Пример кода для формирования тела ответа в случае совпадения:

Внимание: access_token, channel_id и block_id — примеры из инструкции. Используйте ваши реальные значения.

HTTP Request (успех) — отправка ответа в Smartbot

  • Method: POST

  • URL: https://api.smartbotpro.ru/blocks/execute

  • Authentication: None

  • Body Content Type: JSON

  • Body Parameters: {{ JSON.stringify($json.body) }}

Code1 (совпадений не найдено)

Пример тела для случая отсутствия совпадений:

HTTP Request1 (не найден ответ)

  • Method: POST

  • URL: https://api.smartbotpro.ru/blocks/execute

  • Authentication: None

  • Body Content Type: JSON

  • Body Parameters: {{ JSON.stringify($json.body) }}


Если нужно, могу:

  • Сгенерировать готовые JSON/пример конфигурации для узлов n8n (Webhook, HTTP Request, Upsert в Pinecone и т.п.).

  • Помочь адаптировать сценарий под ваши реальные access_token / channel_id / block_id (без публикации чувствительных данных — подскажу, где заменить).

Хотите, чтобы я подготовил экспорт n8n workflow (в виде JSON) под вашу конфигурацию?