Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Foundation Models
    • Все инструкции
    • Отключить логирование запросов
    • Получить API-ключ
    • Пакетная обработка данных
      • Создать простого ассистента
      • Создать ассистента с инструментом VectorStore
      • Создать ассистента для поиска с указанием метаданных файлов и индексов
      • Создать ассистента с инструментом WebSearch
      • Получить промежуточные результаты генерации ответа
      • Перефразировать запросы с помощью модели
  • Yandex Cloud ML SDK
  • Совместимость с OpenAI
  • Управление доступом
  • Правила тарификации
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений

В этой статье:

  • Перед началом работы
  • Создайте ассистента
  1. Пошаговые инструкции
  2. AI Assistant API
  3. Перефразировать запросы с помощью модели

Создать ассистента для RAG с перефразированием запросов пользователя

Статья создана
Yandex Cloud
Обновлена 19 августа 2025 г.
  • Перед началом работы
  • Создайте ассистента

В AI Assistant API вы можете подключить дополнительную модель перефразирования, чтобы точнее находить информацию из поисковых индексов. Перефразирование исправит ошибки и опечатки и поможет, если ответ требует больших объемов данных из индексов и сильно зависит от контекста переписки.

Перед началом работыПеред началом работы

Чтобы воспользоваться примерами:

SDK
  1. Создайте сервисный аккаунт и назначьте ему роли ai.assistants.editor и ai.languageModels.user.

  2. Получите и сохраните API-ключ сервисного аккаунта.

    В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.

  3. С помощью менеджера пакетов pip установите библиотеку ML SDK:

    pip install yandex-cloud-ml-sdk
    

Создайте ассистентаСоздайте ассистента

Этот пример основан на примере с информацией о турах и показывает, как создать ассистента с поисковым индексом и подключенной моделью перефразирования.

