Деловые новости идеи давайте сделаем несколько сайтов лучше с помощью решения чат-ботов от компании Langchain

Повышение эффективности сайтов с помощью чат-ботов от компании Langchain деловые идеи и новости

Введение

В революционную эру ИИ появились разговорные агенты или чат-боты, ставшие ключевыми инструментами для привлечения пользователей, оказания помощи и улучшения пользовательского опыта на различных цифровых платформах. Чат-боты, работающие на основе передовых техник искусственного интеллекта, позволяют автоматизировать и интерактивно вести разговоры, похожие на человеческие интеракции. С запуском ChatGPT возможность отвечать на запросы пользователей достигла новых высот. Создание чат-ботов, подобных ChatGPT на основе пользовательских данных, может помочь бизнесу улучшить обратную связь и опыт пользователей. В этой статье мы построим решение для чат-бота компании Langchain, подобного ChatGPT, на нескольких настраиваемых веб-сайтах и с использованием техники Retrieval Augmented Generation (RAG). Чтобы приступить к проекту, мы сначала разберем несколько ключевых компонентов, необходимых для создания такого приложения.

Цели обучения

Вот что вы узнаете из этого проекта: большие языковые модели для чатов

  • Создание чат-бота, подобного ChatGPT, на основе пользовательских данных.
  • Необходимость RAG – Retrieval Augmented Generation.
  • Использование основных компонентов, таких как загрузчики, чанкинг и векторные представления, для создания чат-бота, подобного ChatGPT.
  • Важность векторных баз данных в памяти с использованием Langchain.
  • Реализация цепочки RetrievalQA с использованием чат-моделей ChatOpenAI LLM.

Эта статья была опубликована в рамках Data Science Blogathon.

Что такое Langchain и почему его использовать?

Для создания чат-бота, подобного ChatGPT, в этом шаге используется фреймворк под названием Langchain. Мы определяем большую языковую модель, которая используется для создания ответа. Убедитесь, что вы используете модель gpt-3.5-turbo-16k при работе с несколькими источниками данных. Она занимает больше токенов. Используйте это название модели, чтобы избежать ошибки InvalidRequestError. Langchain – это открытый фреймворк, разработанный для развития приложений на основе больших языковых моделей (LLM). В основе Langchain лежит возможность создавать приложения, обладающие важной характеристикой и контекстным сознанием. Эти приложения соединяют LLM с настраиваемыми источниками данных, включая инструкции, примеры с небольшим количеством данных и контекстный контент. Благодаря этой важной интеграции модель обеспечивает ответы, которые связаны с предоставленным контекстом, что приводит к более тонкому и информированному взаимодействию с пользователем.

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

Понимание RAG – Retrieval Augmented Generation

Большие языковые модели прекрасно справляются с генерацией ответов как обычный ИИ. Они могут выполнять различные задачи, такие как генерация кода, написание писем, создание статей для блогов и т.д. Однако их большой недостаток – отсутствие доменных знаний. Большинство LLM обычно “галлюцинируют”, когда речь идет о ответах на вопросы, связанные с конкретной областью. Для преодоления таких проблем, как снижение галлюцинаций и обучение предварительно обученных LLM доменным наборам данных, мы используем подход, называемый Fine Tuning. Fine Tuning снижает галлюцинации и является лучшим способом научить модель доменным знаниям. Но это сопряжено с большими рисками. Fine Tuning требует времени для обучения и вычислительных ресурсов, которые немного дороговаты.

RAG приходит на помощь. Retrieval Augmented Generation (RAG) гарантирует подачу доменного контента в LLM, который может создавать контекстно релевантные и фактические ответы. RAG не только усваивает знания, но и не требует повторного обучения LLM. Этот подход снижает требования к вычислительным ресурсам и помогает организации работать с ограниченной инфраструктурой обучения. RAG использует векторные базы данных, которые также помогают масштабированию приложений.

Чат с несколькими веб-сайтами Workflow

На рисунке показан Workflow проекта “Чат с несколькими веб-сайтами”.

Давайте вглянем в код, чтобы понять компоненты, использованные в Workflow.

Установка

Вы можете установить LangChain с помощью команды pip. Мы также можем установить OpenAI для настройки ключа API.

pip install langchainpip install openaipip install chromadb tiktoken

Давайте настроим ключ API OpenAI.

В этом проекте мы будем использовать ChatOpenAI с моделью gpt-3.5-turbo-16k и OpenAI embeddings. Для работы обоих этих компонентов требуется ключ API OpenAI. Чтобы получить свой ключ API, войдите в platform.openai.com.

1. После входа в свою учетную запись нажмите на свой профиль и выберите “Просмотр ключей API”.

2. Нажмите “Создать новый секретный ключ” и скопируйте свой ключ API.

Создайте переменную среды, используя библиотеку os в соответствии с синтаксисом и вставьте свой ключ API.

import osos.environ['OPENAI_API_KEY'] = "sk-......zqBp" #замените ключ

Источник данных – ETL (извлечение, преобразование и загрузка)

Для создания приложения Чатбот, подобного ChatGPT, фундаментальным требованием являются пользовательские данные. Для этого проекта нам необходимо определить URL-адреса веб-сайтов и загрузить источник данных с помощью WebBaseLoader. Загрузчик Langchain, такой как WebBaseLoader, извлекает содержимое данных с соответствующих URL-адресов.

