Добро пожаловать в мир интеллектуальных чат-ботов с большими языковыми моделями (LLM)!

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

Хотя потенциал интеллектуальных чат-ботов и интеграции LLM огромен, организации часто сталкиваются с проблемами на этом пути. Создание интеллектуальных чат-ботов и интеграция LLM с их собственными организационными знаниями требует тщательного рассмотрения и внимания к различным факторам. Давайте рассмотрим некоторые из общих проблем, с которыми сталкиваются организации в этом начинании.

  1. Одним из основных препятствий является наличие и качество обучающих данных. LLM требуют огромных объемов высококачественных данных для обучения, но организациям может быть сложно собрать достаточное количество релевантных данных, которые представляют их конкретную область или отрасль. Кроме того, обеспечение точности и разнообразия обучающих данных имеет решающее значение для предотвращения предвзятых или искаженных ответов от чат-бота.
  2. Еще одна проблема заключается в интеграции LLM с существующей базой знаний организации. Многие организации обладают огромным количеством закрытых данных и информации, относящейся к предметной области. Эффективная интеграция этих знаний с LLM может быть сложной задачей, требующей тщательного отображения, предварительной обработки и структурирования данных. Организации также должны учитывать проблемы конфиденциальности и безопасности данных при включении конфиденциальной информации в чат-бота.
  3. Кроме того, серьезным препятствием является обеспечение способности чат-бота понимать и генерировать контекстуально релевантные ответы. LLM, хотя и мощные, все же могут бороться с устранением неоднозначности контекста и пониманием нюансов запросов. Организациям необходимо инвестировать в надежные методы обработки естественного языка и стратегии тонкой настройки, чтобы улучшить возможности понимания и генерации ответов чат-ботом.
  4. Масштабируемость — еще одна проблема. По мере роста организации чат-бот должен обрабатывать растущий объем запросов, сохраняя при этом оптимальную производительность. Обеспечение масштабируемости чат-бота включает в себя решение таких проблем, как задержка ответа, обработка одновременных запросов и эффективное распределение ресурсов.
  5. Наконец, пользовательский опыт играет жизненно важную роль в успехе чат-бота. Организации должны разрабатывать интуитивно понятные и удобные интерфейсы, обеспечивать беспрепятственную интеграцию с существующими каналами связи и внедрять эффективные механизмы обработки ошибок и отката. Достижение баланса между автоматизацией и вмешательством человека имеет решающее значение для создания удовлетворительного пользовательского опыта.

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

В этой статье я расскажу вам:

  1. Как предварительно обработать свои корпоративные знания организации, чтобы иметь возможность передавать их любому (почти) LLM
  2. Создайте дерево базы знаний вашей организации для быстрого поиска релевантного контента, чтобы мы передавали в LLM ограниченный текст, а не весь корпус
  3. Создайте чат-бот qa из больших языковых моделей с открытым исходным кодом.
  4. Дайте память чат-боту
  5. Как развернуть его для масштабируемой среды
  6. Лучшие практики

Сбор данных

Соберите всю базу знаний организации в одном месте. Если он уже находится в одном месте, например, Confluence Wiki (популярная вики-платформа Confluence служит кладезем ценной информации для организаций) или SharePoint, Wiki.js, Zoho Wiki и т. д., то это лучше определить релевантные страницы и создать список отфильтрованного контента.

Создание качественного набора данных — самый важный шаг для любой модели машинного обучения. Этот шаг действительно занимает значительное время во всем жизненном цикле разработки модели (MDLC), потому что весь проект зависит от качества набора данных, актуальности и предварительной обработки.

В этом примере я создам чат-бот на основе документации Jira.

На странице ресурсов Jira Cloud есть документация по разным темам. Решил взять тему Поиск задач в Jira.

В этой теме есть различные дочерние темы, связанные с родительской темой.

Вы можете либо использовать Beautiful Soup (библиотека парсинга веб-страниц), либо вручную переходить на каждую страницу, копировать всю веб-страницу и вставлять ее в текстовый документ.

