User Tools

Site Tools


yandex_ai

This is an old revision of the document!


Yandex AI

(venv1) ~/ai$ pip install yandex-ai-studio-sdk

(venv1) ~/ai$  export API_KEY="y0_AgAAA11AA5aXjoAATuwQAAAADqIwuHRJ5znNT2QAm6HmHHbKjtghcsbgk"

(venv1) ~/ai$ export FOLDER_ID=b1gg4j6ru4esprat3uu7

(venv1) root@server:~/ai# cat app.py
import os
from yandex_ai_studio_sdk import AIStudio

sdk = AIStudio(
    folder_id=os.getenv("FOLDER_ID"),
    auth=os.getenv("API_KEY")
)


#model = sdk.models.completions("aliceai-llm")
model = sdk.models.completions("yandexgpt")
model = model.configure(temperature=0.8, max_tokens=1500)
result = model.run("Придумай 3 необычные идеи для стартапа в сфере путешествий.")

for alternative in result:
    print(alternative.text)
(venv1) root@server:~/ai# cat agent_rand_hello.py
import warnings
warnings.filterwarnings('ignore', category=UserWarning, module='yandex_ai_studio_sdk._auth')

import os
import sys
import random
from yandex_ai_studio_sdk import AIStudio

sdk = AIStudio(
    folder_id=os.getenv("FOLDER_ID"),
    auth=os.getenv("API_KEY")
)

# 2. Локальная Python-функция
def get_random_lucky_number() -> int:
    return random.randint(1, 100)

# Регистрируем инструмент через метод sdk.tools.function
lucky_number_tool = sdk.tools.function(
    parameters={
        "type": "object",
        "properties": {}
    },
    name="get_random_lucky_number",
    description="Используй эту функцию, когда пользователь просит назвать его счастливое число."
)

# 3. Инициализируем модель через chat.completions
model = sdk.chat.completions("yandexgpt").configure(
    temperature=0.3,
    tools=[lucky_number_tool]
)

# Начальный запрос пользователя
messages = [
    {"role": "user", "content": "Привет! Назови мое счастливое число на сегодня и пожелай удачи разнообразно."}
]
#messages = [
#    {"role": "user", "content": "Привет! Пожелай удачи разнообразно."}
#]

print("Отправка первого запроса агенту...")
response = model.run(messages)

# Извлекаем первый вариант ответа из кортежа
choice = response.choices[0]

if hasattr(choice, 'tool_calls') and choice.tool_calls:
    print(f"-> Агент запросил вызов инструмента.")

    formatted_tool_calls = []
    for call in choice.tool_calls:
        if call.function.name == "get_random_lucky_number":
            tool_result = get_random_lucky_number()
            print(f"-> Результат локальной функции: {tool_result}")

            # Простой подход: добавляем результат как ответ пользователя
            messages.append({
                "role": "user",
                "content": f"Результат выполнения функции get_random_lucky_number: {tool_result}"
            })

            # Отправляем обновленную историю обратно модели
            print("Отправка результата выполнения функции обратно агенту...")

            # В run() передаем только messages, tools уже настроены
            final_response = model.run(messages=messages)

            print("\nИтоговый ответ AI агента:")
            print(final_response.choices[0].text)
else:
    print("\nОтвет модели:")
    print(choice.text)
(venv1) root@server:~/ai# cat agent_email_or_cal.py
import os
import sys
#import random
import re
import json
from yandex_ai_studio_sdk import AIStudio

sdk = AIStudio(
    folder_id=os.getenv("FOLDER_ID"),
    auth=os.getenv("API_KEY")
)

# Функция для интеграции с календарем
def add_to_calendar(task_title: str):
    """
    Ваша кастомная функция для добавления события в календарь.
    """
    print(f"[Вызов функции]: Успешно добавлено в календарь: '{task_title}'")


# Примеры для тестирования (раскомментируйте нужный для проверки):
user_request = "Привет! Слушай, отправь пожалуйста письмо Ивану с отчетом."
#user_request = "Напомни мне завтра в 15:00 созвониться с коллегами по проекту."

# Расширяем системный промт для обработки двух типов команд
system_prompt = (
    "Ты — ассистент, который анализирует команды пользователя и классифицирует их.\n"
    "Определи, что просит сделать пользователь. Ответь строго в формате JSON.\n"
    "Схема ответа JSON должна содержать следующие поля:\n"
    "- 'intent': строка, может принимать значения: 'send_email', 'add_calendar' или 'unknown'.\n"
    "- 'recipient_name': имя получателя (строка), если intent == 'send_email', иначе null.\n"
    "- 'calendar_task': текст напоминания (строка), если intent == 'add_calendar', иначе null."
)

messages = [
    {"role": "system", "text": system_prompt},
    {"role": "user", "text": user_request}
]

# Вызываем модель YandexGPT
model = sdk.chat.completions("yandexgpt").configure(
    temperature=0.3
)
response = model.run(messages)

match = re.search(r"\{.*\}", response.choices[0].text, re.DOTALL)
result_text = match.group(0)

#print(result_text)
#sys.exit()

try:
    # Парсим JSON-ответ от модели
    data = json.loads(result_text)
    intent = data.get("intent")

    # Сценарий 1: Отправка письма
    if intent == "send_email":
        recipient = data.get("recipient_name")
        if recipient:
            print(f"Обнаружена команда отправки письма. Получатель: {recipient}")
        else:
            print("Обнаружена команда отправки письма, но имя получателя не указано.")

    # Сценарий 2: Добавление в календарь
    elif intent == "add_calendar":
        task = data.get("calendar_task")
        if task:
            print("Обнаружена команда календаря. Вызываю функцию...")
            add_to_calendar(task)
        else:
            print("Обнаружена команда календаря, но текст напоминания пуст.")

    # Сценарий 3: Команда не распознана
    else:
        print("Команда не распознана или не требует автоматических действий.")

except json.JSONDecodeError:
    print("Ошибка парсинга ответа модели:", result_text)
yandex_ai.1782731560.txt.gz · Last modified: 2026/06/29 14:12 by val