Обзор возможностей генерации текста
Yandex Foundation Models предоставляет доступ к большим текстовым моделям, которые могут быстро создавать текстовый контент: генерировать описание товаров, статьи, новости, информационные рассылки, посты для блога и многое другое. Качество ответа нейросети напрямую зависит от точности переданной инструкции: чем точнее вы опишете свой запрос, тем выше вероятность получить ожидаемый результат. Примеры инструкций и запросов собраны в библиотеке промтов YandexGPT. Точность ответа на некоторые запросы можно повысить, активировав режим рассуждений.
Модели YandexGPT в первую очередь предназначены для работы с русскоязычными текстами, но могут понимать около 20 языков, в том числе английский и японский. Кроме текстового описания в промтах необходимо указывать специальный параметр температура, который определяет вариативность ответа модели: чем выше значение температуры, тем более непредсказуемым будет результат выполнения запроса.
Также в Foundation Models доступны модели Llama 3.1 8B и Llama 3.3 70B1.
1 Llama создана компанией Meta. Meta признана экстремистской организацией, ее деятельность в России запрещена.
Интерфейсы работы с моделями
Для работы с моделями генерации текста в Yandex Cloud доступны два интерфейса. Вы можете отправлять запросы в AI Playground
AI Playground подойдет для знакомства и тестирования: в нем вы можете отправлять синхронные запросы к разным моделям, настраивать параметры и подбирать промты. При общении модель сохраняет контекст разговора, но вы можете создать новый эксперимент, если контекст необходимо сменить. Кроме того, в навигационном меню слева доступны интерфейсы YandexGPT Playground в формате чата и промт-режима. Используйте их, если вам необходимо полностью повторить поведение модели через API и вы не хотите сохранять результаты диалога.
Чтобы использовать модели YandexGPT, необходима роль ai.languageModels.user
или выше на каталог.
Подробнее о доступных моделях см. в разделе Модели генерации текста.
Форматирование ответов модели
По умолчанию модель возвращает ответ, отформатированный с помощью разметки Markdown
Пример:
{
"modelUri": "gpt://<идентификатор_каталога>/yandexgpt/latest",
"completionOptions": {
"stream": false,
"temperature": 0.6,
"maxTokens": "2000",
"reasoningOptions": {
"mode": "DISABLED"
}
},
"messages": [
{
"role": "system",
"text": "Ты — умный ассистент."
},
{
"role": "user",
"text": "Назови любые три группы товаров в продовольственном магазине. Для каждой группы приведи три любые подгруппы, входящие в группу. Представь результат в форме объекта JSON, где каждая группа товаров представлена в виде ключа в объекте JSON, а значениями являются массивы из соответствующих подгрупп. Нужны только данные без вводных фраз и объяснений. Не используй разметку Markdown!"
}
]
}
Результат:
{
"result": {
"alternatives": [
{
"message": {
"role": "assistant",
"text": "{\n \"мясо\": [\"говядина\", \"свинина\", \"баранина\"],\n \"молочные продукты\": [\"молоко\", \"творог\", \"сметана\"],\n \"фрукты\": [\"яблоки\", \"бананы\", \"апельсины\"]\n}"
},
"status": "ALTERNATIVE_STATUS_FINAL"
}
],
"usage": {
"inputTextTokens": "87",
"completionTokens": "58",
"totalTokens": "145"
},
"modelVersion": "07.03.2024"
}
}
Модель вернула ответ в формате JSON, где перенос строки заменен на \n
, а кавычки экранированы.
Если с помощью промта вам не удается добиться желаемого результата, попробуйте дообучить модель.
Параметры API для сохранения структуры ответа
Некоторые модели генерации текста поддерживают дополнительное управление форматом ответа не только промтом, но и с помощью параметров запроса. Так вы можете использовать параметры форматирования ответа, чтобы указать, что ответ необходимо вернуть в формате JSON. На выбор доступны два варианта:
-
JSON с произвольной структурой:
SDKAPI#!/usr/bin/env python3 from __future__ import annotations import json import pydantic from yandex_cloud_ml_sdk import YCloudML text = """ Назови любые три группы товаров в продовольственном магазине. Для каждой группы приведи три любые подгруппы, входящие в группу. Представь результат в формате JSON. """ def main() -> None: sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) model = sdk.models.completions("yandexgpt", model_version="rc") model = model.configure(response_format="json") result = model.run( [ {"role": "user", "text": text}, ] ) print("JSON result:", result[0].text) if __name__ == "__main__": main()
{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt/rc", "completionOptions": { "stream": false }, "messages": [ { "role": "user", "text": "Назови любые три группы товаров в продовольственном магазине. Для каждой группы приведи три любые подгруппы, входящие в группу. Представь результат в формате JSON." } ], "json_object": true }
Совет
Если вы хотите получить ответ в виде JSON с произвольной структурой, обязательно дополнительно укажите это словами в промте. Иначе модель может добавлять дополнительные скобки, пробелы и отступы и генерировать лишние токены.
-
JSON, строго соответствующий заданной схеме:
SDKAPI#!/usr/bin/env python3 from __future__ import annotations import json import pydantic from yandex_cloud_ml_sdk import YCloudML text = "Назови дату первого полета Гагарина." def main() -> None: sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) model = sdk.models.completions("yandexgpt", model_version="rc") model = model.configure( response_format={ "json_schema": { "properties": { "day": { "title": "Day", "description": "День месяца", "type": "integer", }, "month": { "title": "Month", "description": "Месяц, словом", "type": "string", }, "year": { "title": "Year", "description": "Год", "type": "integer", }, }, "required": ["day", "month", "year"], "type": "object", } } ) result = model.run( [ {"role": "user", "text": text}, ] ) print("JSON result:", result[0].text) if __name__ == "__main__": main()
{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt/rc", "completionOptions": { "stream": false }, "messages": [ { "role": "user", "text": "Назови дату первого полета Гагарина." } ], "json_schema": { "schema": { "properties": { "day": { "title": "Day", "description": "День месяца", "type": "integer" }, "month": { "title": "Month", "description": "Месяц, словом", "type": "string" }, "year": { "title": "Year", "description": "Год", "type": "integer" } }, "required": [ "day", "month", "year" ], "type": "object" } } }
Строгая структура ответа необходима при работе с внешними инструментами с помощью вызова функций. Структурирование ответа поддержано в модели YandexGPT Pro 5 поколения (ветка RC).