Желаемый результат должен заключаться в том, что все статьи вашей базы знаний находятся в файле .txt в одной папке.

Создание вложений

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

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

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

Итак, преобразовав весь наш корпус во встраивания, мы можем использовать библиотеку Transfomer под названием SentenceTransformers.

Поскольку база знаний вашей организации не будет меняться каждый день, предлагается создать модель ANN (объяснено в следующих шагах) из вложений и сохранить ее для более быстрого поиска в хранилище с низкой задержкой, таком как S3.

Предупреждение

Как следует из названия библиотеки, это преобразователь Sentence. И мы просто использовали его для преобразования всего нашего документа.

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

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

Построить модель ИНС

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

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

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

Модели ANN работают, создавая пространство или представление, в котором элементы организованы на основе их сходства. Это пространство построено с использованием математических алгоритмов, преобразующих данные в более структурированную форму. Затем элементы сопоставляются с определенными местами в этом пространстве на основе их характеристик или особенностей.

Если вы хотите найти ближайшего соседа (наиболее похожего элемента) для данного элемента, модели ИНС не нужно сравнивать его с каждым отдельным элементом в наборе данных. Вместо этого он использует умные методы для навигации по пространству и выявления меньшего подмножества потенциальных кандидатов, которые, вероятно, будут близки по своему сходству. Это значительно ускоряет процесс поиска.

Ключевая идея моделей ANN заключается в том, что они жертвуют точностью в пользу эффективности. Они обеспечивают приближенное решение, которое очень близко к точному ближайшему соседу, но с гораздо меньшим временем поиска. Таким образом, когда грубая сила KNN (K ближайших соседей) отзыв равна 1, в зависимости от того, какую модель ИНС вы используете, ее отзыв будет меньше 1. Это приближение позволяет нам обрабатывать большие наборы данных и выполнять поиск сходства в реальных условиях. время или близкое к реальному времени.

Как это будет использоваться

Мы используем FAISS, библиотеку поиска по сходству, разработанную Facebook Research для плотных векторов, чтобы построить надежный поисковый индекс. Когда пользователь задает вопрос чат-боту, мы следуем определенному процессу в бэкэнде. Первоначально мы кодируем вопрос как вложение с помощью Sentence Transformer. Впоследствии мы передаем это вложение в наш поисковый индекс, что позволяет нам получить наиболее близкое соответствие встраивания. Затем это ближайшее совпадающее вложение связывается с соответствующим корпусным документом. Наконец, мы включаем этот документ в качестве контекстуальной информации вместе с вопросом пользователя для обработки модели большого языка (LLM).

Создайте индекс FAISS

  1. Сначала мы импортируем библиотеку faiss
  2. Затем мы строим индекс
  3. Затем мы добавляем наши вложения в индекс
  4. Хорошо бы сделать некоторые проверки на вменяемость. xq - это наш вопрос, который закодирован преобразователем предложений. Мы используем закодированный текст для поиска в нашем индексе. D и I — это матрицы расстояний и индексов.

Вывод corpus[0] ниже:

Вы также можете задать другие вопросы, например «Могу ли я сохранить результаты поиска?»:

Зачем использовать ИНС

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

Существуют также другие популярные библиотеки ANN с открытым исходным кодом, такие как Scann by google research, Annoy by Spotify и т. д., которые вы можете использовать в зависимости от вашей проблемы.

Проверьте ANN-Benchmarks для всестороннего сравнения.

Построить модель контроля качества

В настоящее время на рынке существует два основных типа больших языковых моделей:

  1. База LLM
  2. Инструкция по настройке LLM

База LLM

Базовый LLM неоднократно предсказывает следующее слово на основе данных обучения текста. И поэтому, если я дам ему подсказку,

Once upon a time there was a unicorn

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

Недостатком этого является то, что если вы запросите его с помощью

What is the capital of France?

вполне возможно, что в Интернете может быть список вопросов викторины о Франции. Таким образом, он может завершить это с помощью

Response:
What is France’s largest city, what is France’s population? 