SDK
  1. Скачайте и распакуйте архив с примерами файлов, которые будут использоваться как дополнительный источник информации. В файлах содержатся рекламные тексты для туров на Бали и в Казахстан, сгенерированные YandexGPT Pro.

  2. Создайте файл rephraser.py и добавьте в него следующий код, указав идентификатор каталога и данные для аутентификации:

    #!/usr/bin/env python3
    
    from __future__ import annotations
    
    import pathlib
    
    from yandex_cloud_ml_sdk import YCloudML
    
    LABEL_KEY = 'yc-ml-sdk-example'
    PATH = pathlib.Path(__file__)
    NAME = f'example-{PATH.parent.name}-{PATH.name}'
    
    
    def local_path(path: str) -> pathlib.Path:
       return pathlib.Path(__file__).parent / path
    
    
    def get_search_index(sdk):
         # Функция для получения или создания объекта search_index
    
         for search_index in sdk.search_indexes.list():
             if search_index.labels and search_index.labels.get(LABEL_KEY) == NAME:
                 print(f'using {search_index=}')
                 break
         else:
             print('no search indexes found, creating new one')
             file = sdk.files.upload(
                 local_path('turkey_example.txt')
             )
             operation = sdk.search_indexes.create_deferred(file, labels={LABEL_KEY: NAME})
             search_index = operation.wait()
             print(f'new {search_index=}')
    
             file.delete()
    
         return search_index
    
    
    def delete_labeled_entities(iterator):
        # Функция очистки. Удаляет все объекты итератора с атрибутом .labels
    
        for entity in iterator:
           if entity.labels and entity.labels.get(LABEL_KEY) == NAME:
               print(f'deleting {entity.__class__.__name__} with id={entity.id!r}')
               entity.delete()
    
    def main() -> None:
        sdk = YCloudML(
           folder_id="<идентификатор_каталога>",
           auth="<API-ключ>",
        )
        sdk.setup_default_logging(log_level='WARNING')
    
        search_index = get_search_index(sdk)
        labels = {LABEL_KEY: NAME}
    
        # Инструмент с поисковым индексом
        tool = sdk.tools.search_index(search_index)
    
        # Инструмент перефразирования
        rephraser = sdk.tools.rephraser('rephraser', model_version='latest')
        tool_with_rephraser = sdk.tools.search_index(search_index, rephraser=rephraser)
    
        # Создаем два ассистента — с перефразированием и без него
        assistant_wo_rephraser = sdk.assistants.create('yandexgpt', labels=labels, tools=[tool])
        assistant_with_rephraser = sdk.assistants.create('yandexgpt', labels=labels, tools=[tool_with_rephraser])
    
        # Следующий код отправляет запросы с перефразированием и без него,
        # чтобы показать эффект перефразирования.
        # Вы можете использовать другие запросы.
        thread = sdk.threads.create(labels=labels)
    
        def run(query, rephrase: bool) -> None:
           assistant = assistant_with_rephraser if rephrase else assistant_wo_rephraser
    
           thread.write(query)
           run = assistant.run(thread)
           result = run.wait()
    
           print(f"Question: {query}")
           preposition = 'with' if rephrase else 'without'
           print(f"Answer {preposition} rephraser:\n    {result.text!r}")
           print()
    
        # Возьмем два корректных и два некорректных запроса:
        run('Куда yбежать?', rephrase=False)  # 1
        run('Гиде атттапыриццца?', rephrase=False)  # 2
        run('Где отдохнуть?', rephrase=False)  # 3
        run('Куда сбежать?', rephrase=False)  # 4
    
        # Первый и второй запросы нуждаются в перефразировании:
        run('Куда убежать?', rephrase=True)
        run('Гиде атттапыриццца?', rephrase=True)
    
        # Удалим все запросы и потоки,
        # но оставим поисковый индекс, потому что его создание — медленная операция.
        # Созданный поисковый индекс может быть использован повторно.
        delete_labeled_entities(sdk.assistants.list())
        delete_labeled_entities(sdk.threads.list())
    
    
    if __name__ == '__main__':
       main()
    

    Где:

    • <идентификатор_каталога> — идентификатор каталога, в котором создан сервисный аккаунт.
    • <API-ключ> — API-ключ сервисного аккаунта для аутентификации в API.
  3. Выполните созданный файл:

    python3 rephraser.py
    
    Результат
    Question: Куда yбежать?
    Answer without rephraser:
        'Вопрос «куда убежать?» может иметь разные интерпретации в зависимости от контекста. Если вы ищете место для отдыха или переезда, то выбор может зависеть от ваших предпочтений, интересов и финансовых возможностей. Вот несколько идей:\n\n1. **Природные места:** если вы любите природу, рассмотрите возможность посещения национальных парков, заповедников или горных курортов.\n\n2. **Исторические города:** если вас привлекает история и культура, исследуйте города с богатым историческим наследием, такие как Рим, Париж, Стамбул и другие.\n\n3. **Пляжные направления:** если вы предпочитаете отдых на море, рассмотрите пляжные курорты в различных странах, таких как Таиланд, Испания, Греция и другие.\n\n4. **Творческие места:** если вы творческая личность, возможно, вам понравятся города с активной культурной жизнью, такие как Нью-Йорк, Лондон, Берлин и другие.\n\n5. **Экзотические направления:** если вы ищете что-то необычное и экзотическое, рассмотрите возможность посещения стран с уникальной культурой и природой, таких как Индия, Перу, Индонезия и другие.\n\nВажно помнить, что выбор места для «побега» зависит от ваших личных предпочтений и интересов. Перед принятием решения о поездке или переезде рекомендуется провести исследование, изучить информацию о месте, его культуре, безопасности и других аспектах.\n\nЕсли ваш вопрос имеет другой контекст, пожалуйста, уточните его, и я постараюсь помочь вам более конкретно.'
    
    Question: Гиде атттапыриццца?
    Answer without rephraser:
        'Похоже, что ваш вопрос написан с ошибкой или опечаткой. Пожалуйста, переформулируйте его, и я постараюсь вам помочь.'
    
    Question: Где отдохнуть?
    Answer without rephraser:
        'Отдохнуть можно на Бали — острове в Индонезии. Этот остров славится своими прекрасными пляжами, уникальной культурой и гостеприимными жителями. Здесь вы сможете насладиться красотой природы, попробовать местную кухню и познакомиться с новыми людьми.'
    
    Question: Куда сбежать?
    Answer without rephraser:
        'Вопрос «куда сбежать?» может иметь разные ответы в зависимости от ваших целей и предпочтений. Вот несколько идей:\n\n1. **Загородный отдых:** если вы хотите сбежать от городской суеты, рассмотрите возможность отдыха в загородном доме, на даче или в кемпинге. Это может быть отличным способом насладиться природой и свежим воздухом.\n\n2. **Путешествия по России:** Россия — большая страна с разнообразными регионами, каждый из которых имеет свои уникальные достопримечательности и природные красоты. Вы можете исследовать исторические города, такие как Санкт-Петербург или Казань, или отправиться в путешествие по Золотому кольцу России.\n\n3. **Международные путешествия:** если вы ищете что-то более экзотическое, рассмотрите возможность поездки в другую страну. Выберите место, которое соответствует вашим интересам, будь то пляжный отдых, горные лыжи или культурные достопримечательности.\n\n4. **Отдых на природе:** если вы любите активный отдых, рассмотрите возможность похода, рыбалки или пикника на природе. Это может быть отличным способом провести время на свежем воздухе и насладиться красотой природы.\n\n5. **Санаторий или курорт:** для тех, кто ищет спокойный и расслабляющий отдых, санаторий или курорт могут быть хорошим выбором. Здесь вы сможете отдохнуть, поправить здоровье и насладиться спа-процедурами.\n\nВажно помнить, что выбор места зависит от ваших индивидуальных предпочтений и целей. Перед принятием решения проведите исследование, изучите информацию о месте, которое вас интересует, и убедитесь, что оно соответствует вашим ожиданиям.'
    
    Question: Куда убежать?
    Answer with rephraser:
        'Вопрос «куда убежать?» может подразумевать поиск места для временного уединения или долгосрочного переезда. Выбор зависит от ваших целей, интересов и возможностей. Вот несколько идей:\n\n1. **Тихие уголки природы:** если вы ищете уединение с природой, рассмотрите возможность посещения национальных парков, заповедников или уединённых островов. Это может быть отличным местом для отдыха от городской суеты и восстановления сил.\n\n2. **Исторические города:** если вас привлекает история и культура, исследуйте города с богатым наследием, такие как Санкт-Петербург, Прага, Рим или Токио. Здесь вы можете погрузиться в атмосферу прошлого, посетить музеи, замки и другие исторические достопримечательности.\n\n3. **Пляжный отдых:** если вы предпочитаете пляжный отдых, рассмотрите тропические острова или побережья с красивыми пляжами и тёплым климатом. Примеры включают Сейшелы, Гавайи, Мальдивы и другие.\n\n4. **Активный отдых:** для любителей активного отдыха есть множество вариантов, таких как горные лыжи, сёрфинг, рафтинг и другие виды спорта. Выберите место, которое предлагает возможности для вашего любимого вида активности.\n\n5. **Переезд в другую страну:** если вы рассматриваете возможность долгосрочного переезда, изучите различные страны, которые предлагают хорошие условия для жизни, работы и учёбы. Учитывайте факторы, такие как климат, стоимость жизни, безопасность и культурные особенности.\n\nВажно помнить, что выбор места зависит от ваших индивидуальных предпочтений и целей. Перед принятием решения проведите исследование, изучите информацию о месте, которое вас интересует, и убедитесь, что оно соответствует вашим ожиданиям.'
    
    Question: Гиде атттапыриццца?
    Answer with rephraser:
        'Похоже, что ваш вопрос написан с ошибкой или опечаткой. Пожалуйста, переформулируйте его, и я постараюсь вам помочь. Если вы имели в виду «где отдохнуть», то я могу предложить несколько идей:\n\n* **Природные заповедники и национальные парки** — для любителей природы и активного отдыха.\n* **Исторические города** — для тех, кто интересуется культурой и историей.\n* **Пляжный отдых** — для тех, кто хочет расслабиться на солнце и насладиться морским воздухом.\n* **Горнолыжные курорты** — для любителей зимних видов спорта.\n\nВыбор места для отдыха зависит от ваших интересов и предпочтений.'
    

    В результате после перефразирования модели удалось ответить на вопрос Гиде атттапыриццца?, а вопрос Куда убежать? получил более подробный ответ.

Была ли статья полезна?

Предыдущая
Получить промежуточные результаты генерации ответа
Следующая
О сервисе Yandex Foundation Models
Проект Яндекса
© 2025 ООО «Яндекс.Облако»