Skip to main content

Yandex Neural API Client

Yandex Neural API Client — это Python-библиотека для удобного взаимодействия с нейронными сетями Yandex.Cloud. С ее помощью вы можете генерировать тексты, изображения, выполнять токенизацию и получать эмбеддинги текста.

Содержание


Особенности

  • Генерация текста: Используйте мощные языковые модели Яндекса для создания текстов.
  • Генерация изображений: Создавайте изображения на основе текстовых описаний.
  • Токенизация: Разбивайте текст на токены.
  • Эмбеддинги: Получайте эмбеддинги для текстов и используйте их для вычисления сходства.
  • Асинхронные и синхронные методы: Поддержка как асинхронных, так и синхронных вызовов.
  • Стриминг: Получайте данные по мере их генерации.

Установка

pip install yandex-neural-api

Начало работы

Получение IAM-токена и Folder ID

Перед началом работы убедитесь, что у вас есть:

  • IAM-токен: Токен для аутентификации в Yandex.Cloud.
  • Folder ID: Идентификатор каталога в Yandex.Cloud.

Получить эти данные можно в консоли управления Yandex.Cloud.

Импорт библиотеки

from yandex_neural_api.client import YandexNeuralAPIClient

Описание класса YandexNeuralAPIClient

YandexNeuralAPIClient — главный класс библиотеки, предоставляющий методы для взаимодействия с Yandex Neural API.

Инициализация клиента

client = YandexNeuralAPIClient(
    iam_token: str,
    folder_id: str,
    model_type: str = 'pro',
    llm_temperature: float = 0.6,
    llm_max_tokens: int = 1000,
    image_mime_type: str = 'image/png',
    image_width_ratio: int = 1,
    image_height_ratio: int = 1,
    embedding_model: str = 'text-search-doc',
    log_level: int = logging.INFO
)

Параметры конструктора:

  • iam_token (str): Обязательный параметр. Ваш IAM-токен для авторизации в Yandex.Cloud.
  • folder_id (str): Обязательный параметр. Идентификатор каталога в Yandex.Cloud.
  • model_type (str): Тип модели для генерации текста. Возможные значения:
    • 'pro' (по умолчанию)
    • 'lite'
  • llm_temperature (float): Температура для генерации текста. По умолчанию 0.6. Определяет степень "творчества" модели. Значения от 0 до 1.
  • llm_max_tokens (int): Максимальное количество токенов для генерации текста. По умолчанию 1000.
  • image_mime_type (str): MIME-тип генерируемого изображения. По умолчанию 'image/png'.
  • image_width_ratio (int): Соотношение ширины изображения. По умолчанию 1.
  • image_height_ratio (int): Соотношение высоты изображения. По умолчанию 1.
  • embedding_model (str): Модель для получения эмбеддингов текста. Возможные значения:
    • 'text-search-doc' (по умолчанию) для документов.
    • 'text-search-query' для запросов.
  • log_level (int): Уровень логирования модуля logging. По умолчанию logging.INFO.

Методы класса

generate_text(prompt, stream=False, callback=None)

Синхронная генерация текста по заданному промпту.

Параметры:

  • prompt (str): Промпт (текст-запрос) для генерации.
  • stream (bool): Если True, данные будут приходить в режиме стриминга. По умолчанию False.
  • callback (Callable[[str], None], optional): Функция обратного вызова для обработки данных в режиме стриминга.

Возвращает:

  • str: Сгенерированный текст (если stream=False).

Пример:

text = client.generate_text("Напиши короткое стихотворение о море.")

generate_text_async(prompt, stream=False, callback=None)

Асинхронная генерация текста по заданному промпту.

Параметры:

  • prompt (str): Промпт (текст-запрос) для генерации.
  • stream (bool): Если True, данные будут приходить в режиме стриминга. По умолчанию False.
  • callback (Callable[[str], None], optional): Функция обратного вызова для обработки данных в режиме стриминга.

Возвращает:

  • str: Сгенерированный текст (если stream=False).

Пример:

async def generate():
    text = await client.generate_text_async("Опиши закат над океаном.")
    print(text)

