За последние несколько месяцев мир ИИ был очарован невероятным ростом моделей больших языков (LLM). Благодаря взрывному росту таких компаний, как OpenAI (ChatGPT), Microsoft (Bing Chat) и Google (Bard). Нет сомнений в том, что эта мощная модель искусственного интеллекта становится настолько популярной и открывает новые возможности для приложений обработки естественного языка, позволяя разработчикам создавать более сложные, похожие на человеческие взаимодействия в чат-ботах, системах ответов на вопросы, инструментах обобщения и т. д.

Прежде чем мы углубимся в создание приложения ИИ на основе LLM, нам нужно сначала понять LLM.

Что такое крупноязыковая модель?

Модель большого языка (LLM) относится к усовершенствованной модели искусственного интеллекта, которая обучается на огромных объемах текстовых данных, чтобы понимать и генерировать человекоподобный язык. Эта модель, такая как GPT-4 (Generative Pre-trained Transformer 4) от OpenAI, построена с использованием методов глубокого обучения и способна выполнять широкий спектр задач обработки естественного языка.

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

Таким образом, простым способом ELI5 вы можете представить, что у вас есть супер-умный друг, который знает все о словах и языке. Они прочитали тонны книг и статей и могут понимать и говорить, как люди. По сути, это то, что представляет собой Большая языковая модель — супер-умный ИИ, обученный на огромном количестве текстовых данных.

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

LangChain как структура LLM

LangChain — это фреймворк для разработки приложений на основе языковых моделей. Платформа LangChain разработана на основе этих принципов.

  1. Поддержка данных: подключение языковой модели к другим источникам данных.
  2. Agentic: позволяет языковой модели взаимодействовать с окружающей средой.

Внутри фреймворка есть несколько модулей. Модули — это основные абстракции, которые мы рассматриваем как строительные блоки любого приложения на базе LLM. Для каждого модуля LangChain предоставляет стандартные расширяемые интерфейсы. LangChain также обеспечивает внешнюю интеграцию и даже сквозные реализации для готового использования. Модули:

  1. Модели: LangChain предлагает поддержку различных типов моделей и интеграций моделей. Это позволяет вам легко интегрироваться и работать с различными языковыми моделями, расширяя возможности ваших приложений.
  2. Подсказки: LangChain позволяет эффективно управлять, оптимизировать и сериализовать подсказки. Это помогает генерировать более точные и контекстуально релевантные ответы от языковых моделей.
  3. Память: LangChain предоставляет стандартный интерфейс для памяти и набор реализаций памяти. Это способствует сохранению состояния между вызовами в цепочке или агенте, расширяя знания модели и возможности ее отзыва.
  4. Индексы. Чтобы повысить эффективность языковых моделей, LangChain помогает эффективно комбинировать их с вашими собственными текстовыми данными. Он предоставляет рекомендации по индексированию и поиску в ваших источниках данных.
  5. Цепи. Цепочки – это последовательности вызовов либо языковых моделей, либо других утилит. LangChain предлагает стандартный интерфейс для цепочек, а также многочисленные интеграции и сквозные цепочки для распространенных приложений.
  6. Агенты. Агенты позволяют языковым моделям принимать решения, выполнять действия, наблюдать за результатами и повторять процесс до тех пор, пока цель не будет достигнута. LangChain предоставляет стандартный интерфейс для агентов, набор агентов на выбор и примеры сквозных агентов.
  7. Обратные вызовы. Обратные вызовы позволяют регистрировать и передавать в потоковом режиме промежуточные шаги любой цепочки, упрощая наблюдение, отладку и оценку внутренних компонентов приложения.

Лучшие практики и встроенные реализации для распространенных вариантов использования LangChain:

  1. Автономные агенты: LangChain поддерживает разработку автономных агентов, таких как AutoGPT и BabyAGI, которые являются долгосрочными агентами, выполняющими несколько шагов для достижения цели.
  2. Моделирование агентов: LangChain упрощает создание изолированных сред, в которых агенты могут взаимодействовать друг с другом или реагировать на события, предлагая информацию об их долговременных способностях памяти.
  3. Персональные помощники: LangChain идеально подходит для создания личных помощников, которые могут выполнять действия, запоминать взаимодействия и иметь доступ к вашим данным, предоставляя персонализированную помощь.
  4. Ответы на вопросы: LangChain превосходно отвечает на вопросы по конкретным документам, используя информацию из этих документов для построения точных и актуальных ответов.
  5. Чат-боты. Используя возможности языковых моделей по генерации текста, LangChain позволяет создавать привлекательные чат-боты.
  6. Запрос табличных данных: LangChain предоставляет рекомендации по использованию языковых моделей для запроса данных, хранящихся в табличных форматах, таких как файлы CSV, базы данных SQL или фреймы данных.
  7. Понимание кода: LangChain помогает использовать языковые модели для запросов и понимания исходного кода с таких платформ, как GitHub.
  8. Взаимодействие с API: LangChain позволяет языковым моделям взаимодействовать с API, предоставляя им актуальную информацию и возможность выполнять действия на основе данных в реальном времени.
  9. Извлечение: LangChain помогает извлекать структурированную информацию из неструктурированного текста, упрощая анализ и интерпретацию данных.
  10. Обобщение: LangChain поддерживает объединение длинных документов в краткие, легко усваиваемые фрагменты информации, что делает его мощным инструментом для увеличения объема данных.
  11. Оценка. Поскольку генеративные модели сложно оценивать с использованием традиционных метрик, LangChain предлагает подсказки и цепочки, помогающие в процессе оценки с использованием самих языковых моделей.