и так далее. Но на самом деле вы хотите, чтобы он сказал вам, что такое столица Франции, а не перечислил все эти вопросы.

Инструкция по настройке LLM

LLM, настроенный на инструкции, вместо этого пытается следовать инструкциям и, надеюсь, скажет:

Response:
The capital of France is Paris

Как перейти от базового LLM к LLM с настройкой инструкций? Вот как выглядит процесс обучения Instruction Tuned LLM, такого как ChatGPT. Сначала вы обучаете Base LLM на большом количестве данных, то есть на сотнях миллиардов слов, а может быть, и больше. И это процесс, который может занять месяцы на большой суперкомпьютерной системе. После того, как вы обучили Base LLM, вы можете дополнительно обучить модель, настроив ее на меньшем наборе примеров, где выходные данные следуют за входными инструкциями.

Переход от Base LLM к Instruct LLM в вашем корпусе может не иметь смысла для вашей организации, если у вас нет необходимых данных, опыта и ресурсов. Но вы можете использовать LLM с открытым исходным кодом или даже ChatGPT для своего собственного QA-бота.

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

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

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

Модель GPT4All представляет собой файл размером 3–8 ГБ, который вы можете загрузить и подключить к программному обеспечению экосистемы с открытым исходным кодом GPT4All. Nomic AI поддерживает и поддерживает эту программную экосистему для обеспечения качества и безопасности, а также возглавляет усилия, позволяющие любому человеку или предприятию легко обучать и развертывать свои собственные современные большие языковые модели.

После установки инструмента GPT4All на ваш компьютер он будет выглядеть так:

Для нашего чат-бота мы будем использовать библиотеку pip gpt4all.

  1. Импортируйте или установите библиотеку GPT4All. Помните о версии, в более новых версиях нет метода chat_completion.
  2. Создайте экземпляр модели.
  3. В списке сообщений мы передаем роль пользователя, а в контексте вводим text, который является результатом поиска индекса нашей модели ANN на основе вопроса пользователя.
  4. Мы вызываем метод chat_completion
  5. И распечатать ответ.

Вход:

Выход:

Сохранение контекста

В рабочей среде для контроля качества желательно, чтобы бот QA сохранял предыдущие сообщения пользователя. Поэтому мы включаем всю цепочку сообщений от предыдущих взаимодействий при обработке последующих вопросов.

Давайте зададим новый вопрос, который требует знания предыдущего вопроса:

Ответ:

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

Итак, у вас есть бот QA, оснащенный пониманием контекста.

Чтобы улучшить свои навыки подсказок, я рекомендую пройти краткий курс Исы Фулфорд и Эндрю Нг ChatGPT Prompt Engineering for Developers. Они также предлагают другие бесплатные короткие курсы по программированию ChatGPT, включая разработку приложений и использование langchain. Обязательно изучите эти ценные ресурсы.

Другие варианты

Вы также можете попробовать другие LLM с открытым исходным кодом в зависимости от вашей бизнес-задачи.

Falcon 7B Instruct (7B означает 7 миллиардов параметров, исходный Falcon имеет 40 миллиардов параметров Falcon 40B Instruct и требует 100 ГБ оперативной памяти) также показывает многообещающие результаты.

Следующий код показывает, как вы можете использовать Falcon 7B из библиотеки трансформаторов:

И вывод этого LLM:

Я бы сказал, что реакция неплохая, совсем неплохая.

Вы также можете попробовать Open Assistant, который также является базовой моделью для HuggingChat.

Или, если у вас достаточно оперативной памяти, перейдите на Vicuna (есть версия 13B, а также версия 7B).

Посетите этот удивительный веб-сайт, где вы можете общаться почти со всеми LLM с открытым исходным кодом — https://chat.lmsys.org/

Инструмент GPT4All также имеет серверный режим, в котором ваш локальный инструмент действует как сервер, и вы можете вызывать его, используя URL-адрес.

Использование ChatGPT для контроля качества

Вы также можете использовать ChatGPT для своего QA-бота. Половина вышеупомянутого процесса аналогична, вплоть до создания модели ИНС.