asyncio.run(generate())

generate_image_async(prompt)

Асинхронная генерация изображения по заданному промпту.

Параметры:

  • prompt (str): Промпт (текстовое описание) для генерации изображения.

Возвращает:

  • bytes: Сгенерированное изображение в виде байтов.

Пример:

async def generate_image():
    image_data = await client.generate_image_async("Нарисуй красивый пейзаж с горами.")
    with open("image.png", "wb") as f:
        f.write(image_data)

asyncio.run(generate_image())

tokenize_text(text)

Токенизация заданного текста.

Параметры:

  • text (str): Текст для токенизации.

Возвращает:

  • Dict[str, Any]: Результаты токенизации в формате JSON.

Пример:

tokens = client.tokenize_text("Привет, мир!")
print(tokens)

get_text_embedding(text, text_type='doc')

Получение эмбеддинга для заданного текста.

Параметры:

  • text (str): Текст для получения эмбеддинга.
  • text_type (str): Тип текста. Возможные значения:
    • 'doc' (по умолчанию) для документов.
    • 'query' для запросов.

Возвращает:

  • list: Эмбеддинг в виде списка числовых значений.

Пример:

embedding = client.get_text_embedding("Что такое машинное обучение?", text_type='query')

update_text_generation_params(llm_temperature=None, llm_max_tokens=None)

Обновление параметров генерации текста.

Параметры:

  • llm_temperature (float, optional): Новая температура генерации текста.
  • llm_max_tokens (int, optional): Новое максимальное количество токенов.

Пример:

client.update_text_generation_params(llm_temperature=0.8, llm_max_tokens=1500)

update_image_generation_params(image_mime_type=None, image_width_ratio=None, image_height_ratio=None)

Обновление параметров генерации изображений.

Параметры:

  • image_mime_type (str, optional): Новый MIME-тип изображения.
  • image_width_ratio (int, optional): Новое соотношение ширины.
  • image_height_ratio (int, optional): Новое соотношение высоты.

Пример:

client.update_image_generation_params(image_mime_type='image/jpeg', image_width_ratio=16, image_height_ratio=9)

update_embedding_model(embedding_model)

Обновление модели эмбеддинга.

Параметры:

  • embedding_model (str): Новая модель эмбеддинга. Возможные значения:
    • 'text-search-doc' для документов.
    • 'text-search-query' для запросов.

Пример:

client.update_embedding_model('text-search-query')

Использование

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

Синхронная генерация текста

from yandex_neural_api.client import YandexNeuralAPIClient

client = YandexNeuralAPIClient(iam_token="YOUR_IAM_TOKEN", folder_id="YOUR_FOLDER_ID")

prompt = "Напиши короткое стихотворение о программировании."
text = client.generate_text(prompt)
print(text)

Асинхронная генерация текста

import asyncio
from yandex_neural_api.client import YandexNeuralAPIClient

async def generate_text_async():
    client = YandexNeuralAPIClient(iam_token="YOUR_IAM_TOKEN", folder_id="YOUR_FOLDER_ID")
    prompt = "Напиши краткое описание об искусственном интеллекте."
    text = await client.generate_text_async(prompt)
    print(text)

asyncio.run(generate_text_async())

Стриминговая генерация текста

Синхронно:

def callback(data):
    print(data, end='', flush=True)

client.generate_text(prompt="Расскажи интересный факт о Вселенной.", stream=True, callback=callback)

Асинхронно:

async def async_streaming():
    def callback(data):
        print(data, end='', flush=True)

    await client.generate_text_async(prompt="Опиши закат над морем.", stream=True, callback=callback)

asyncio.run(async_streaming())

Генерация изображений

import asyncio
from yandex_neural_api.client import YandexNeuralAPIClient

async def generate_image():
    client = YandexNeuralAPIClient(iam_token="YOUR_IAM_TOKEN", folder_id="YOUR_FOLDER_ID")
    prompt = "Нарисуй красивый пейзаж с горами и рекой."
    image_data = await client.generate_image_async(prompt)
    with open("image.png", "wb") as f:
        f.write(image_data)
    print("Изображение сохранено как image.png")

