Пошаговое руководство по созданию чат-бота на основе ваших собственных документов с помощью GPT

Пошаговое руководство по созданию чат-бота на основе ваших собственных документов с помощью GPT

Общение с ChatGPT — это весёлый и информативный процесс. Данного чат-бота можно использовать как для развлечения, так и для серьёзных дел (он может написать для вас код, полноценную программу). А если ещё и полностью разобраться с его функционалом и понимать в сфере программирования, то можно создавать действительно масштабные проекты.

Как мы могли бы использовать его более продуктивно? С недавним выпуском OpenAI API серии GPT 3.5, мы можем делать гораздо больше, чем просто общаться в чате. Одним из очень продуктивных вариантов использования для бизнеса и вашей личной эксплуатации является QA (Question Answering) — вы спрашиваете бота на естественном языке о ваших собственных документах / данных, а он может быстро ответить вам, извлекая информацию из документов и генерируя ответ [1]. Вы можете использовать его для поддержки клиентов, обобщения пользовательских исследований, управления вашей личной информацией и многого другого!

Пошаговое руководство по созданию чат-бота на основе ваших собственных документов с помощью GPT

В этой статье я расскажу, как создать собственного Q&A чат-бота на основе ваших данных, а также о том, почему некоторые подходы его создания не будут работать.

(Если вы только хотите узнать, как создать Q&A чат-бота, вы можете перейти непосредственно к разделу “Пошаговое создание чат-бота для вопросов и ответов”)

Изучение различных подходов

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

Сначала я подумал о тонкой настройке модели GPT с помощью моих собственных данных для достижения поставленной цели. Но тонкая настройка стоит немалых денег и требует большого набора данных с примерами. Также невозможно выполнять точную настройку каждый раз, когда в документ вносятся изменения. Ещё более важным моментом является то, что тонкая настройка просто НЕ может позволить модели “знать” всю информацию в документах, скорее она обучает модель новому навыку. Следовательно, для контроля качества (с несколькими) документами тонкая настройка - это не тот путь, которым следует идти.

Второй подход, который приходит мне на ум, - это разработка подсказок путем предоставления контекста в них. Например, вместо того, чтобы задавать вопрос напрямую, я могу добавить исходное содержимое документа перед самим вопросом. Но модель GPT имеет ограниченный объём внимания — она может вместить всего несколько тысяч слов в подсказку (около 4000 токенов или 3000 слов). Невозможно предоставить весь контекст в подсказке, при условии, что у нас есть тысячи электронных писем с отзывами клиентов и сотни документов о продукте. Это также дорого, если вы переходите в длительном контексте к API, потому что цена основана на количестве используемых вами токенов.

I will ask you questions based on the following context: — Start of Context — YOUR DOCUMENT CONTENT — End of Context— My question is: “What features do users want to see in the app?”

