OpenAI добавил поддержку плагинов в ChatGPT, и теперь он может подключаться к сторонним сервисам и искать информацию в сети. А помните, была такая компания Гугл?
В этой статье я хотел бы рассказать о самом, на мой взгляд, интересном плагине, который позволяет искать ответы в собственной базе.
Основные преимущества плагина
- Семантический поиск: Плагин позволяет получать наиболее релевантные фрагменты документов, задавая вопросы на естественном языке.
- Интеграция с векторными базами данных: Retrieval Plugin использует модель эмбеддингов OpenAI для генерации векторных представлений документов и их поиска в векторной базе данных. Причем он позволяет использовать разные базы для векторного поиска.
- Функция памяти для ChatGPT: Плагин позволяет сохранять фрагменты разговоров для дальнейшего использования, тем самым обеспечивая контекстно-зависимый диалог.
Установка и интеграция плагина
Чтобы начать использовать Retrieval Plugin, вам потребуется:
- Получить ключ для использования OpenAI API.
- Сгенерировать
BEARER_TOKEN
. Можно использовать этот сервис. - Настроить базу данных для хранения собственных документов. Плагин предоставляет возможность выбрать из следующего списка (
pinecone
,weaviate
,zilliz
,milvus
,qdrant
, илиredis
), но код можно допилить и для собственного варианта (куда же без elasticsearch). В обзоре я буду использоватьpinecone
. - Создать и настроить собственный сервер FastAPI.
Настраиваем хранилище pinecone
- Регистрируемся в pinecone. Можно с помощью github-аккаунта.
- Получаем ключ API.
- Создаем свой собственный индекс, это можно сделать в приложении либо через питоновскую библиотеку.
Настраиваем окружение для проекта
- Поставьте Python 3.10
- Клонируйте репозиторий:
git clone https://github.com/openai/chatgpt-retrieval-plugin.git
- Перейдите в папку с репозиторием:
cd /path/to/chatgpt-retrieval-plugin
- Установите poetry:
pip install poetry
. Можно использовать и другой способ создания виртуального окружения, но тогда надо будет внести исправления в код проекта. - Создайте виртуальное окружение с Python 3.10:
poetry env use python3.10
- Активируйте виртуальное окружение:
poetry shell
- Установите зависимости приложения:
poetry install
- Задайте необходимые переменные окружения.
- Запустите API локально:
poetry run start
. Если вы все сделали по инструкции, то в терминале вы увидите нечто похожее на картинку ниже. Я создал индекс с оригинальным названиемtest
, поэтому плагин подключается к нему.
- Если перейти по ссылке
http://0.0.0.0:8000/docs
, то попадете на страничку с документацией. Здесь же можно производить отладку. Нажмите наauthorize
и введитеBEARER_TOKEN
, который указали в настройках.
Описание эндпоинтов
Плагин предоставляет следующие эндпоинты для работы с документами:
/upsert
: Загрузка и хранение текста и метаданных одного или нескольких документов в векторной базе данных. Документы разбиваются на фрагменты размером около 200 токенов, каждый с уникальным идентификатором./upsert-file
: Позволяет загрузить один файл (PDF, TXT, DOCX, PPTX или MD) и сохранить его текст и метаданные в векторной базе данных. Файл конвертируется в простой текст и разбивается на части примерно по 200 токенов, каждая с уникальным идентификатором./query
: Запрос к векторной базе данных с использованием одного или нескольких запросов на естественном языке и дополнительных фильтров метаданных. Возвращает список объектов, каждый из которых содержит список наиболее релевантных фрагментов документов для заданного запроса./delete
: Удаление одного или нескольких документов из базы данных с использованием их идентификаторов, фильтра метаданных или флага удаления всех документов.
Тестируем индекс
Пришло время опробовать плагин в работе. К сожалению, это не получится сделать в самом приложении ChatGPT, т. к. функционал пока ограничен, и для интеграции нужно вставать в очередь. Но кое-что можно попробовать сделать, например, протестировать векторный поиск.
Представим себе, что мы хотим автоматизировать службу поддержки. Наша цель – научить бота автоматически отвечать на вопросы пользователей и давать им дополнительную информацию в виде ссылок на внутреннюю документацию(это может быть confluence).
Попросим ChatGPT придумать нам примеры для такого индекса. Мой промт для этой цели:
ChatGPT мне предложил следующие варианты:
Теперь индексируем эти примеры в Pycone:
В случае успеха в pycone вы должны увидеть проиндексированные документы:
Осталось узнать, будет ли работать этот гениальный код. Для этого надо перейти по адресу http://0.0.0.0:8000/sub/docs (да, создатели не поленились и создали отдельную страничку) и написать запрос в нашу базу:
ИИ выдал следующие варианты решения проблемы нашего пользователя:
Внимательный читатель ресурса, возможно, начал догадываться, что где-то он уже это видел. Все верно, похожий функционал был описан в моей предыдущей статье. В ней была реализована базовая версия векторного поиска, но без использования модного хранилища(кстати, тоже на FastAPI).
На сегодня у меня все – в следующей части, если CloseAI все-таки выдаст мне талон, посмотрим, как это будет работать в самом интерфейсе ChatGPT, а также попробуем сохранить историю наших запросов в векторной базе.
Подписывайтесь также на мой канал, в котором я хайпую и спекулирую на теме NLP и AI.
Заключение
Retrieval Plugin значительно расширяет возможности ChatGPT, предоставляя функции семантического поиска, интеграции с векторными базами данных и поддержки памяти. Это позволит погружать модель в контекст необходимой для вас информации. Такой функционал откроет огромные возможности для организаций, которые хотят использовать AI для работы с внутренними документами.
Надеюсь, было полезно, спасибо за внимание!
Как вы используете ChatGPT?