asyncio.run(generate_image())

Токенизация текста

text = "Привет, как у тебя дела?"
tokens = client.tokenize_text(text)
print(tokens)

Получение эмбеддингов

Для документов (text_type='doc'):

doc_text = "Машинное обучение - это область искусственного интеллекта."
embedding = client.get_text_embedding(doc_text, text_type='doc')
print(embedding)

Для запросов (text_type='query'):

query_text = "Что такое машинное обучение?"
embedding = client.get_text_embedding(query_text, text_type='query')
print(embedding)

Вычисление сходства между текстами:

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

# Исходные данные
doc_texts = [
    "Машинное обучение - это область искусственного интеллекта.",
    "Кошки любят играть с клубками ниток.",
    "Python - популярный язык программирования."
]
query_text = "Что такое машинное обучение?"

# Получение эмбеддингов
doc_embeddings = [client.get_text_embedding(doc, text_type='doc') for doc in doc_texts]
query_embedding = client.get_text_embedding(query_text, text_type='query')

# Преобразование в numpy массивы
doc_embeddings_np = np.array(doc_embeddings)
query_embedding_np = np.array(query_embedding)

# Вычисление косинусного сходства
distances = cdist([query_embedding_np], doc_embeddings_np, metric='cosine')
similarities = 1 - distances

# Поиск наиболее похожего документа
most_similar_index = np.argmax(similarities)
print(f"Наиболее похожий документ: {doc_texts[most_similar_index]}")

Настройка параметров

Вы можете изменять параметры генерации текста, изображений и эмбеддингов во время работы.

Обновление параметров генерации текста:

client.update_text_generation_params(llm_temperature=0.8, llm_max_tokens=1500)

Обновление параметров генерации изображений:

client.update_image_generation_params(image_mime_type='image/jpeg', image_width_ratio=16, image_height_ratio=9)

Обновление модели эмбеддинга:

client.update_embedding_model('text-search-query')

Логирование

Вы можете настроить уровень логирования при инициализации клиента:

import logging

client = YandexNeuralAPIClient(
    iam_token="YOUR_IAM_TOKEN",
    folder_id="YOUR_FOLDER_ID",
    log_level=logging.DEBUG
)

Уровни логирования:

  • logging.DEBUG: Подробная отладочная информация.
  • logging.INFO: Информационные сообщения (по умолчанию).
  • logging.WARNING: Предупреждения о потенциальных проблемах.
  • logging.ERROR: Ошибки, которые не препятствуют работе программы.
  • logging.CRITICAL: Критические ошибки, ведущие к завершению программы.

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

import asyncio
import logging
from yandex_neural_api.client import YandexNeuralAPIClient
import numpy as np
from scipy.spatial.distance import cdist
import json

