ym88659208ym87991671
Разработка простого LLM-приложения | Документация для разработчиков

Разработка простого LLM-приложения

Обновлено 28 ноября 2024

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

Подготовка к разработке

Jupyter-блокноты

Это руководство, как и большинство других в документации, использует Jupyter-блокноты. Они отлично подходят для изучения работы с LLM-системами, так как предоставляют интерактивную среду для работы с руководствами и позволяют работать с непредвиденными ситуациями: недоступностью API, нетипичным выводом и другими.

Подробнее об установке jupyter — в официальной документации.

Установка

Для установки GigaChain выполните команду:

pip install langchain-gigachat

Подробнее об установке — в разделе Установка.

Работа с языковыми моделями

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

Хотя GigaChain поддерживает различные языковые модели, основным преимуществом библиотеки является возможность работы с моделями GigaChat.

# | output: false
# | echo: false

from langchain_gigachat.chat_models import GigaChat

model = GigaChat(
credentials="ключ_авторизации",
scope="GIGACHAT_API_PERS",
model="GigaChat",
verify_ssl_certs=False,
)

Объект GigaChat принимает параметры:

  • credentials — ключ авторизации для обмена сообщениями с GigaChat API. О том, как получить ключ авторизации — в разделе Быстрый старт.

  • scope — необязательный параметр, в котором можно указать версию API, к которой нужно обратиться. Возможные значения:

    • GIGACHAT_API_PERS — версия API для физических лиц;
    • GIGACHAT_API_CORP — версия API для ИП и юрлиц.

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

  • model — необязательный параметр, в котором можно явно задать модель GigaChat.

  • verify_ssl_certs — необязательный параметр, с помощью которого можно отключить проверку сертификатов НУЦ Минцифры.

Попробуйте обратиться к модели напрямую.

Объекты ChatModel — это экземпляры Runnable-интерфейса GigaChain. Все экземпляры Runnable предоставляют стандартный интерфейс для взаимподействия.

Так, чтобы обратиться к модели, достаточно вызвать метод .invoke() со списком сообщений.

from langchain_core.messages import HumanMessage, SystemMessage

messages = [
SystemMessage(content="Переведи следующее сообщение с русского на английский"),
HumanMessage(content="привет!"),
]

model.invoke(messages)
    AIMessage(content='Hello!', additional_kwargs={}, response_metadata={'token_usage': Usage(prompt_tokens=24, completion_tokens=3, total_tokens=27), 'model_name': 'GigaChat:1.0.26.15', 'finish_reason': 'stop'}, id='run-18c3ad4a-677f-4a2e-836f-e9751c83f825-0')

Парсеры вывода OutputParsers

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

Импортируйте простой парсер вывода.

from langchain_core.output_parsers import StrOutputParser

parser = StrOutputParser()

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

result = model.invoke(messages)
parser.invoke(result)
    'Hello!'

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

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

chain = model | parser
chain.invoke(messages)
    'Hello!'

Шаблоны промптов

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

Шаблоны промптов (PromptTemplates) — это конструкции GigaChain, которые принимают необработанный ввод пользователя и возвращают данные (промпт), готовые для передачи в языковую модель.

Создайте шаблон промпта, который будет принимать две пользовательские переменные:

  • language — язык, на который нужно перевести текст;
  • text — текст для перевода.

Для этого импортируйте ChatPromptTemplate:

from langchain_core.prompts import ChatPromptTemplate

Создайте строку, которая будет оформлена как системное сообщение:

system_template = "Переведи следующий текст на {language}:"

Теперь вы можете создать шаблон промпта. Он будет состоять из комбинации system_template и шаблона для ввода текста.

prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)

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

result = prompt_template.invoke({"language": "английский", "text": "привет"})

result
    ChatPromptValue(messages=[SystemMessage(content='Переведи следующий текст на английский:', additional_kwargs={}, response_metadata={}), HumanMessage(content='привет', additional_kwargs={}, response_metadata={})])

Шаблон возвращает объект ChatPromptValue, который состоит из двух сообщений. Доступ к сообщениям можно получить с помощью метода .to_messages():

result.to_messages()
    [SystemMessage(content='Переведи следующий текст на английский:', additional_kwargs={}, response_metadata={}),
HumanMessage(content='привет', additional_kwargs={}, response_metadata={})]

Соединение всех компонентов вместе

Теперь объедините все три компонента вместе: шаблон, модель и парсер вывода с помощью оператора |.

chain = prompt_template | model | parser
chain.invoke({"language": "английский", "text": "привет"})
    'Hello'

Это простой пример использования LangChain Expression Language (LCEL) для соединения вместе модулей GigaChain. В таком подходе есть ряд преимуществ. В частности, он обеспечивает оптимизированную работу с потоковой передачей.

Смотрите также

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

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.