User Tools

Site Tools


yandex_ai

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
yandex_ai [2026/06/29 14:12]
val
yandex_ai [2026/07/17 07:54] (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) 
 + 
 +  * [[Язык программирования Python]]
  
 <​code>​ <​code>​
 (venv1) ~/ai$ pip install yandex-ai-studio-sdk (venv1) ~/ai$ pip install yandex-ai-studio-sdk
  
-(venv1) ~/ai$  export ​API_KEY="​y0_AgAAA11AA5aXjoAATuwQAAAADqIwuHRJ5znNT2QAm6HmHHbKjtghcsbgk"​+(venv1) ~/ai$  export ​YANDEX_API_KEY=AQVN3_tpBw9JigLSI1107j0xhkgREwzwD2VCZx5FzA
  
-(venv1) ~/ai$ export ​FOLDER_ID=b1gg4j6ru4esprat3uu7+(venv1) ~/ai$ export ​YANDEX_FOLDER_ID=b1gg4j6ru4esprat3uu7 
 +</​code>​
  
-(venv1) root@server:​~/​aicat app.py +  * [[Язык программирования Python#request_to_agent.py]]
-import os +
-from yandex_ai_studio_sdk import AIStudio+
  
-sdk AIStudio( +===== Черновик ===== 
-    folder_id=os.getenv("​FOLDER_ID"​),​ +<​code>​
-    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 (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 os
 import sys import sys
Line 38: Line 24:
  
 sdk = AIStudio( sdk = AIStudio(
-    folder_id=os.getenv("​FOLDER_ID"), +    folder_id=os.getenv("​YANDEX_FOLDER_ID"), 
-    auth=os.getenv("​API_KEY")+    auth=os.getenv("​YANDEX_API_KEY")
 ) )
  
Line 52: Line 38:
         "​properties":​ {}         "​properties":​ {}
     },     },
-    name="get_random_lucky_number",+    name="lucky_number",
     description="​Используй эту функцию,​ когда пользователь просит назвать его счастливое число."​     description="​Используй эту функцию,​ когда пользователь просит назвать его счастливое число."​
 ) )
Line 81: Line 67:
     formatted_tool_calls = []     formatted_tool_calls = []
     for call in choice.tool_calls:​     for call in choice.tool_calls:​
-        if call.function.name == "get_random_lucky_number":+        if call.function.name == "lucky_number":
             tool_result = get_random_lucky_number()             tool_result = get_random_lucky_number()
             print(f"​->​ Результат локальной функции:​ {tool_result}"​)             print(f"​->​ Результат локальной функции:​ {tool_result}"​)
Line 88: Line 74:
             messages.append({             messages.append({
                 "​role":​ "​user",​                 "​role":​ "​user",​
-                "​content":​ f"​Результат выполнения функции ​get_random_lucky_number: {tool_result}"​+                "​content":​ f"​Результат выполнения функции ​lucky_number: {tool_result}"​
             })             })
  
Line 112: Line 98:
  
 sdk = AIStudio( sdk = AIStudio(
-    folder_id=os.getenv("​FOLDER_ID"), +    folder_id=os.getenv("​YANDEX_FOLDER_ID"), 
-    auth=os.getenv("​API_KEY")+    auth=os.getenv("​YANDEX_API_KEY")
 ) )
  
