Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Реализация AI-ассистента с поиском по PDF-файлам со сложным форматированием

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

  • Перед началом работы
  • Необходимые платные ресурсы
  • Создайте AI-ассистента и протестируйте его работу
  • Создайте AI-ассистента с текстовым поисковым индексом
  • Создайте AI-ассистента с гибридным поисковым индексом
  • Усовершенствуйте ассистента
  1. Машинное обучение и искусственный интеллект
  2. Использование генеративных нейросетей Yandex Foundation Models
  3. Реализация AI-ассистента с поиском по PDF-файлам со сложным форматированием

Создать AI-ассистента с поиском по PDF-файлам со сложным форматированием

Статья создана
Yandex Cloud
Обновлена 18 марта 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Создайте AI-ассистента и протестируйте его работу
    • Создайте AI-ассистента с текстовым поисковым индексом
    • Создайте AI-ассистента с гибридным поисковым индексом
    • Усовершенствуйте ассистента

Функциональность AI Assistant API находится на стадии Preview.

В данной инструкции приведен пример создания AI-ассистента, который выполняет поиск по информации в источнике, содержащем сложное форматирование и табличные данные, и анализирует полученные данные с помощью модели генерации текста YandexGPT Pro RC.

В качестве примера исходного файла со сложным форматированием приведен файл в формате PDF. Исходный файл будет преобразован в формат Markdown. Многие модели обучаются на данных в формате Markdown и лучше всего работают с ним, поэтому файлы этого формата эффективнее всего использовать в качестве источника для поискового индекса. Поисковые индексы, которые вы создадите из файла-источника, будут использовать два варианта поиска — текстовый и гибридный.

Обращаться к AI Assistant API и Text Generation API вы будете через Yandex Cloud ML SDK для Python.

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

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

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

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

  3. Установите Python версии 3.10 или 3.11.

  4. Установите утилиту Python venv для создания изолированных виртуальных окружений в Python.

  5. Создайте и войдите в новое виртуальное окружение Python:

    python3 -m venv new-env
    source new-env/bin/activate
    
  6. С помощью менеджера пакетов pip установите библиотеку docling для преобразования документов из формата PDF в формат Markdown:

    pip install docling
    
  7. Установите библиотеку Yandex Cloud ML SDK для работы с инструментами Yandex Foundation Models:

    pip install yandex-cloud-ml-sdk
    
  8. Скачайте файл assistant-example.pdf с документом, который будет использоваться в качестве источника информации для AI-ассистента, и преобразуйте его в формат Markdown с помощью установленной ранее библиотеки docling:

    1. Создайте файл convert.py, содержащий следующий код:

      from docling.document_converter import DocumentConverter
      
      converter = DocumentConverter()
      result = converter.convert("assistant-example.pdf")
      content = result.document.export_to_markdown()
      with open("assistant-example.md", "wt") as f:
         f.write(content)
      
    2. Выполните файл convert.py:

      python3 convert.py
      

      В результате в текущей директории будет сохранен файл assistant-example.md, содержащий контент из исходного PDF-файла в формате Markdown.

Необходимые платные ресурсы

В стоимость использования AI-ассистента входит плата за генерацию текста (см. тарифы Yandex Foundation Models).

Создайте AI-ассистента и протестируйте его работу

Вы создадите поисковый индекс, источником для которого будет служить файл в формате Markdown. Затем вы зададите созданному ассистенту несколько вопросов, основанных на источнике информации:

