This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
yandex_ai [2026/06/29 14:12] val |
yandex_ai [2026/09/21 07:31] (current) val [Черновик] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Yandex AI ====== | ====== Yandex AI ====== | ||
| - | * [[https://aistudio.yandex.ru/docs/ru/ai-studio/quickstart/|Как начать работать с Yandex AI Studio]] | + | * [[https://aistudio.yandex.ru/docs/ru/ai-studio/quickstart/|Как начать работать с Yandex AI Studio]] (выбираем AI SDK) |
| + | |||
| + | * [[Yandex SpeechKit]], AI Studio -> Создать API-ключ | ||
| <code> | <code> | ||
| - | (venv1) ~/ai$ pip install yandex-ai-studio-sdk | + | (venv1) ~/ai$ export YANDEX_API_KEY=AQVN3_tpBw9JigLSI1107j0xhkgREwzwD2VCZx5FzA |
| - | (venv1) ~/ai$ export API_KEY="y0_AgAAA11AA5aXjoAATuwQAAAADqIwuHRJ5znNT2QAm6HmHHbKjtghcsbgk" | + | (venv1) ~/ai$ export YANDEX_FOLDER_ID=b1gg4j6ru4esprat3uu7 |
| + | </code> | ||
| - | (venv1) ~/ai$ export FOLDER_ID=b1gg4j6ru4esprat3uu7 | + | * [[Язык программирования Python#request_to_llm.py]] |
| + | * [[Язык программирования Python#openai_request_to_llm.py]] | ||
| - | (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) | ||
| - | </code><code> | ||
| - | (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) | ||
| - | </code><code> | ||
| - | (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) | ||
| - | |||
| - | </code> | ||