Line 183: Line 169:
 except json.JSONDecodeError:​ except json.JSONDecodeError:​
     print("​Ошибка парсинга ответа модели:",​ result_text)     print("​Ошибка парсинга ответа модели:",​ result_text)
 +</​code><​code>​
 +(venv1) root@server:​~/​ai#​ cat agent_email_or_cal_2.py
 +import os
 +import sys
 +import re
 +import json
 +from yandex_ai_studio_sdk import AIStudio
 +
 +sdk = AIStudio(
 +    folder_id=os.getenv("​YANDEX_FOLDER_ID"​),​
 +    auth=os.getenv("​YANDEX_API_KEY"​)
 +)
 +
 +# Функция-заглушка для отправки письма
 +def send_email(recipient_name:​ str, subject: str, body: str):
 +    """​
 +    Заглушка для отправки письма.
 +    В реальном проекте здесь был бы код для отправки через SMTP или API почтового сервиса.
 +    """​
 +    print("​\n"​ + "​="​*50)
 +    print(f"​[ОТПРАВКА ПИСЬМА]"​)
 +    print(f"​Получатель:​ {recipient_name}"​)
 +    print(f"​Тема:​ {subject}"​)
 +    print(f"​Тело письма:​\n{body}"​)
 +    print("​="​*50 + "​\n"​)
 +    print("​[Заглушка] Письмо успешно отправлено (симуляция)"​)
 +
 +# Функция для интеграции с календарем
 +def add_to_calendar(task_title:​ str):
 +    """​
 +    Ваша кастомная функция для добавления события в календарь.
 +    """​
 +    print(f"​[Вызов функции]:​ Успешно добавлено в календарь:​ '​{task_title}'"​)
 +
 +# Функция для определения интента (что хочет пользователь)
 +def detect_intent(user_request:​ str):
 +    """​
 +    Первый этап: определяем намерение пользователя.
 +    """​
 +    system_prompt_intent = (
 +        "Ты — ассистент,​ который анализирует команды пользователя и классифицирует их.\n"​
 +        "​Определи,​ что просит сделать пользователь. Ответь строго в формате JSON.\n"​
 +        "​Схема ответа JSON должна содержать только одно поле:​\n"​
 +        "- '​intent':​ строка,​ может принимать значения:​ '​send_email',​ '​add_calendar'​ или '​unknown'​.\n"​
 +        "​\nПримеры:​\n"​
 +        "​Запрос:​ '​Отправь письмо Ивану с отчетом'​ -> {\"​intent\":​ \"​send_email\"​}\n"​
 +        "​Запрос:​ '​Напомни мне завтра в 15:00 созвониться'​ -> {\"​intent\":​ \"​add_calendar\"​}\n"​
 +        "​Запрос:​ '​Какая сегодня погода?'​ -> {\"​intent\":​ \"​unknown\"​}"​
 +    )
 +
 +    messages = [
 +        {"​role":​ "​system",​ "​text":​ system_prompt_intent},​
 +        {"​role":​ "​user",​ "​text":​ user_request}
 +    ]
 +
 +    model = sdk.chat.completions("​yandexgpt"​).configure(temperature=0.1)
 +    response = model.run(messages)
 +
 +    match = re.search(r"​\{.*\}",​ response.choices[0].text,​ re.DOTALL)
 +    if match:
 +        try:
 +            data = json.loads(match.group(0))
 +            return data.get("​intent",​ "​unknown"​)
 +        except json.JSONDecodeError:​
 +            return "​unknown"​
 +    return "​unknown"​
 +
 +# Функция для обработки отправки письма
 +def process_email(user_request:​ str):
 +    """​
 +    Второй этап: если определили,​ что нужно отправить письмо,​
 +    запрашиваем у модели составление темы и тела.
 +    """​
 +    system_prompt_email = (
 +        "Ты — ассистент,​ который помогает составлять деловые письма.\n"​
 +        "​Проанализируй запрос пользователя и составь письмо.\n"​
 +        "​Ответь строго в формате JSON со следующими полями:​\n"​
 +        "- '​recipient_name':​ имя получателя (строка). Извлеки из запроса.\n"​
 +        "- '​subject':​ тема письма (строка). Составь краткую и понятную тему.\n"​
 +        "- '​body':​ тело письма (строка). Напиши вежливое,​ содержательное письмо.\n"​
 +        "​\nПравила:​\n"​
 +        "- Тема должна быть краткой и отражать суть письма (максимум 5-7 слов)\n"​
 +        "- Тело письма должно быть вежливым,​ структурированным и соответствовать запросу\n"​
 +        "- Используй стандартный деловой тон\n"​
 +        "- Если в запросе не указано имя получателя,​ используй '​Уважаемый коллега'​\n"​
 +        "​\nПример:​\n"​
 +        "​Запрос:​ '​Отправь Ивану отчет по продажам за май'​\n"​
 +        "​Ответ:​ {\"​recipient_name\":​ \"​Иван\",​ \"​subject\":​ \"​Отчет по продажам за май\",​ \"​body\":​ \"​Здравствуйте,​ Иван!\\n\\nНаправляю вам отчет по продажам за май месяц. В отчете вы найдете детальную информацию по каждому региону и сравнительный анализ с прошлым месяцем.\\n\\nС уважением,​\\nАссистент\"​}"​
 +    )
 +
 +    messages = [
 +        {"​role":​ "​system",​ "​text":​ system_prompt_email},​
 +        {"​role":​ "​user",​ "​text":​ user_request}
 +    ]
 +
 +    model = sdk.chat.completions("​yandexgpt"​).configure(temperature=0.3)
 +    response = model.run(messages)
 +
 +    match = re.search(r"​\{.*\}",​ response.choices[0].text,​ re.DOTALL)
 +    if match:
 +        try:
 +            data = json.loads(match.group(0))
 +            return data
 +        except json.JSONDecodeError:​
 +            return None
 +    return None
 +
 +# Функция для обработки добавления в календарь
 +def process_calendar(user_request:​ str):
 +    """​
 +    Второй этап: если определили,​ что нужно добавить в календарь,​
 +    запрашиваем у модели составление напоминания.
 +    """​
 +    system_prompt_calendar = (
 +        "Ты — ассистент,​ который помогает создавать напоминания для календаря.\n"​
 +        "​Проанализируй запрос пользователя и составь четкое напоминание.\n"​
 +        "​Ответь строго в формате JSON с одним полем:​\n"​
 +        "- '​calendar_task':​ текст напоминания (строка). Составь конкретное,​ понятное описание события.\n"​
 +        "​\nПравила:​\n"​
 +        "- Напоминание должно быть четким и конкретным\n"​
 +        "- Включай дату и время, если они указаны в запросе\n"​
 +        "- Формулируй как действие,​ которое нужно выполнить\n"​
 +        "​\nПример:​\n"​
 +        "​Запрос:​ '​Напомни мне завтра в 15:00 созвониться с коллегами по проекту'​\n"​
 +        "​Ответ:​ {\"​calendar_task\":​ \"​Завтра в 15:00 созвониться с коллегами по проекту\"​}"​
 +    )
 +
 +    messages = [
 +        {"​role":​ "​system",​ "​text":​ system_prompt_calendar},​
 +        {"​role":​ "​user",​ "​text":​ user_request}
 +    ]
 +
 +    model = sdk.chat.completions("​yandexgpt"​).configure(temperature=0.2)
 +    response = model.run(messages)
 +
 +    match = re.search(r"​\{.*\}",​ response.choices[0].text,​ re.DOTALL)
 +    if match:
 +        try:
 +            data = json.loads(match.group(0))
 +            return data
 +        except json.JSONDecodeError:​
 +            return None
 +    return None
 +
 +# Основная логика
 +def main():
 +    # Примеры для тестирования
 +    #​user_request = "​Привет! Слушай,​ отправь пожалуйста письмо Ивану с отчетом по продажам за май."​
 +    user_request = "​Напомни мне завтра в двенадцать созвониться с коллегами по проекту."​
 +
 +    print(f"​Запрос пользователя:​ {user_request}\n"​)
 +    print("​Обработка запроса...\n"​)
 +
 +    # Шаг 1: Определяем намерение
 +    intent = detect_intent(user_request)
 +    print(f"​Определенное намерение:​ {intent}"​)
 +
 +    # Шаг 2: Обрабатываем в зависимости от намерения
 +    if intent == "​send_email":​
 +        print("​\nСоставляю письмо..."​)
 +        email_data = process_email(user_request)
 +
 +        if email_data:
 +            recipient = email_data.get("​recipient_name"​)
 +            subject = email_data.get("​subject"​)
 +            body = email_data.get("​body"​)
 +
 +            if subject and body:
 +                print(f"​✓ Письмо составлено успешно"​)
 +                print(f" ​ Получатель:​ {recipient}"​)
 +                print(f" ​ Тема: {subject}"​)
 +                # Отправляем письмо
 +                send_email(recipient,​ subject, body)
 +            else:
 +                print("​✗ Не удалось составить письмо:​ недостаточно данных"​)
 +        else:
 +            print("​✗ Ошибка при составлении письма"​)
 +
 +    elif intent == "​add_calendar":​
 +        print("​\nСоставляю напоминание..."​)
 +        calendar_data = process_calendar(user_request)
 +
 +        if calendar_data:​
 +            task = calendar_data.get("​calendar_task"​)
 +            if task:
 +                print(f"​✓ Напоминание составлено:​ {task}"​)
 +                add_to_calendar(task)
 +            else:
 +                print("​✗ Не удалось составить напоминание"​)
 +        else:
 +            print("​✗ Ошибка при составлении напоминания"​)
 +    else:
 +        print("​\nКоманда не распознана. Я не могу обработать этот запрос."​)
  
 +if __name__ == "​__main__":​
 +    main()
 </​code>​ </​code>​
yandex_ai.1782731560.txt.gz · Last modified: 2026/06/29 14:12 by val