Создайте AI-ассистента с текстовым поисковым индексом

  1. Создайте файл assistant-text.py, содержащий следующий код:

    from yandex_cloud_ml_sdk import YCloudML
    from yandex_cloud_ml_sdk.search_indexes import (
        HybridSearchIndexType,
        TextSearchIndexType,
        StaticIndexChunkingStrategy,
        ReciprocalRankFusionIndexCombinationStrategy,
    )
    
    queries = [
        "Какие сервисы входят в Райдтех?",
        "Какая рентабельность скорректированного показателя EBITDA у сервисов объявлений?",
        "На сколько млрд рублей выдал Яндекс займов за 9 месяцев до 30 сентября 2024?",
    ]
    
    
    def main():
        sdk = YCloudML(
            folder_id="<идентификатор_каталога>",
            auth="<API-ключ>",
        )
    
        file = sdk.files.upload("<путь_к_файлу>")
        operation = sdk.search_indexes.create_deferred(
            [file], index_type=TextSearchIndexType()
        )
        text_index = operation.wait()
        text_tool = sdk.tools.search_index(text_index)
        model = sdk.models.completions("yandexgpt", model_version="rc")
        assistant = sdk.assistants.create(model, tools=[text_tool])
        text_index_thread = sdk.threads.create()
    
        for query in queries:
            text_index_thread.write(query)
            print(query)
            run = assistant.run(text_index_thread)
            result = run.wait().message
            for part in result.parts:
                print(part)
            print("\n")
    
    
    if __name__ == "__main__":
        main()
    

    Где:

    • folder_id — идентификатор каталога, в котором вы создали сервисный аккаунт.
    • auth — созданный ранее API-ключ сервисного аккаунта. API-ключ используется для аутентификации в API Yandex Cloud. Подробнее о способах аутентификации в Yandex Cloud ML SDK см. в разделе Аутентификация.
    • <путь_к_файлу> — путь к файлу assistant-example.md с исходными данными для поискового индекса.
  2. Выполните файл assistant-text.py, чтобы создать ассистента и получить от него ответы на вопросы:

    python3 assistant-text.py
    

    Результат:

    Какие сервисы входят в Райдтех?
    В Райдтех входят:
    * сервис онлайн-заказа такси;
    * сервис каршеринга Яндекс Драйв;
    * сервис аренды самокатов;
    * другие перспективные сервисы.
    
    Какая рентабельность скорректированного показателя EBITDA у сервисов объявлений?
    Рентабельность скорректированного показателя EBITDA у сервисов объявлений составляет 51,3%.
    
    На сколько млрд рублей выдал Яндекс займов за 9 месяцев до 30 сентября 2024?
    В предоставленном контексте нет информации о том, сколько миллиардов рублей Яндекс выдал займов за 9 месяцев до 30 сентября 2024 года.
    

    Как видно из результата, текстовый поиск справился только с первым, самым простым вопросом. На второй вопрос ответ неверный, а на третий вопрос ответ совсем не представлен.

Создайте AI-ассистента с гибридным поисковым индексом

  1. Создайте файл assistant-hybrid.py, содержащий следующий код:

    from yandex_cloud_ml_sdk import YCloudML
    from yandex_cloud_ml_sdk.search_indexes import (
        HybridSearchIndexType,
        TextSearchIndexType,
        StaticIndexChunkingStrategy,
        ReciprocalRankFusionIndexCombinationStrategy,
    )
    
    queries = [
        "Какие сервисы входят в Райдтех?",
        "Какая рентабельность скорректированного показателя EBITDA у сервисов объявлений?",
        "На сколько млрд рублей выдал Яндекс займов за 9 месяцев до 30 сентября 2024?",
    ]
    
    
    def main():
        sdk = YCloudML(
            folder_id="<идентификатор_каталога>",
            auth="<API-ключ>",
        )
    
        file = sdk.files.upload("<путь_к_файлу>")
        operation = sdk.search_indexes.create_deferred(
            [file],
            index_type=HybridSearchIndexType(
                chunking_strategy=StaticIndexChunkingStrategy(
                    max_chunk_size_tokens=512,
                    chunk_overlap_tokens=256,
                ),
                combination_strategy=ReciprocalRankFusionIndexCombinationStrategy(),
            ),
        )
        hybrid_index = operation.wait()
        hybrid_tool = sdk.tools.search_index(hybrid_index)
        model = sdk.models.completions("yandexgpt", model_version="rc")
        assistant = sdk.assistants.create(model, tools=[hybrid_tool])
        hybrid_index_thread = sdk.threads.create()
    
        for query in queries:
            hybrid_index_thread.write(query)
            print(query)
            run = assistant.run(hybrid_index_thread)
            result = run.wait().message
            for part in result.parts:
                print(part)
            print("\n")
    
    
    if __name__ == "__main__":
        main()
    

    Где:

    • folder_id — идентификатор каталога, в котором вы создали сервисный аккаунт.
    • auth — созданный ранее API-ключ сервисного аккаунта. API-ключ используется для аутентификации в API Yandex Cloud. Подробнее о способах аутентификации в Yandex Cloud ML SDK см. в разделе Аутентификация.
    • <путь_к_файлу> — путь к файлу assistant-example.md с исходными данными для поискового индекса.
  2. Выполните файл assistant-hybrid.py, чтобы создать ассистента и получить от него ответы на вопросы:

    python3 assistant-hybrid.py
    

    Результат:

    В Райдтех входят:
    * сервис онлайн-заказа такси и дистрибуция таких технологий за рубежом;
    * сервис каршеринга Яндекс Драйв;
    * сервис аренды самокатов;
    * другие перспективные сервисы.
    
    Какая рентабельность скорректированного показателя EBITDA у сервисов объявлений?
    Рентабельность скорректированного показателя EBITDA у сервисов объявлений за третий квартал 2024 года составила 6,5%.
    
    На сколько млрд рублей выдал Яндекс займов за 9 месяцев до 30 сентября 2024?
    За девять месяцев до 30 сентября 2024 года Яндекс выдал займов на сумму 6,5 млрд рублей.
    

    Как видно из результата, гибридный поиск обеспечил более качественный результат: ответы на все три вопроса — верные.