def main():
    # Настройка логирования
    logging.basicConfig(level=logging.INFO)

    # Инициализация клиента
    client = YandexNeuralAPIClient(
        iam_token="YOUR_IAM_TOKEN",
        folder_id="YOUR_FOLDER_ID",
        model_type='pro',
        llm_temperature=0.7,
        llm_max_tokens=1000,
        log_level=logging.DEBUG
    )

    # Синхронная генерация текста
    print("Синхронная генерация текста:")
    prompt_text_sync = "Напиши короткое стихотворение о программировании."
    text_sync = client.generate_text(prompt_text_sync)
    print(text_sync)
    print("="*50)

    # Асинхронная генерация текста
    async def async_text_generation():
        print("Асинхронная генерация текста:")
        prompt_text_async = "Напиши краткое описание об искусственном интеллекте."
        text_async = await client.generate_text_async(prompt_text_async)
        print(text_async)
        print("="*50)
    asyncio.run(async_text_generation())

    # Синхронная стриминговая генерация текста
    print("Синхронная стриминговая генерация текста:")
    def sync_streaming_callback(data):
        try:
            json_data = json.loads(data)
            text = json_data['result']['alternatives'][0]['message']['text']
            print(text, end='', flush=True)
        except json.JSONDecodeError:
            pass  # Игнорируем некорректные части ответа
        except KeyError:
            pass  # Игнорируем неполные данные

    prompt_stream_sync = "Расскажи интересный факт о Вселенной."
    client.generate_text(prompt_stream_sync, stream=True, callback=sync_streaming_callback)
    print("\n" + "="*50)

    # Асинхронная стриминговая генерация текста
    async def async_streaming():
        print("Асинхронная стриминговая генерация текста:")
        def async_streaming_callback(data):
            try:
                json_data = json.loads(data)
                text = json_data['result']['alternatives'][0]['message']['text']
                print(text, end='', flush=True)
            except json.JSONDecodeError:
                pass
            except KeyError:
                pass

        prompt_stream_async = "Опиши закат над морем."
        await client.generate_text_async(prompt_stream_async, stream=True, callback=async_streaming_callback)
        print("\n" + "="*50)
    asyncio.run(async_streaming())

    # Токенизация текста
    print("Токенизация текста:")
    text_to_tokenize = "Привет, как у тебя дела?"
    tokenization_result = client.tokenize_text(text_to_tokenize)
    print(tokenization_result)
    print("="*50)

    # Получение эмбеддингов
    print("Получение эмбеддингов:")
    doc_texts = [
        "Машинное обучение - это область искусственного интеллекта.",
        "Кошки любят играть с клубками ниток.",
        "Python - это популярный язык программирования."
    ]
    query_text = "Что такое машинное обучение?"

    doc_embeddings = [client.get_text_embedding(text, text_type='doc') for text in doc_texts]
    query_embedding = client.get_text_embedding(query_text, text_type='query')

    doc_embeddings_np = np.array(doc_embeddings)
    query_embedding_np = np.array(query_embedding)

    distances = cdist([query_embedding_np], doc_embeddings_np, metric='cosine')
    similarities = 1 - distances

    most_similar_index = np.argmax(similarities)
    most_similar_doc = doc_texts[most_similar_index]
    similarity_score = similarities[0][most_similar_index]

    print(f"Поисковый запрос: {query_text}")
    print(f"Наиболее похожий документ: {most_similar_doc}")
    print(f"Коэффициент сходства: {similarity_score}")
    print("="*50)

    # Асинхронная генерация изображения
    async def async_image_generation():
        print("Асинхронная генерация изображения:")
        prompt_image = "Нарисуй красивый пейзаж с горами и рекой."
        image_data = await client.generate_image_async(prompt_image)
        with open("generated_image.png", "wb") as f:
            f.write(image_data)
        print("Изображение сохранено как generated_image.png")
    asyncio.run(async_image_generation())

if __name__ == "__main__":
    main()

Лицензия

Данный проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.


Примечание: Не забудьте заменить "YOUR_IAM_TOKEN" и "YOUR_FOLDER_ID" на ваши реальные значения. Получить их можно в консоли Yandex.Cloud. Убедитесь, что у вашего аккаунта есть необходимые права для использования API сервисов.


Контакты

Если у вас есть вопросы или предложения, пожалуйста, создайте issue в репозитории или свяжитесь со мной напрямую.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yandex_neural_api-0.0.2.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yandex_neural_api-0.0.2-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file yandex_neural_api-0.0.2.tar.gz.

File metadata

  • Download URL: yandex_neural_api-0.0.2.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.27.2

File hashes

Hashes for yandex_neural_api-0.0.2.tar.gz
Algorithm Hash digest
SHA256 9d0da33dc62f039a3c0e63a2bf4d057f9141943b5ef271fcad798aff1c58d7d1
MD5 b3d92dd73b08200c30b6f09a256ee7ca
BLAKE2b-256 94ef96109023f05d237f6af38360bae489618de7ad76406293b3f3a94fb26992

See more details on using hashes here.

File details

Details for the file yandex_neural_api-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for yandex_neural_api-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 077c35d92d5959ebb2034e1f77a030d95c70165f909e840f3be2053c9309a5e7
MD5 93778372f1f7a259bc343155fb456cc9
BLAKE2b-256 4c4e05082fae7c8d50ee3db114a78d965c1e55ef58952ee1cb663fcc2bb37b67

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page