Модуль 2.8 · Урок 2
Урок 2: YandexGPT API — Работа с Yandex Cloud
Содержание
- Чему вы научитесь
- Содержание
- Шаг 1: Регистрация в Yandex Cloud
- Шаг 2: Создание сервисного аккаунта и получение IAM-токена
- Шаг 3: Получение IAM-токена
- Шаг 4: REST API запрос к YandexGPT
- Шаг 5: Python SDK — удобный способ
- Шаг 6: Сравнение моделей YandexGPT
- Шаг 7: Embeddings для RAG-систем
- Шаг 8: REST vs gRPC — когда что использовать
- Попробуйте сами
- Ключевые выводы
- Следующий урок
Чему вы научитесь
- Регистрироваться в Yandex Cloud и создавать платёжный аккаунт
- Получать бесплатный грант для экспериментов
- Работать с IAM-токенами и их автообновлением
- Отправлять REST API запросы к YandexGPT
- Использовать удобный Python SDK (yandexgpt-python)
- Выбирать между REST и gRPC для вашего приложения
- Работать с embeddings для RAG-систем
- Сравнивать модели YandexGPT 5 Lite, YandexGPT 5 Pro и YandexGPT 5.1 Pro
Содержание
Шаг 1: Регистрация в Yandex Cloud
YandexGPT — LLM от Яндекса, популярна в России благодаря интеграции с экосистемой Яндекса и хорошей поддержке на русском.
Чтобы начать:
- Перейдите на console.yandex.cloud
- Нажмите «Зарегистрироваться» (используйте Яндекс аккаунт или почту)
- Создайте новую организацию или выберите существующую
- Перейдите в раздел «Платёжные аккаунты» → «Создать аккаунт»
- Выберите реквизиты (для ИП или организации)
- Привяжите способ оплаты (карта или счёт)
Раздел будет дополнен после получения материалов от партнёров (детали по грантам и промокодам).
Шаг 2: Создание сервисного аккаунта и получение IAM-токена
Для работы с API нужен IAM-токен. Его можно получить несколькими способами:
Способ 1: Через облачную консоль
- Перейдите «Управление доступом» → «Сервисные аккаунты»
- Нажмите «Создать сервисный аккаунт»
- Задайте имя, например
yandexgpt-bot - Нажмите «Создать и продолжить»
- Выдайте роль
ai.models.user(чтобы вызывать API) - Нажмите «Продолжить» → «Готово»
Способ 2: Создание API-ключа (более простой для разработки)
- В списке сервисных аккаунтов найдите только что созданный
- Нажмите на его имя
- Перейдите на вкладку «API ключи»
- Нажмите «Создать новый ключ»
- Скопируйте содержимое и сохраните в файл
key.json
Шаг 3: Получение IAM-токена
import requests
import json
import os
from datetime import datetime, timedelta
class YandexGPTAuth:
def __init__(self, api_key_path):
"""
api_key_path: путь к файлу key.json из Yandex Cloud
"""
with open(api_key_path, 'r') as f:
self.api_key = json.load(f)
self.access_token = None
self.token_expires = None
self.service_account_id = self.api_key.get('service_account_id')
def get_iam_token(self):
"""Получить новый IAM-токен"""
url = "https://iam.api.cloud.yandex.net/iam/v1/tokens"
data = {
"grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
"requested_token_use": "access",
"subject_token": self._create_jwt(),
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt"
}
response = requests.post(url, data=data)
if response.status_code == 200:
result = response.json()
self.access_token = result["access_token"]
self.token_expires = datetime.now() + timedelta(
seconds=result["expires_in"] - 60 # Обновляем за минуту до истечения
)
return self.access_token
else:
raise Exception(f"Ошибка получения токена: {response.text}")
def _create_jwt(self):
"""JWT создание — раздел будет дополнен после получения материалов"""
# В production используйте библиотеку yandex-cloud
pass
@property
def token(self):
"""Получить актуальный токен (с автообновлением)"""
if not self.access_token or datetime.now() >= self.token_expires:
self.get_iam_token()
return self.access_token
Упрощённый способ: используйте готовую библиотеку (см. Шаг 5).
flowchart LR
A["Сервисный аккаунт"] --> B["JWT подпись"]
B --> C["Yandex Auth"]
C --> D["IAM токен (12ч)"]
D --> E["YandexGPT API"]
Шаг 4: REST API запрос к YandexGPT
import requests
ACCESS_TOKEN = "ваш_iam_токен"
FOLDER_ID = "ваш_folder_id" # Из Yandex Cloud консоли
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
}
# Параметры для REST API
url = "https://llm.api.cloud.yandex.net/foundationModels/v1/completion"
payload = {
"modelUri": f"gpt://{FOLDER_ID}/yandexgpt-pro-5.1", # или yandexgpt-pro-5, yandexgpt-lite-5; совместимость с OpenAI API тоже поддерживается
"completionOptions": {
"stream": False,
"temperature": 0.7,
"maxTokens": "256"
},
"messages": [
{
"role": "user",
"text": "Объясни, что такое машинное обучение, очень просто"
}
]
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
result = response.json()
message = result["result"]["alternatives"][0]["message"]["text"]
print(f"[AI] YandexGPT: {message}")
else:
print(f"[-] Ошибка: {response.status_code}")
print(response.text)
Шаг 5: Python SDK — удобный способ
YandexGPT теперь поддерживает OpenAI-совместимый API. Это самый простой способ работы:
pip install openai # стандартный openai SDK
from openai import OpenAI
client = OpenAI(
api_key="<IAM-токен или API-ключ>",
base_url="https://llm.api.cloud.yandex.net/v1"
)
def chat_with_yandexgpt(folder_id, prompt, model="yandexgpt-pro-5.1"):
"""Простой чат с YandexGPT через OpenAI-совместимый API"""
response = client.chat.completions.create(
model=f"gpt://{folder_id}/{model}",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=256
)
return response.choices[0].message.content
# Использование
result = chat_with_yandexgpt(
folder_id="your_folder_id",
prompt="Напиши короткий стишок про Python"
)
print(result)
Также доступна интеграция через LangChain и LlamaIndex (см. ниже).
Рекомендация: Для разработки используйте OpenAI-совместимый REST (проще и переносимее), для production с высокой нагрузкой — gRPC (быстрее).
Шаг 6: Сравнение моделей YandexGPT
Актуальная линейка на 2025–2026 годы — YandexGPT 5 (с августа 2025 доступна YandexGPT 5.1 Pro). Модель YandexGPT RC упразднена.
| Параметр | YandexGPT 5 Lite | YandexGPT 5 Pro | YandexGPT 5.1 Pro |
|---|---|---|---|
| Скорость | Очень быстрая | Средняя | Средняя |
| Качество русского | [+][+] Хорошее | [+][+][+] Отличное | [+][+][+] Лучшее |
| Размер контекста | 32K токенов | 32K токенов | 128K токенов |
| Стоимость (примерно за 1K токенов, уточняйте в калькуляторе) | ~0,2 ₽ | ~0,4–1 ₽ | ~0,4 ₽ |
| Лучше всего для | Чаты, FAQ, high-throughput | Аналитика, RAG, документы | Флагман: задачи по базам знаний |
| Статус | Stable | Stable | Production (с авг 2025) |
| Function calling | [+] | [+] | [+] |
| OpenAI API совместимость | [+] | [+] | [+] |
YandexGPT 5.1 Pro — лучшая модель Яндекса для работы с текстом и точных ответов по базам знаний. Стоимость снижена в 3 раза относительно предыдущего флагмана.
Шаг 7: Embeddings для RAG-систем
YandexGPT также предоставляет модель для векторизации текста (embeddings). Это нужно для RAG (Retrieval Augmented Generation):
import requests
def get_embeddings(text, folder_id, access_token):
"""Получить вектор для текста"""
url = "https://llm.api.cloud.yandex.net/foundationModels/v1/textEmbedding"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
payload = {
"modelUri": f"emb://{folder_id}/text-search-query/latest", # Для запросов
"text": text
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
embedding = response.json()["embedding"]
return embedding # Список из 256 чисел (text-search-query) или 256 (text-search-doc)
else:
raise Exception(f"Ошибка embeddings: {response.text}")
# Пример: закодировать документ
doc_text = "Python — это язык программирования высокого уровня"
embedding = get_embeddings(doc_text, folder_id, access_token)
print(f"[+] Вектор размером {len(embedding)} измерений")
print(f"Первые 5 значений: {embedding[:5]}")
Как это используется в RAG:
- Закодируйте все документы в базе → сохраните векторы в векторной БД (Pinecone, Milvus, Weaviate)
- На запрос пользователя → закодируйте его запрос в вектор
- Найдите K похожих документов (по близости векторов)
- Передайте их контекст в prompt для GigaChat или YandexGPT
Шаг 8: REST vs gRPC — когда что использовать
graph TD
A[Нужен API для YandexGPT]
A -->|Экспериментирую,<br/>прототипирую| B[REST API]
A -->|Production,<br/>высокая нагрузка| C[gRPC]
B --> D["[+] Проще отладить<br/>[+] HTTP, curl<br/>[+] Медленнее<br/>[-] Больше overhead"]
C --> E["[+] Быстро<br/>[+] Бинарный протокол<br/>[-] Сложнее отладить<br/>[-] Требует компиляции proto"]
Попробуйте сами
Установите зависимости:
pip install requests yandex-cloud
Создайте файл config.py:
import os
from dotenv import load_dotenv
load_dotenv()
YANDEX_API_KEY_PATH = os.getenv("YANDEX_API_KEY_PATH")
FOLDER_ID = os.getenv("FOLDER_ID")
Напишите полный пример:
import requests
import json
import os
from config import FOLDER_ID
class YandexGPTClient:
def __init__(self, folder_id, api_key_path):
self.folder_id = folder_id
self.api_key_path = api_key_path
self.access_token = None
self._get_token()
def _get_token(self):
"""Получение токена через JWT — см. документацию Yandex Cloud"""
# Временно используем токен из переменной окружения
self.access_token = os.getenv("YANDEX_ACCESS_TOKEN")
def complete(self, prompt, model="yandexgpt-pro-5.1"):
"""Получить ответ от модели"""
url = "https://llm.api.cloud.yandex.net/foundationModels/v1/completion"
headers = {
"Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json"
}
payload = {
"modelUri": f"gpt://{self.folder_id}/{model}",
"completionOptions": {
"stream": False,
"temperature": 0.7,
"maxTokens": "256"
},
"messages": [
{
"role": "user",
"text": prompt
}
]
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
return response.json()["result"]["alternatives"][0]["message"]["text"]
else:
raise Exception(f"API Error: {response.status_code} - {response.text}")
def embed(self, text):
"""Получить embedding для текста"""
url = "https://llm.api.cloud.yandex.net/foundationModels/v1/textEmbedding"
headers = {
"Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json"
}
payload = {
"modelUri": f"emb://{self.folder_id}/text-search-query/latest",
"text": text
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
return response.json()["embedding"]
else:
raise Exception(f"Embedding Error: {response.status_code}")
# Использование
client = YandexGPTClient(FOLDER_ID, "path/to/key.json")
# Простой чат
response = client.complete("Объясни рекурсию простыми словами")
print(f"Ответ: {response}")
# Embeddings
embedding = client.embed("Рекурсия — это когда функция вызывает сама себя")
print(f"Embedding размер: {len(embedding)}")
Задачи для упражнения:
- Создайте клиент и отправьте запрос на русском
- Сравните скорость ответов между
yandexgpt-pro-5.1иyandexgpt-lite-5 - Закодируйте 3 разных текста и сравните их embeddings (какие ближе друг к другу?)
- Попробуйте реализовать простой RAG: закодируйте 5 фактов, потом найдите 2 самых похожих на запрос
Ключевые выводы
[+] Запомните:
- Yandex Cloud — надёжная инфраструктура, много интеграций с экосистемой Яндекса
- IAM-токены автоматически обновляются; не забывайте проверять срок действия (12 часов)
- OpenAI-совместимый API позволяет использовать стандартные библиотеки (openai, LangChain, LlamaIndex)
- Embeddings — ключевой инструмент для RAG; модели
text-search-doc/latestиtext-search-query/latest(префиксemb://) - YandexGPT 5.1 Pro — флагман с августа 2025, лучший выбор для аналитики и работы с базами знаний
- Function calling поддерживается у YandexGPT 5 Pro и Lite
- Цены прозрачные в рублях: ~0,4 ₽ за 1K токенов (5.1 Pro, уточняйте в калькуляторе Yandex Cloud), снижены в 3 раза по сравнению с предыдущей версией
Дополнительные материалы:
- Официальная документация Yandex Cloud AI Studio
- Совместимость с OpenAI API
- Примеры на GitHub
- Калькулятор стоимости
Следующий урок
В Уроке 3: Интеграция с агентами мы объединим GigaChat и YandexGPT в один универсальный скрипт с fallback-логикой: если одна модель недоступна, автоматически переключимся на другую.
Также посмотрим, как интегрировать российские LLM в популярные платформы вроде n8n и Dify.