Усовершенствуйте ассистента

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

  1. Создайте файл assistant-analyst.py, содержащий следующий код:

    from yandex_cloud_ml_sdk import YCloudML
    from yandex_cloud_ml_sdk.search_indexes import (
        HybridSearchIndexType,
        TextSearchIndexType,
        StaticIndexChunkingStrategy,
        ReciprocalRankFusionIndexCombinationStrategy,
    )
    
    query = (
        "Какая рентабельность скорректированного показателя EBITDA у сервисов объявлений?"
    )
    instruction = """
        Ты высококвалифицированный инвестиционный помощник. 
        Твоя задача помогать пользователю на основе финансовых отчетов для инвесторов анализировать компании.
        На вход тебе будет дан пользовательский запрос и кусочки отчетов, на основе отчетов нужно дать ответ на вопрос пользователя,
        а также добавить оценочное суждение как инвестиционного помощника. 
        Если в ответ на запрос пользователя требуется выдать значение какой-либо метрики, стоит проинтерпретировать значение. 
        Желательно кратко пояснить смысл метрики, а также дать оценку относительно того большое / небольшое ли значение у метрики. 
    """
    
    
    def main():
        sdk = YCloudML(
            folder_id="<идентификатор_каталога>",
            auth="<API-ключ>",
        )
    
        file = sdk.files.upload("<путь_к_файлу>")
        operation = sdk.search_indexes.create_deferred(
            [file],
            index_type=HybridSearchIndexType(
                chunking_strategy=StaticIndexChunkingStrategy(
                    max_chunk_size_tokens=1024,
                    chunk_overlap_tokens=512,
                ),
                combination_strategy=ReciprocalRankFusionIndexCombinationStrategy(),
            ),
        )
        hybrid_index = operation.wait()
        hybrid_tool = sdk.tools.search_index(hybrid_index)
        model = sdk.models.completions("yandexgpt", model_version="rc")
        assistant = sdk.assistants.create(
            model, tools=[hybrid_tool], instruction=instruction
        )
        hybrid_index_thread = sdk.threads.create()
    
        hybrid_index_thread.write(query)
        print(query)
        run = assistant.run(hybrid_index_thread)
        result = run.wait().message
        for part in result.parts:
            print(part)
        print("\n")
    
    
    if __name__ == "__main__":
        main()
    

    Где:

    • folder_id — идентификатор каталога, в котором вы создали сервисный аккаунт.
    • auth — созданный ранее API-ключ сервисного аккаунта. API-ключ используется для аутентификации в API Yandex Cloud. Подробнее о способах аутентификации в Yandex Cloud ML SDK см. в разделе Аутентификация.
    • <путь_к_файлу> — путь к файлу assistant-example.md с исходными данными для поискового индекса.
  2. Выполните файл assistant-analyst.py, чтобы создать ассистента и получить от него ответы на вопросы:

    python3 assistant-analyst.py
    

    Результат:

    Какая рентабельность скорректированного показателя EBITDA у сервисов объявлений?
    Рентабельность скорректированного показателя EBITDA у сервисов объявлений за третий квартал 2024 года
    составила 6,5%. Это значительное улучшение по сравнению с аналогичным периодом прошлого года, когда
    рентабельность была 3,3%. Такой рост свидетельствует об эффективности работы сегмента и улучшении его
    финансовых показателей.
    

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

Предыдущая
Регулярное асинхронное распознавание аудиофайлов из Object Storage
Проект Яндекса
© 2025 ООО «Яндекс.Облако»