Введение

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

Мы обсудим 3 примера приложений LLM:

Подскажите приложение

Приложение для суммирования

Приложение вопросов и ответов

Приложение «Подсказка»

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

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

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

Чтобы проиллюстрировать это, давайте создадим помощника на основе чата, который помогает пользователям находить информацию о фильмах. Убедитесь, что ваш ключ OpenAI хранится в переменных среды с использованием имени «OPENAI_API_KEY». Не забудьте установить необходимые пакеты с помощью следующей команды:

pip install langchain==0.0.208 deeplake openai tiktoken.

Пример кода

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

# Before executing the following code, make sure to have
# your OpenAI key saved in the “OPENAI_API_KEY” environment variable.

chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

template = "You are an assistant that helps users find information about movies."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)

human_template = "Find information about the movie {movie_title}."
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

response = chat(chat_prompt.format_prompt(movie_title="Inception").to_messages())

print(response.content)

Образец вывода

Inception is a 2010 science fiction action film directed by Christopher Nolan. The film stars Leonardo DiCaprio, Ken Watanabe, Joseph Gordon-Levitt, Ellen Page, Tom Hardy, Dileep Rao, Cillian Murphy, Tom Berenger, and Michael Caine. The plot follows a professional thief who steals information by infiltrating the subconscious of his targets. He is offered a chance to have his criminal history erased as payment for the implantation of another person's idea into a target's subconscious. The film was a critical and commercial success, grossing over $829 million worldwide and receiving numerous accolades, including four Academy Awards.

Объяснение

Использование объекта to_messages в LangChain позволяет преобразовать отформатированное значение шаблона приглашения чата в список объектов сообщений. Это полезно при работе с моделями чата, поскольку обеспечивает структурированный способ управления беседой и гарантирует, что модель чата может понимать контекст и роли сообщений.

Приложение цепочки суммирования

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

Следующий код инициализирует языковую модель, используя класс OpenAI с температурой 0, потому что нам нужен детерминированный вывод. Функция load_summarize_chain принимает экземпляр языковой модели и возвращает предварительно построенную цепочку суммирования. Наконец, класс PyPDFLoader отвечает за загрузку PDF-файлов и их преобразование в формат, подходящий для обработки LangChain.

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

Пример кода

# Import necessary modules
from langchain import OpenAI, PromptTemplate
from langchain.chains.summarize import load_summarize_chain
from langchain.document_loaders import PyPDFLoader

# Initialize language model
llm = OpenAI(model_name="text-davinci-003", temperature=0)

# Load the summarization chain
summarize_chain = load_summarize_chain(llm)

# Load the document using PyPDFLoader
document_loader = PyPDFLoader(file_path="path/to/your/pdf/file.pdf")
document = document_loader.load()

# Summarize the document
summary = summarize_chain(document)
print(summary['output_text'])

Образец вывода

This document provides a summary of useful Linux commands for starting and stopping, accessing and mounting file systems, finding files and text within files, the X Window System, moving, copying, deleting and viewing files, installing software, user administration, little known tips and tricks, configuration files and what they do, file permissions, X shortcuts, printing, and a link to an official Linux pocket protector.

Объяснение

Приведенный выше вывод основан на PDF-файле «Одностраничное руководство по Linux», доступном по этому URL-адресу.

В этом примере код использует цепочку суммирования по умолчанию, предоставленную функцией load_summarize_chain. Однако вы можете настроить процесс суммирования, предоставив шаблоны подсказок.

Приложение QA Chain

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

Пример кода

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import OpenAI

prompt = PromptTemplate(template="Question: {question}\nAnswer:", input_variables=["question"])

llm = OpenAI(model_name="text-davinci-003", temperature=0)
chain = LLMChain(llm=llm, prompt=prompt)

Мы определяем собственный шаблон подсказки, создавая экземпляр класса PromptTemplate. Строка шаблона содержит заполнитель {question} для входного вопроса, за которым следует символ новой строки и метка «Ответ:». Аргумент input_variables устанавливается в список доступных заполнителей в подсказке (как вопрос в данном случае), чтобы указать имя переменной, которую цепочка заменит в методе template.run().

Затем мы создаем экземпляр модели OpenAI с именем text-davinci-003 с температурой 0. Класс OpenAI используется для создания экземпляра, и предоставляются аргументы model_name и temperature. Наконец, мы создаем цепочку вопросов и ответов, используя класс LLMChain.

Конструктор класса принимает два аргумента: llm, который представляет собой экземпляр модели OpenAI, и prompt, который представляет собой настраиваемый шаблон подсказки, который мы определили ранее.

Следуя этим шагам, мы можем эффективно обрабатывать входные вопросы с помощью настраиваемых ответов на вопросы, генерируя соответствующие ответы с использованием модели OpenAI и настраиваемого шаблона приглашения.

chain.run("what is the meaning of life?")

Образец вывода

'The meaning of life is subjective and can vary from person to person. For some, it may be to find happiness and fulfillment, while for others it may be to make a difference in the world. Ultimately, the meaning of life is up to each individual to decide.’

Объяснение

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

Заключение

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

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