Для более подробного объяснения вы можете посмотреть документацию проекта здесь: https://python.langchain.com/en/latest/.

Давайте приготовим код!

Поскольку LangChain — это фреймворк, начать работу с кодом несложно. Мы собираемся готовить код, используя язык Python, который является самым популярным языком программирования как для машинного обучения, так и для разработки глубокого обучения.

Для начала установите LangChain с помощью следующей команды:

pip install langchain
pip install openai

Да, мы будем использовать API OpenAI, поэтому нам также необходимо установить их SDK. Затем, как и всем, нам нужно настроить ключ OpenAI, поэтому вам нужно получить его здесь: https://platform.openai.com/account/api-keys.

import os
os.environ['OPENAI_API_KEY'] = 'your key'

Этот шаг очень важен, поскольку большинству модулей LangChain потребуется ключ API OpenAI для настройки в вашей среде, поэтому вам больше не нужно передавать ключ API, когда вы хотите использовать один из модулей. После этого мы импортируем LLM, так как нам нужно больше случайности, поэтому мы устанавливаем температуру на 0,9.

from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)

Я просто собираюсь ввести простую информацию для модели:

print(llm("give me a dad joke"))

Результат:

Q: What did the fish say when it swam into a wall?
A: Dam!

Довольно просто и забавно, правда? 😅 (простите за юмор)

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

Цепи

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

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

Импортируйте все необходимые пакеты:

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.docstore.document import Document
from langchain.prompts import PromptTemplate
from langchain.indexes.vectorstore import VectorstoreIndexCreator
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI

Поскольку мы хотим сделать приложение Q&A на основе текстовых данных, то я буду использовать эту статью: https://www.kompas.id/baca/english/2023/06/08/en-prediksi-kiamat-baru- semua-benda-di-alam-semesta-berakhir-dengan-menguap, из Harian Kompas в качестве моего набора данных.

Нам нужно извлечь всю статью в один текстовый файл и загрузить в нашу программу Python:

with open("/content/article.txt") as f:
    aticle_kompas = f.read()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(article_kompas)

embeddings = OpenAIEmbeddings()

Используя Chroma, мы будем векторизовать набор данных.

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

docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": str(i)} for i in range(len(texts))]).as_retriever()

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

query = "What is Space Time?"

Запросите данные с помощью QA Chain:

docs = docsearch.get_relevant_documents(query)
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
chain({"input_documents": docs, "question": query}, return_only_outputs=True)

Результат:

{'output_text': ' Space-time is a concept in physics that combines the three dimensions of space and the one dimension of time into a single four-dimensional continuum. It is used to describe the behavior of matter and energy in the universe.'}

Хорошо ответили, правда? Как насчет того, чтобы изменить подсказку и перевести ответ на индонезийский?

prompt_template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.

{context}

Question: {question}
Answer in Indonesian:"""
PROMPT = PromptTemplate(
    template=prompt_template, input_variables=["context", "question"]
)
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff", prompt=PROMPT)
chain({"input_documents": docs, "question": query}, return_only_outputs=True)

Результат:

{'output_text': ' Ruang-waktu adalah konsep yang menggabungkan ruang dan waktu menjadi satu konsep yang terintegrasi. Menurut teori relativitas umum Einstein, ruang-waktu akan dipengaruhi oleh gaya gravitasi, sehingga menyebabkan ruang-waktu menjadi melengkung.'}

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

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

from langchain import OpenAI
from langchain.chains.summarize import load_summarize_chain

prompt_template = """Write a concise summary of the following:


{text}


CONCISE SUMMARY IN INDONESIAN:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])

llm = OpenAI(temperature=0)
summary_chain = load_summarize_chain(llm, chain_type="map_reduce", map_prompt=PROMPT, combine_prompt=PROMPT)

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

from langchain.chains import AnalyzeDocumentChain
summarize_document_chain = AnalyzeDocumentChain(combine_docs_chain=summary_chain)
summarize_document_chain.run(article_kompas)

Результат:

Stephen Hawking menyatakan pada tahun 1974 bahwa lubang hitam akan menghilang melalui proses radiasi Hawking. Namun, sebuah studi baru menunjukkan bahwa semua objek besar di alam semesta juga akan menguap melalui proses yang sama. Ini akan mengubah pandangan kita tentang alam semesta dan masa depannya. Fisikawan masih perlu menemukan bukti radiasi Hawking yang diproduksi oleh objek-objek bermasa besar untuk memverifikasi prediksi tentang akhir bintang-bintang besar di alam semesta.

Полный код этого проекта доступен здесь: machine-learning/LangChain — Kompas Article.ipynb на main · jerichosiahaya/machine-learning · GitHub

Благодаря этим передовым методам и умной обработке запросов LangChain может делать удивительные вещи в наших проектах. Он может помочь ответить на вопросы путем поиска информации в базах данных и даже предложить творческие решения проблем. Возможности LangChain безграничны и могут вывести нашу работу на совершенно новый уровень.

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

Ссылки:

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai // Агенты ИИ // Супердешевый ИИ.