(Если вы хотите узнать больше о точной настройке и быстром проектировании GPT, вы можете прочитать эту статью: https://medium.com/design-bootcamp/3-ways-to-tailor-foundation-language-models-like-gpt-for-your-business-e68530a763bd)

Поскольку подсказка имеет ограничения на количество входных токенов, мне пришла в голову идея сначала использовать алгоритм для поиска документов и выбора соответствующих выдержек, а затем передавать только эти соответствующие контексты в модель GPT с моими вопросами. Пока я изучал эту идею, я наткнулся на библиотеку под названием gpt-index (теперь переименованную в LlamaIndex), которая делает именно то, что мне надо, и проста в использовании [2].

Пошаговое руководство по созданию чат-бота на основе ваших собственных документов с помощью GPT

В следующем разделе я дам пошаговое руководство по использованию LlamaIndex и GPT для создания чат-бота для вопросов и ответов на основе ваших собственных данных.

Пошаговое создание Q&A чат-бота

В этом разделе мы создадим Q&A чат-бота на основе существующих документов с помощью LlamaIndex и GPT (text-davinci-003), чтобы вы могли задавать вопросы о вашем документе и получать ответы от чат-бота. И всё это будет происходить на естественном языке.

Подготовка

Прежде чем мы начнём, нам нужно подготовить несколько вещей:

  • Ваш ключ OpenAI API, который можно найти по адресу https://platform.openai.com/account/api-keys .
  • База данных ваших документов. LlamaIndex поддерживает множество различных источников данных, таких как Neptune, Google Docs, Asana и т.д. [3]. В этом руководстве мы будем использовать простой текстовый файл для демонстрации.
  • Локальная среда Python или Google Colab notebook.

План

Рабочий процесс прост и занимает всего несколько шагов:

  • Создание индекса данных вашего документа с помощью LlamaIndex
  • Запрос индекса с помощью естественного языка
  • LlamaIndex извлечёт соответствующие части и передаст их в подсказку GPT
  • Спросите GPT с соответствующим контекстом, а он выведет ответ

Что делает LlamaIndex, так это преобразует данные вашего исходного документа в векторизованный индекс, который очень эффективен для запроса. Он будет использовать этот индекс для поиска наиболее релевантных частей на основе сходства запроса и данных. Затем он вставит полученное в подсказку, которую отправит в GPT, чтобы у GPT был контекст для ответа на ваш вопрос.

Установка

Сначала нам нужно будет установить библиотеки. Просто запустите следующую команду в своём терминале или в Google Colab notebook. Эти команды установят как LlamaIndex, так и OpenAI.

!pip install llama-index !pip install openai

Далее мы импортируем библиотеки на python и настроим ваш ключ OpenAI API в новом файле .py.

# Import necessary packages from llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReader import os os.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'

Создание индекса и его сохранение

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

Чтобы загрузить свой документ, вы можете использовать метод SimpleDirectoryReader, предоставляемый LllamaIndex, или загрузить его из строк.

# Loading from a directory documents = SimpleDirectoryReader('your_directory').load_data() # Loading from strings, assuming you saved your data to strings text1, text2, ... text_list = [text1, text2, ...] documents = [Document(t) for t in text_list]

LlamaIndex также предоставляет множество соединителей данных, включая Neptune, Asana, Google Drive, Obsidian и т.д. Вы можете найти доступные соединители данных по адресу https://llamahub.ai/.

После загрузки документов мы можем создать индекс с помощью следующем команды:

# Construct a simple vector index index = GPTSimpleVectorIndex(documents)

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

# Save your index to a index.json file index.save_to_disk('index.json') # Load the index from your saved index.json file index = GPTSimpleVectorIndex.load_from_disk('index.json')

Запрашивание индекса и получение ответа

Запросить индекс очень просто:

# Querying the index response = index.query("What features do users want to see in the app?") print(response)

И вуаля! Вы получите свой ответ. Под капотом LlamaIndex примет вашу подсказку, выполнит поиск соответствующих фрагментов в индексе и передаст её и соответствующие фрагменты в GPT.

Некоторые примечания для расширенного использования

Приведённые выше шаги показывают только очень простое начальное использование для ответа на вопросы с помощью LlamaIndex и GPT. Но вы можете сделать гораздо больше, чем это. Фактически, вы можете настроить LlamaIndex на использование другой модели большого языка (LLM), использовать другой тип индекса для разных задач, обновлять существующие индексы новым индексом и т.д. Если вам интересно, вы можете прочитать их документацию по адресу https://gpt-index.readthedocs.io/en/latest/index.html .

Заключение

В этой статье мы рассмотрели, как использовать GPT в сочетании с LlamaIndex для создания чат-бота, отвечающего на вопросы о документах. Хотя GPT (и другие LLM) мощны сами по себе, их возможности могут быть значительно усилены, если мы объединим их с другими инструментами, данными или процессами.

Для чего бы вы использовали чат-бота, отвечающего на вопросы о документах?

Ссылки на используемую литературу

[1] What Is Question Answering? — Hugging Face. 5 Dec. 2022, https://huggingface.co/tasks/question-answering.

[2] Liu, Jerry. LlamaIndex. Nov. 2022. GitHub, https://github.com/jerryjliu/gpt_index.

Статья была взята из этого источника:

55
1 комментарий

Какой общий размер документации у вас получилось индексировать для чат-бота?

Ответить