Интеграция плагинов ChatGPT с LLaMA

OpenAI только что выпустила первоначальную поддержку плагинов для ChatGPT, позволяющих языковой модели выступать в качестве агентов и взаимодействовать с внешним миром с помощью API. Здесь мы рассмотрим варианты использования chatgpt-retrieval-plugin от OpenAI с языковой моделью LLaMA от Meta.

созданию открытого протокола для моделей, позволяющих нам совместно использовать плагины между LLM и управлять ими.

Интеграция плагинов ChatGPT с LLaMA

Вступление

Документация OpenAI объясняет, что плагины способны расширять возможности ChatGPT.

Доступно мало подробностей о том, как плагины подключаются к ChatGPT, но OpenAI предоставляет плагин chatgpt-retrieval-plugin с открытым исходным кодом для семантического поиска и извлечения пользовательских данных для дополнительного контекста.

В этом руководстве мы возьмём этот плагин поиска и добавим скрипт, который интегрирует его с LLaMA 7B, запущенным на вашем локальном компьютере.

Код, который привязывает плагин к LLaMA, доступен в этом репозитории:

lastmile-ai/llama-retrieval-plugin

Ограничения

Этот подход успешно добавляет внешний контекст к LLaMA, хотя и с пробелами по сравнению с подходом плагинов OpenAI:

  • Ограничения в базовой модели. LLaMA далёк от ChatGPT во многих отношениях. Это требует значительной дополнительной доводки (например, Alpaca).
  • Не распространяется на другие плагины. Документация OpenAI предполагает, что ChatGPT может считывать схему API плагина и динамически создавать правильные вызовы API, удовлетворяющие запросу пользователя. Напротив, всё пошло не так хорошо, когда мы попытались попросить LLaMA создать запрос cURL с учётом схемы OpenAPI. Одним из решений этой проблемы была бы точная настройка модели специально для схем OpenAPI.

Демонстрация

Сначала мы настраиваем наше хранилище данных и загружаем в него два PDF-файла – LLaMA paper и Conda cheatsheet.

Затем мы можем запросить эти данные с соответствующими вложениями, включенными в подсказке в качестве дополнительного контекста.

Пошаговое руководство

Шаг 0: Клонируйте репозиторий llama-retrieval-plugin

GitHub llama-retrieval-plugin

Шаг 1: Настройте хранилище данных

Этот шаг почти идентичен настройке плагина поиска OpenAI, но упрощён за счёт использования conda и использования pinecone в качестве векторной базы данных. Следуя быстрому запуску в репозитории:

Настройте среду:

conda env create -f environment.yml
conda activate llama-retrieval-plugin
poetry install

Определите переменные среды:

# In production use-cases, make sure to set up the bearer token properly
export BEARER_TOKEN=test1234
export OPENAI_API_KEY=my_openai_api_key

# We used pinecone for our vector database, but you can use a different one
export DATASTORE=pinecone
export PINECONE_API_KEY=my_pinecone_api_key
export PINECONE_ENVIRONMENT=us-east1-gcp
export PINECONE_INDEX=my_pinecone_index_name

Запустите сервер:

poetry run start
Шаг 2: Загрузите файлы в хранилище данных

Для этого шага мы использовали пользовательский интерфейс Swagger, доступный локально по адресу http://localhost:8000/docs

Авторизуйтесь:

Интеграция плагинов ChatGPT с LLaMA

Вставьте файл:

Интеграция плагинов ChatGPT с LLaMA

Запросите хранилище данных для тестирования:

Возьмите идентификатор, возвращаемый upsert, и создайте запрос в Swagger UI, чтобы увидеть, что будет возвращено при появлении запроса:

{
  "queries": [
    {
      "query": "What is the title of the LLaMA paper?",
      "filter": {
        "document_id": "f443884b-d137-421e-aac2-9809113ad53d"
      },
      "top_k": 3
    }
  ]
}
Интеграция плагинов ChatGPT с LLaMA
Шаг 3: Установите LLaMA

Наш репозиторий ссылается на llama.cpp в качестве подмодуля, который мы использовали для локального запуска LLaMA 7B.

Следуйте за llama.cpp readme, чтобы настроить его.

Шаг 4: Используйте LLaMA для запроса ваших пользовательских данных

Откройте новый терминал и перейдите к репозиторию llama-retrieval-plugin.

Активируйте среду Conda (начиная с шага 1):

conda activate llama-retrieval-plugin

Определите переменные среды:

# Make sure the BEARER_TOKEN is set to the same value as in Step 1
export BEARER_TOKEN=test1234
# Set the URL to the query endpoint that you tested in Step 2
export DATASTORE_QUERY_URL=http://0.0.0.0:8000/query
# Set to the directory where you have LLaMA set up -- such as the root of the llama.cpp repo
export LLAMA_WORKING_DIRECTORY=./llama.cpp

Запустите скрипт llama_with_retrieval с желаемой подсказкой:

python3 llama_with_retrieval.py "What is the title of the LLaMA paper?" 

Этот скрипт принимает подсказку, вызывает конечную точку запроса для извлечения наиболее релевантных вложений из хранилища данных, а затем создаёт подсказку для передачи в LLaMA, содержащее эти вложения.

Вы можете ознакомиться с кодом здесь: llama-retrieval-plugin/llama_with_retrieval.py

Шаг 5: Настраивайте и экспериментируйте

Вы можете изменить сценарий llama_with_retrieval, чтобы поэкспериментировать с различными настройками, которые могут повысить производительность:

  • Измените ограничение токена (например, уменьшите его, чтобы предоставить больше места для ответа модели).
  • Измените шаблон подсказки и понаблюдайте за поведением модели.
  • Измените параметры модели LLaMA, изменив командную строку. Примечание: Вы также можете указать пользовательскую командную строку LLaMA, установив переменную окружения LLAMA_CMD.

Вы можете использовать lastmileai.dev для отслеживания ваших различных экспериментов по мере настройки моделей. Например, вот записная книжка, в которой сохранены некоторые испытания с использованием Stable Diffusion.

Протоколы на платформах

Мы надеемся, что это упражнение покажет необходимость стандартизации взаимодействия между базовыми моделями и плагинами /расширениями. Мы должны иметь возможность использовать плагин, разработанный для моделей OpenAI, с другой большой языковой моделью, и наоборот. Это возможно только при использовании стандарта протокола плагина Foundation Model.

Мы находимся на ранних стадиях революции в вычислительной технике, вызванной появлением самых современных базовых моделей. У нас есть возможность определить модели поведения, которые управляют нашими взаимодействиями с этими моделями, и вернуться к богатому наследию открытых протоколов раннего Интернета вместо закрытых платформ современной эпохи.

Протокол плагина базовой модели

Команда lastmile ai изучает, что нужно для определения протокола плагина и стимулирования его внедрения. Мы считаем, что протокол должен быть:

  • model-agnostic — поддерживает GPTx, LLaMA, Bard и любую другую базовую модель.
  • modal-agnostic — поддерживает различные типы входных и выходных данных, а не только текст.

Наши первые размышления об этом были навеяны SMTP для электронной почты и LSP (Language Server Protocol) для IDE.

+1
0
+1
3
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *