Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Foundation Models
  • Yandex Cloud ML SDK
  • Совместимость с OpenAI
  • Управление доступом
  • Правила тарификации
  • Публичные материалы
  • История изменений

В этой статье:

  • Настройка OpenAI для работы с Foundation Models
  • Примеры использования
  • Генерация текста
  • Вызов функций
  • Эмбеддинги
  • Модели
  • Текущие ограничения

Совместимость с OpenAI

Статья создана
Yandex Cloud
Обновлена 29 мая 2025 г.
  • Настройка OpenAI для работы с Foundation Models
  • Примеры использования
    • Генерация текста
    • Вызов функций
    • Эмбеддинги
    • Модели
  • Текущие ограничения

API сервиса Foundation Models частично совместим с OpenAI API. Вы можете быстро адаптировать существующие приложения, разработанные для работы с OpenAI, изменив несколько параметров в запросе.

Для доступа ко всем возможностям Foundation Models используйте API и библиотеку Yandex Cloud ML SDK.

Настройка OpenAI для работы с Foundation ModelsНастройка OpenAI для работы с Foundation Models

Чтобы использовать модели генерации текста Foundation Models в библиотеках OpenAI, измените базовый эндпоинт и укажите API-ключ.

Python
Node.js
import openai

client = openai.OpenAI(
    api_key="<значение_API-ключа>",
    base_url="https://llm.api.cloud.yandex.net/v1"
)
import OpenAI from "openai";

const openai = new OpenAI({
  apiKey:"<значение_API-ключа>",
  baseURL:"https://llm.api.cloud.yandex.net/v1"});

Как получить API-ключ для работы с Foundation Models.

Примеры использованияПримеры использования

Прежде чем отправлять запрос, в URI модели укажите идентификатор каталога, в котором вы получали API-ключ.

Генерация текстаГенерация текста

В режиме совместимости с OpenAI API поддерживаются параметры temperature, max_tokens, stream, response_format.

Python
Node.js
cURL
  • Потоковая обработка ответа:

    # Установите OpenAI SDK с помощью pip
    # pip install openai 
    import openai
    
    YANDEX_CLOUD_FOLDER = "<идентификатор_каталога>"
    YANDEX_CLOUD_API_KEY = "<значение_API-ключа>"
    
    client = openai.OpenAI(
        api_key=YANDEX_CLOUD_API_KEY,
        base_url="https://llm.api.cloud.yandex.net/v1"
    )
    
    response = client.chat.completions.create(
        model="gpt://{YANDEX_CLOUD_FOLDER}/yandexgpt/latest",
        messages=[
            {"role": "system", "content": "Ты очень умный ассистент."},
            {"role": "user", "content": "Что умеют большие языковые модели?"}
        ],
        max_tokens=2000,
        temperature=0.3,
        stream=True
    )
    
    for chunk in response:
        if chunk.choices[0].delta.content is not None:
            print(chunk.choices[0].delta.content, end="")
    
  • Структурированный ответ:

    import openai
    
    YANDEX_CLOUD_FOLDER = "<идентификатор_каталога>"
    YANDEX_CLOUD_API_KEY = "<значение_API-ключа>"
    
    client = openai.OpenAI(
        api_key=YANDEX_CLOUD_API_KEY,
        base_url="https://llm.api.cloud.yandex.net/v1"
    )
    
    json_schema = {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "size": {"type": "integer"},
        },
        "required": ["name", "size"]
    }
    
    response = client.chat.completions.create(
        model=f"gpt://{YANDEX_CLOUD_FOLDER}/yandexgpt/rc",
        messages=[
            {"role": "user", "content": "Название - диван, размер - 150 сантиметров"}
        ],
        max_tokens=200,
        temperature=0.3,
        stream=False,
        response_format={"type": "json_schema", "json_schema": {"schema": json_schema, "name": "divan"}}
    )
    print(response)
    
import OpenAI from "openai";

const openai = new OpenAI({
  apiKey:"<значение_API-ключа>",
  baseURL:"https://llm.api.cloud.yandex.net/v1"});

async function main() {
  const completion = await openai.chat.completions.create({
    messages: [{"role": "system", "content": "Ты очень умный ассистент."},
      {"role": "user", "content": "Что умеют большие языковые модели?"}],
    model: "gpt://<идентификатор_каталога>/yandexgpt/latest",
  });

console.log(completion.choices[0]);
}
main();
curl https://llm.api.cloud.yandex.net/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <API-ключ>" \
  -d '{
    "model": "gpt://<идентификатор_каталога>/yandexgpt/latest",
    "messages": [
      {
        "role": "system",
        "content": "Ты очень умный ассистент."
      },
      {
        "role": "user",
        "content": "Что умеют большие языковые модели?"
      }
    ]
  }'

Вызов функцийВызов функций

Перед запуском примера укажите идентификатор каталога и API-ключ Yandex Cloud. Поддерживается параметр tool_choice со значениями auto и none.

Python
import openai
import json

YANDEX_CLOUD_FOLDER = "<идентификатор_каталога>"
YANDEX_CLOUD_API_KEY = "<значение_API-ключа>"

client = openai.OpenAI(
    api_key=YANDEX_CLOUD_API_KEY,
    base_url="https://llm.api.cloud.yandex.net/v1"
)

# Функция Погода
def get_current_weather(location):
    return {"location": location, "temperature": -22, "weather_condition": "Солнечно"}

# Функция Калькулятор
def calculator(a, b):
    return a + b

