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

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

  • Перед началом работы
  • Выполните поиск
  1. Пошаговые инструкции
  2. Эмбеддинги
  3. Использовать эмбеддинги в поиске по базе знаний

Использовать эмбеддинги в поиске по базе знаний

Статья создана
Yandex Cloud
Обновлена 18 марта 2025 г.
  • Перед началом работы
  • Выполните поиск

С помощью эмбеддингов вы можете найти в базе знаний наиболее близкий ответ на заданный вопрос.

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

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

SDK
Python 3
  1. Создайте сервисный аккаунт и назначьте ему роль 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
    
  1. Создайте сервисный аккаунт и назначьте ему роль ai.languageModels.user.
  2. Получите IAM-токен для сервисного аккаунта.

Выполните поиск

В приведенном примере в массиве doc_texts собраны исходные данные для векторизации (база знаний), переменная query_text содержит текст поискового запроса. После получения эмбеддингов вычисляется расстояние между каждым вектором в базе знаний и вектором запроса и определяется наиболее близкий текст в базе знаний.

Примечание

В качестве входных данных для запроса Yandex Cloud ML SDK может принимать строку, словарь, объект класса TextMessage или массив, содержащий любое сочетание указанных типов данных. Подробнее см. в разделе Использование Yandex Cloud ML SDK.

SDK
Python 3
  1. Создайте файл search-knowledge-base.py и добавьте в него следующий код:

    #!/usr/bin/env python3
    # pylint: disable=import-outside-toplevel
    
    from __future__ import annotations
    from yandex_cloud_ml_sdk import YCloudML
    
    doc_texts = [
        """Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург)
        — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления,
        литературный критик и теоретик литературы, историк, публицист, журналист.""",
        """Ромашка — род однолетних цветковых растений семейства астровые,
        или сложноцветные, по современной классификации объединяет около 70 видов невысоких пахучих трав,
        цветущих с первого года жизни.""",
    ]
    query_text = "когда день рождения Пушкина?"
    
    
    def main():
        import numpy as np
        from scipy.spatial.distance import cdist
    
        sdk = YCloudML(
            folder_id="<идентификатор_каталога>",
            auth="<API-ключ>",
        )
    
        query_model = sdk.models.text_embeddings("query")
        query_embedding = query_model.run(query_text)
    
        doc_model = sdk.models.text_embeddings("doc")
        doc_embeddings = [doc_model.run(text) for text in doc_texts]
    
        query_embedding = np.array(query_embedding)
    
        dist = cdist([query_embedding], doc_embeddings, metric="cosine")
        sim = 1 - dist
        result = doc_texts[np.argmax(sim)]
        print(result)
    
    
    if __name__ == "__main__":
        main()
    

    Где:

    • <идентификатор_каталога> — идентификатор каталога, в котором создан сервисный аккаунт.

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

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

    Подробнее о том, как обращаться к моделям векторного представления текста, см. в разделе Обращение к моделям.

  2. Выполните созданный файл:

    python3 search-knowledge-base.py
    

    Результат выполнения:

    Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург)
        — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления,
        литературный критик и теоретик литературы, историк, публицист, журналист.
    
  1. Создайте файл search-knowledge-base.py и добавьте в него следующий код:

    import requests
    import numpy as np
    from scipy.spatial.distance import cdist
    
    FOLDER_ID = "<идентификатор_каталога>"
    IAM_TOKEN = "<IAM-токен>"
    doc_uri = f"emb://{FOLDER_ID}/text-search-doc/latest"
    query_uri = f"emb://{FOLDER_ID}/text-search-query/latest"
    embed_url = "https://llm.api.cloud.yandex.net:443/foundationModels/v1/textEmbedding"
    headers = {"Content-Type": "application/json", "Authorization": f"Bearer {IAM_TOKEN}", "x-folder-id": f"{FOLDER_ID}"}
    doc_texts = [
      """Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург) — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления, литературный критик и теоретик литературы, историк, публицист, журналист.""",
      """Ромашка — род однолетних цветковых растений семейства астровые, или сложноцветные, по современной классификации объединяет около 70 видов невысоких пахучих трав, цветущих с первого года жизни."""
    ]
    query_text = "когда день рождения Пушкина?"
    
    def get_embedding(text: str, text_type: str = "doc") -> np.array:
        query_data = {
            "modelUri": doc_uri if text_type == "doc" else query_uri,
            "text": text,
        }
    
        return np.array(
            requests.post(embed_url, json=query_data, headers=headers).json()["embedding"]
        )
    
    query_embedding = get_embedding(query_text, text_type="query")
    docs_embedding = [get_embedding(doc_text) for doc_text in doc_texts]
    
    # Вычисляем косинусное расстояние
    dist = cdist(query_embedding[None, :], docs_embedding, metric="cosine")
    
    # Вычисляем косинусное сходство
    sim = 1 - dist
    
    # most similar doc text
    print(doc_texts[np.argmax(sim)])
    

    Где:

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

    python3 search-knowledge-base.py
    

    Результат выполнения:

    Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург) — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления, литературный критик и теоретик литературы, историк, публицист, журналист.
    

См. также

  • Векторизация текста
  • Примеры работы с ML SDK на GitHub

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

Предыдущая
Использовать дообученные классификаторы
Следующая
Создать датасет
Проект Яндекса
© 2025 ООО «Яндекс.Облако»