После этого вы можете передать контекст вместе с вопросом в openai.ChatCompletion API.

Вы также можете использовать Langchain для создания полноценного QA-бота, включая контекстный поиск и обслуживание. Для этого есть много ресурсов в Интернете.

Пример ChatGPT LangChain для вопросов и ответов по чат-боту

От ноутбука к производству

Вы можете загрузить и сохранить модель LLM, как и любую другую модель машинного обучения. Его можно развернуть на конечной точке для логического вывода. Однако помимо LLM в проекте QA-бота есть несколько других важных компонентов.

  1. Одним из важнейших аспектов является быстрое кодирование входного запроса с использованием модели внедрения. Это позволяет эффективно представлять запрос.
  2. Кроме того, он включает сохранение дерева поиска по индексу и его извлечение во время логического вывода. Если индекс подходит, его можно сохранить в памяти, чтобы свести к минимуму задержку.
  3. Еще одним соображением является запоминание истории чатов каждого пользователя для сохранения контекста.

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

Дизайн высокого уровня

Один из подходов заключается в использовании функции AWS Lambda для преобразования входного текста во встраивание и поиска контекста. Затем передайте входное сообщение на конечную точку Sagemaker, которая сгенерирует ответ. Этот ответ может быть возвращен клиенту. Чтобы сохранить историю чата пользователя, вы можете использовать прокси-сервер базы данных Lambda для подключения к RDS (служба реляционной базы данных).

В этом подходе вы можете использовать Lambda прокси базы данных для подключения к RDS и хранения истории чата пользователя.

Я рекомендую ознакомиться с Невыполненным обещанием бессерверных технологий Кори Куинна для получения дополнительной информации.

Если вы предоставляете поддержку клиентов через такие платформы, как Discord или Slack, вы можете создать простого бота специально для этих платформ. Этот бот может добавлять пользовательские сообщения в AWS SQS (Simple Queue Service), а сообщения SQS могут запускать функцию Lambda для выполнения того же процесса, что описан выше.

Принимая во внимание эти аспекты и изучая различные подходы к реализации, вы можете создать эффективную бот-систему контроля качества.

Лучшие практики

  1. Используйте длинный опрос для SQS
  2. Всегда возвращайте список batchItemFailurs из Lambda, чтобы SQS также удалял успешные доставки из очереди.
  3. Используйте очередь недоставленных сообщений для вашего основного SQS
  4. Предотвратите вредоносное поведение вашего бота, используя Sagemaker Model Monitor.
  5. Никогда не делитесь историей чата ваших пользователей с какой-либо третьей стороной для какой-либо обработки, аналитики или гнусных целей.
  6. И общие рекомендации, которым следует ваша организация.

Личный анекдот

Я твердо уверен, что, хотя модели больших языков (LLM) продемонстрировали впечатляющие возможности в ответах на вопросы и других многочисленных задачах, их роль в боте для ответов на вопросы (QA) для организации имеет определенные ограничения.

1. Понимание контекста: LLM превосходно понимают и генерируют ответы на основе заданного контекста. Однако когда дело доходит до аналитических и транзакционных запросов, таких как получение определенных данных или выполнение сложных операций, LLM могут не обладать необходимыми знаниями в предметной области или структурированным доступом к базам данных. Им может быть трудно выполнять задачи, выходящие за рамки их предварительно обученных возможностей.

Пример: предположим, что пользователь задает аналитический запрос, например: «Каковы общие продажи продукта X за последний квартал?» LLM могут испытывать трудности с прямым запросом базы данных организации и предоставлением точного ответа без дополнительной интеграции с конкретными системами обработки данных.

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

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

Ознакомьтесь с моей статьей Supercharge Analytics with ChatGPT.

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

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

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

Пример: вместо использования LLM для запроса расписаний собраний из базы данных существующие инструменты календаря или API-интерфейсы, которые напрямую взаимодействуют с системой планирования организации, могут обеспечить более надежный и эффективный подход.

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

Вы можете связаться со мной в LinkedIn: https://www.linkedin.com/in/maheshrajput/