def run_conversation(user_input):
    selected_model = f"gpt://{YANDEX_CLOUD_FOLDER}/yandexgpt/rc"

    # Задание функций
    tools = [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Получение текущей погоды для указанного местоположения",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "Местоположение"
                        }
                    },
                    "required": ["location"]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "calculator",
                "description": "Сложить два числа",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "a": {
                            "type": "int",
                            "description": "Первое число"
                        },
                        "b": {
                            "type": "int",
                            "description": "Второе число"
                        }
                    },
                    "required": ["a", "b"]
                }
            }
        }
    ]

    # Выполнение запроса
    response = client.chat.completions.create(
        model=selected_model,
        messages=[
            {"role": "user", "content": user_input}
        ],
        tool_choice="auto",
        tools=tools
    )

    # Ответ модели
    message = response.choices[0].message
    print(message)

    # Вызов запрошенных моделью функций
    if message.tool_calls:
        # Массив сообщений для отправки результатов выполнения
        new_messages = [
            {"role": "user", "content": user_input},
            message
        ]

        # Заполнение результата для каждой вызванной функции
        for tool_call in message.tool_calls:

            function_name = tool_call.function.name
            function_args = json.loads(tool_call.function.arguments)

            if function_name == "get_weather":
                function_response = get_current_weather(function_args.get("get_current_weather"))
                new_messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": json.dumps(function_response)
                })

            if function_name == "calculator":
                function_response = calculator(function_args.get("a"), function_args.get("b"))
                new_messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": json.dumps(function_response)
                })

        second_response = client.chat.completions.create(
            model=selected_model,
            messages=new_messages,
            tools=tools
        )

        # Ответ модели с учетом вызова функций
        return second_response.choices[0].message.content

    # Функции не был вызваны, возвращаем исходный ответ
    return message.content


if __name__ == "__main__":
    result = run_conversation("2+2 и погода в москве")
    print(result)

ЭмбеддингиЭмбеддинги

Поддерживаются эмбеддинги для одиночных строк с параметром encoding_format в значении float.

Python
import openai
import numpy as np
from scipy.spatial.distance import cdist

YANDEX_CLOUD_FOLDER = "<идентификатор_каталога>"
YANDEX_CLOUD_API_KEY = "<значение_API-ключа>"

client = openai.OpenAI(
    api_key=YANDEX_CLOUD_API_KEY,
    base_url="https://llm.api.cloud.yandex.net/v1"
)

# Метод для получения произвольного эмбеддинга
def get_embedding(text, model):
    # Убираем лишние переносы
    fixed_text = get_trimmed_text(text)
    return (
        (
            client.embeddings.create(
                input=fixed_text,
                model=model,
                encoding_format="float",
            )
        )
        .data[0]
        .embedding
    )

# Метод для получения эмбеддингов документа
def get_doc_embeddings(texts):
    doc_embeddings = []
    for text in texts:
        embedding = get_embedding(text, model=f"emb://{YANDEX_CLOUD_FOLDER}/text-search-doc/latest")
        doc_embeddings.append(embedding)
    return doc_embeddings

# Метод для получения эмбеддинга запроса
def get_query_embedding(text):
    embedding = get_embedding(text, model=f"emb://{YANDEX_CLOUD_FOLDER}/text-search-query/latest")
    return np.array(embedding)

# Вспомогательный метод для удаления переносов строк
def get_trimmed_text(text):
    return ' '.join(text.split())

def main():
    # Документ для поиска в виде массива текстов
    doc_texts = [
        """Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург)
        — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления,
        литературный критик и теоретик литературы, историк, публицист, журналист.""",
        """Пушкин неоднократно писал о своей родословной в стихах и прозе; он видел в своих предках образец истинной
        «аристократии», древнего рода, честно служившего отечеству, но не снискавшего благосклонности правителей и
        «гонимого». Не раз он обращался (в том числе в художественной форме) и к образу своего прадеда по матери —
        африканца Абрама Петровича Ганнибала, ставшего слугой и воспитанником Петра I, а потом военным инженером и
        генералом""",
    ]

    # Текст поискового запроса
    query_text = "когда день рождения Пушкина?"

    # Получение эмбеддингов документа
    doc_embedding = get_doc_embeddings(doc_texts)
    # Получение эмбеддинга запроса
    query_embedding = get_query_embedding(query_text)
    # Вычисление косинусного расстояния
    cosine_distance = cdist([query_embedding], doc_embedding, metric="cosine")
    # Вычисление схожести
    cosine_similarity = 1 - cosine_distance
    # Вычисление индекса наиболее подходящего текста
    argmax = np.argmax(cosine_similarity)
    # Получение текста по индексу
    result = doc_texts[argmax]

    print(get_trimmed_text(result))


if __name__ == "__main__":
    main()

МоделиМодели

Поддерживается метод для получения списка доступных моделей:

Python
import openai

YANDEX_CLOUD_API_KEY = "<значение_API-ключа>"

client = openai.OpenAI(
    api_key=YANDEX_CLOUD_API_KEY,
    base_url="https://llm.api.cloud.yandex.net/v1"
)
models = client.models.list()
print(models.data)

Текущие ограниченияТекущие ограничения

Сервис Foundation Models частично совместим с OpenAI API. Если вы еще не используете OpenAI SDK, рекомендуем сразу разрабатывать свои приложения на Yandex Cloud ML SDK или для API Foundation Models.

Была ли статья полезна?

Предыдущая
Yandex Cloud ML SDK
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»