from langchain.document_loaders import WebBaseLoaderURLS = [    'https://medium.com/@jaintarun7/getting-started-with-camicroscope-4e343429825d',    'https://medium.com/@jaintarun7/multichannel-image-support-week2-92c17a918cd6',    'https://medium.com/@jaintarun7/multi-channel-support-week3-2d220b27b22a'    ]loader = WebBaseLoader(URLS)data = loader.load()

Chunking

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

from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)websites_data = text_splitter.split_documents(data)

Embeddings

Для глубокой модели обработки текста необходимо передать текст в слой Embedding. Аналогично необходимо преобразовать разбитые данные в Embeddings, чтобы модель научилась контексту. Embeddings – это способ преобразования слов или токенов в числовые векторы. Это преобразование является ключевым, поскольку оно позволяет представить текстовые данные, которые по своей природе дискретны и символьны, в непрерывном векторном пространстве. Каждое слово или токен представляется уникальным вектором.

from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()

Векторные базы данных

Фактические данные веб-сайтов извлекаются и преобразуются в Embeddings, которые представлены в виде векторов. Векторные базы данных – это уникальный способ хранения Embeddings в базах данных, таких как Chroma. Векторная база данных – это новый тип базы данных, который становится популярным в мире машинного искусства и искусственного интеллекта. Основное преимущество использования векторной базы данных заключается в ее возможностях поиска и сравнения сходства. После получения запроса пользователя результатом поиска и получения сходства обычно является ранжированный список векторов с наивысшими оценками сходства с вектором запроса. Используя эту метрику, приложение гарантирует предоставление достоверных ответов.

Несколько используемых и популярных векторных баз данных с открытым исходным кодом: Chroma, Elastic Search, Milvus, Qdrant, Weaviate и FAISS.

from langchain.vectorstores import Chromawebsearch = Chroma.from_documents(websites_data, embeddings)

Большие языковые модели для чатов

На этом этапе мы определяем большую языковую модель, которая используется для создания ответа. Убедитесь, что вы используете модель gpt-3.5-turbo-16k при работе с несколькими источниками данных. В этом случае потребуется больше токенов. Используйте это название модели и избегайте InvalidRequestError.

from langchain.chat_models import ChatOpenAImodel = ChatOpenAI(model='gpt-3.5-turbo-16k',temperature=0.7)

Пользовательский запрос и извлечение

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

from langchain.chains import RetrievalQArag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())prompt = "Напишите код для преобразования нескольких файлов Tif в формат RGB"response = rag.run(prompt)print(response)

Output

Все вместе

#установка!pip install langchain openai tiktoken chromadb#import необходимых библиотекimport osfrom getpass import getpassfrom langchain.document_loaders import WebBaseLoaderfrom langchain.text_splitter import CharacterTextSplitterfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain.chat_models import ChatOpenAI#настройка ключа OpenAI APIapi_key = getpass()os.environ['OPENAI_API_KEY'] = api_key#ETL=> загрузка данныхURLS = [    'https://medium.com/@jaintarun7/getting-started-with-camicroscope-4e343429825d',    'https://medium.com/@jaintarun7/multichannel-image-support-week2-92c17a918cd6',    'https://medium.com/@jaintarun7/multi-channel-support-week3-2d220b27b22a'    ]loader = WebBaseLoader(URLS)data = loader.load()#Фрагментирование=>разделение текста на более маленькие токены текстовым разделителем с использованием CharacterTextSplitterchunk_size=1000, chunk_overlap=0)websites_data = text_splitter.split_documents(data)#Создание вложенийembeddings = OpenAIEmbeddings()#сохранение вложений и данных в векторной базе данных Chromawebsearch = Chroma.from_documents(websites_data, embeddings)#определение большой языковой модели чата - размером в 16K токеновmodel = ChatOpenAI(model='gpt-3.5-turbo-16k',temperature=0.7)Является ли LangChain библиотекой или фреймворком?#получение результата с помощью цепочки извлеченияrag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())#получение релевантного выводапромпт = "Напишите код для преобразования нескольких файлов Tif в формат RGB"#выполнение запросаresponse = rag.run(prompt)print(response)

Заключение

В заключение статьи мы успешно создали чат-бот для нескольких веб-сайтов с использованием Langchain. Это не просто простой чат-бот. Это чат-бот, который отвечает, как ChatGPT, но на основе ваших данных. Главный вывод из этой статьи:

  • Langchain – это самый мощный фреймворк с открытым исходным кодом для больших языковых моделей, который помогает создавать чат-боты, подобные ChatGPT, на основе пользовательских данных.
  • Мы обсудили различные проблемы с предварительно обученными моделями и как подход “Извлечение с улучшенным поколением” более подходит, чем Точная настройка. Также стоит отметить, что в большинстве случаев предпочтительнее точная настройка, чтобы получить более фактические ответы.
  • Для создания чат-бота, подобного ChatGPT, мы разработали рабочий процесс проекта с основными компонентами, такими как загрузчики, фрагментирование, вложения, векторные базы данных и языковые модели чата.
  • Векторные базы данных являются ключевым преимуществом RAG-конвейеров. В статье также перечислены популярные векторные базы данных с открытым исходным кодом.

Этот проект стал для вас вдохновением для изучения потенциала Langchain и RAG.

Часто задаваемые вопросы

Воспроизведение изображений и видео в этой статье не является собственностью Analytics Vidhya и используется по усмотрению автора.