Как реализовать чат с YandexGPT
Модели YandexGPT API не хранят контекст предшествующих сообщений, поэтому для реализации диалога с моделью историю сообщений нужно сохранять на стороне клиента и передавать в каждом обращении к модели. Чат, доступный в Foundation Models Playground, представляет собой серию промт-запросов, в которой в контекст каждого нового запроса добавляются ответы модели на предыдущие запросы. Модели YandexGPT API могут работать с контекстом до 8192 токенов.
Совет
Используйте AI Assistant API, чтобы создать чат с моделью. Пример реализации чата с помощью ассистентов и тредов доступен в инструкции Создать простого ассистента.
Чтобы реализовать в своем приложении чат с моделью и избежать задержек с ответами, отправляйте промт-запросы в синхронном режиме с помощью метода completion.
Чтобы реализовать чат:
-
Получите данные для аутентификации в API, как описано в разделе Аутентификация в API Yandex Foundation Models.
-
Подготовьте файл запроса к модели, например
body.json
:{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite", "completionOptions": { "stream": false, "temperature": 0.6, "maxTokens": "2000" }, "messages": [ { "role": "system", "text": "Ты умный ассистент" }, { "role": "user", "text": "Привет! Какими науками занимался Альберт Эйнштейн?" } ] }
Где:
-
modelUri
— идентификатор модели, которая будет использоваться для генерации ответа. Параметр содержит идентификатор каталога Yandex Cloud или идентификатор дообученной в DataSphere модели. -
completionOptions
— параметры конфигурации запроса:stream
— включает потоковую передачу частично сгенерированного текста. Принимает значенияtrue
илиfalse
.temperature
— чем выше значение этого параметра, тем более креативными и случайными будут ответы модели. Принимает значения от0
(включительно) до1
(включительно). Значение по умолчанию:0.3
.maxTokens
— устанавливает ограничение на выход модели в токенах. Максимальное число токенов генерации зависит от модели. Подробнее см. в разделе Квоты и лимиты в Yandex Foundation Models.
-
messages
— список сообщений, которые задают контекст для модели:-
role
— роль отправителя сообщения:user
— предназначена для отправки пользовательских сообщений к модели.system
— позволяет задать контекст запроса и определить поведение модели.assistant
— используется для ответов, которые генерирует модель. При работе в режиме чата ответы модели, помеченные рольюassistant
, включаются в состав сообщения для сохранения контекста беседы. Не передавайте сообщения пользователя с этой ролью.
-
text
— текстовое содержимое сообщения.
-
-
-
Отправьте запрос к модели:
cURLPython 3Выполните команду:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "x-folder-id: ${FOLDER_ID}" \ --data "@<путь_до_файла_json>" \ "https://llm.api.cloud.yandex.net/foundationModels/v1/completion"
Где:
FOLDER_ID
— идентификатор каталога, на который у вашего аккаунта есть рольai.languageModels.user
или выше.IAM_TOKEN
— IAM-токен вашего аккаунта.
-
Создайте файл
index.py
и добавьте в него код:import requests import json import os def gpt(auth_headers): url = 'https://llm.api.cloud.yandex.net/foundationModels/v1/completion' with open('body.json', 'r', encoding='utf-8') as f: data = json.dumps(json.load(f)) resp = requests.post(url, headers=auth_headers, data=data) if resp.status_code != 200: raise RuntimeError( 'Invalid response received: code: {}, message: {}'.format( {resp.status_code}, {resp.text} ) ) return resp.text if __name__ == "__main__": if os.getenv('IAM_TOKEN') is not None: iam_token = os.environ['IAM_TOKEN'] headers = { 'Authorization': f'Bearer {iam_token}', } elif os.getenv('API_KEY') is not None: api_key = os.environ['API_KEY'] headers = { 'Authorization': f'Api-Key {api_key}', } else: print ('Please save either an IAM token or an API key into a corresponding `IAM_TOKEN` or `API_KEY` environment variable.') exit() print(gpt(headers))
-
Сохраните данные для аутентификации в переменную окружения:
Для аутентификации с помощью IAM-токена:
export IAM_TOKEN=<IAM-токен>
Для аутентификации с помощью API-ключа (только для сервисного аккаунта):
export API_KEY=<API-ключ>
-
Выполните созданный файл:
python index.py
-
В ответ на запрос модель вернет сгенерированный текст:
Результат:
{ "result": { "alternatives": [ { "message": { "role": "assistant", "text": "Альберт Эйнштейн был выдающимся физиком, труды которого в области теоретической физики, теоретической механики и философии науки стали фундаментальными. Он посвятил свою карьеру изучению основ Вселенной, включая теорию относительности, специальную и общую теорию относительности. Кроме того, Альберт Эйнштейн изучал:\n\n* термодинамику,\n* статистическую механику,\n* электромагнетизм,\n* квантовую теорию,\n* специальную теорию относительности и др.\n\nЕго работы по общей теории относительности получили широкое признание и оказали глубокое влияние на развитие современной физики." }, "status": "ALTERNATIVE_STATUS_FINAL" } ], "usage": { "inputTextTokens": "28", "completionTokens": "110", "totalTokens": "138" }, "modelVersion": "18.01.2024" } }
Сохраните значение записи
message
для использования в последующем запросе. -
В конец массива
messages
в файл запроса добавьте значение записиmessage
, полученное в результате выполнения предыдущего запроса к модели, а также новый вопрос пользователя:{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite", "completionOptions": { "stream": false, "temperature": 0.6, "maxTokens": "2000" }, "messages": [ { "role": "system", "text": "Ты умный ассистент" }, { "role": "user", "text": "Привет! Какими науками занимался Альберт Эйнштейн?" }, { "role": "assistant", "text": "Альберт Эйнштейн был выдающимся физиком, труды которого в области теоретической физики, теоретической механики и философии науки стали фундаментальными. Он посвятил свою карьеру изучению основ Вселенной, включая теорию относительности, специальную и общую теорию относительности. Кроме того, Альберт Эйнштейн изучал:\n\n* термодинамику,\n* статистическую механику,\n* электромагнетизм,\n* квантовую теорию,\n* специальную теорию относительности и др.\n\nЕго работы по общей теории относительности получили широкое признание и оказали глубокое влияние на развитие современной физики." }, { "role": "user", "text": "Какие важные открытия он совершил?" } ] }
-
Отправьте новый запрос к модели, повторив третий шаг инструкции. В ответ на запрос модель снова вернет сгенерированный текст:
Результат:
{ "result": { "alternatives": [ { "message": { "role": "assistant", "text": "Вот некоторые открытия, которые обычно связывают с именем Альберта Эйнштейна:\n1. **Специальная теория относительности (СТО)** — теория, описывающая движение, законы механики и пространственно-временные отношения при произвольных скоростях, меньших скорости света в вакууме.\n1. **Общая теория относительности (ОТО)** — геометрическая теория тяготения, основанная на предсказании взаимосвязи между координатами пространства-времени, материи и энергии.\n1. **Квантовая теория фотоэффекта** — объяснение фотоэффекта, явления выбивания электронов из вещества под действием электромагнитного излучения.\n1. **Броуновское движение** — явление беспорядочного, случайного движения микроскопических частиц, взвешенных в жидкости или газе, происходящее из-за теплового движения молекул окружающей среды.\n1. **Эквивалентность гравитационной и инерционной массы** — идея о том, что гравитационная и инертная масса являются разными аспектами одной и той же величины.\n1. **Космологические решения уравнений ОТО** — вклад в теорию строения и динамики Вселенной.\n1. **Ядерная модель атома** — описание структуры атома на основе протонов, нейтронов и электронов.\nЭто лишь некоторые из открытий Альберта Эйнштейна. Его вклад в науку и философию огромен, и его исследования продолжают оказывать влияние на наши представления о природе и Вселенной." }, "status": "ALTERNATIVE_STATUS_FINAL" } ], "usage": { "inputTextTokens": "154", "completionTokens": "278", "totalTokens": "432" }, "modelVersion": "18.01.2024" } }
Снова сохраните значение записи
message
для использования в последующем запросе. -
Продолжайте дополнять контекст запроса полученными ответами и вопросами пользователя:
{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite", "completionOptions": { "stream": false, "temperature": 0.6, "maxTokens": "2000" }, "messages": [ { "role": "system", "text": "Ты умный ассистент" }, { "role": "user", "text": "Привет! Какими науками занимался Альберт Эйнштейн?" }, { "role": "assistant", "text": "Альберт Эйнштейн был выдающимся физиком, труды которого в области теоретической физики, теоретической механики и философии науки стали фундаментальными. Он посвятил свою карьеру изучению основ Вселенной, включая теорию относительности, специальную и общую теорию относительности. Кроме того, Альберт Эйнштейн изучал:\n\n* термодинамику,\n* статистическую механику,\n* электромагнетизм,\n* квантовую теорию,\n* специальную теорию относительности и др.\n\nЕго работы по общей теории относительности получили широкое признание и оказали глубокое влияние на развитие современной физики." }, { "role": "user", "text": "Какие важные открытия он совершил?" }, { "role": "assistant", "text": "Вот некоторые открытия, которые обычно связывают с именем Альберта Эйнштейна:\n1. **Специальная теория относительности (СТО)** — теория, описывающая движение, законы механики и пространственно-временные отношения при произвольных скоростях, меньших скорости света в вакууме.\n1. **Общая теория относительности (ОТО)** — геометрическая теория тяготения, основанная на предсказании взаимосвязи между координатами пространства-времени, материи и энергии.\n1. **Квантовая теория фотоэффекта** — объяснение фотоэффекта, явления выбивания электронов из вещества под действием электромагнитного излучения.\n1. **Броуновское движение** — явление беспорядочного, случайного движения микроскопических частиц, взвешенных в жидкости или газе, происходящее из-за теплового движения молекул окружающей среды.\n1. **Эквивалентность гравитационной и инерционной массы** — идея о том, что гравитационная и инертная масса являются разными аспектами одной и той же величины.\n1. **Космологические решения уравнений ОТО** — вклад в теорию строения и динамики Вселенной.\n1. **Ядерная модель атома** — описание структуры атома на основе протонов, нейтронов и электронов.\nЭто лишь некоторые из открытий Альберта Эйнштейна. Его вклад в науку и философию огромен, и его исследования продолжают оказывать влияние на наши представления о природе и Вселенной." }, { "role": "user", "text": "Сократи свой ответ" } ] }
Результат:
{ "result": { "alternatives": [ { "message": { "role": "assistant", "text": "Альберт Эйнштейн — выдающийся физик, изучавший основы Вселенной, в частности, теорию относительности, термодинамику и электромагнетизм.\n\nИзвестные открытия учёного: специальная и общая теория относительности, квантовая теория фотоэффекта и др." }, "status": "ALTERNATIVE_STATUS_FINAL" } ], "usage": { "inputTextTokens": "452", "completionTokens": "54", "totalTokens": "506" }, "modelVersion": "18.01.2024" } }