Генеративный ответ

Вы можете использовать текстовый поиск Yandex Search API в сочетании с генеративными возможностями YandexGPT, чтобы в ответ на поисковый запрос получить единый емкий и понятный генеративный ответ, при формировании которого нейросеть анализирует релевантные результаты текстового поиска Yandex Search API по указанным сайтам. Генерация ответа возможна на русском, казахском и узбекском языках. Язык генерации зависит от типа поиска и языка запроса.

По умолчанию можно отправить не более одного синхронного запроса для получения генеративного ответа в секунду. Подробнее об ограничениях Yandex Search API см. в разделе Квоты и лимиты в Yandex Search API.

Для выполнения запросов необходима роль search-api.webSearch.user.

Подробнее о стоимости получения генеративных ответов на запросы см. Правила тарификации для Yandex Search API.

Формат тела API-запроса

Имена полей тела запроса различаются в REST API и gRPC API: в REST API используется camelCase, в gRPC API — snake_case.

Каждый запрос на получение генеративного ответа должен содержать тело запроса в формате JSON следующего вида:

{
          "messages": [
            {
              "content": "<текст_сообщения_1>",
              "role": "ROLE_USER"
            },
            {
              "content": "<ответ_модели_2>",
              "role": "ROLE_ASSISTANT"
            },
            {
              "content": "<текст_сообщения_3>",
              "role": "ROLE_USER"
            },
            {
              "content": "<ответ_модели_4>",
              "role": "ROLE_ASSISTANT"
            },
            ...
            {
              "content": "<текст_сообщения_n>",
              "role": "ROLE_USER"
            }
          ],
          "site": {
            "site": [
              "<адрес_сайта_1_для_поиска>",
              "<адрес_сайта_2_для_поиска>",
              ...
              "<адрес_сайта_5_для_поиска>"
            ]
          },
          "host": {
            "host": [
              "<хост_1_для_поиска>",
              "<хост_2_для_поиска>",
              ...
              "<хост_5_для_поиска>"
            ]
          },
          "url": {
            "url": [
              "<страница_1_для_поиска>",
              "<страница_2_для_поиска>",
              ...
              "<страница_10_для_поиска>"
            ]
          },
          "folderId": "<идентификатор_каталога>",
          "fixMisspell": true|false,
          "enableNrfmDocs": true|false,
          "searchFilters": [
            {
              "date": "<дата_обновления_документов>",
              "lang": "<язык_документов>",
              "format": "<формат_документов>"
            }
          ]
          "searchType": "string",
          "getPartialResults": true|false,
          "metadata": {
            "fields": "object"
          }
        }
        

Где:

  • messages — одиночный поисковый запрос или поисковый запрос с контекстом в форме чата с моделью. Задается в виде массива объектов, в каждом из которых содержатся два элемента:

    • content — текст сообщения пользователя или ответа модели (в зависимости от значения элемента role).
    • role — роль автора сообщения. Возможные значения:
      • ROLE_USER — означает, что автор сообщения — пользователь, а в поле content — запрос пользователя.
      • ROLE_ASSISTANT — означает, что автор сообщения — модель, а в поле content — ответ модели.
  • В полях site, host и url задается область поиска. При этом поля site, host и url — взаимоисключающие, задать можно только одно из них. Если ни одно из полей не указано, поиск будет выполнен по всему поисковому индексу Яндекса.

    • site — ограничение области поиска релевантных документов по массиву сайтов. Не более 5 сайтов в одном поиске.

      Например, для сайта yandex.cloud поиск будет выполняться по всем документам вида *.yandex.cloud/*. То есть, в область поиска попадут документы со следующими адресами:

      • yandex.cloud/
      • subdomain.yandex.cloud/
      • yandex.cloud/path/
      • subdomain.yandex.cloud/path/

      В поле site можно указать конкретный путь к области поиска, например https://yandex.cloud/ru/docs.

    • host — ограничение области поиска релевантных документов по массиву хостов. Не более 5 хостов в одном поиске.

      Например, для хоста yandex.cloud/ поиск будет выполняться по всем документам вида yandex.cloud/*. То есть, в область поиска попадут документы со следующими адресами:

      • yandex.cloud/
      • yandex.cloud/path/

      В отличие от ограничения области поиска в поле site, заданное в поле host ограничение не распространяется на поддомены. В поле host также нельзя указать конкретный путь к области поиска.

    • url — ограничение области поиска релевантных документов по массиву страниц. Например https://yandex.cloud/ru/docs/serverless-containers/concepts/container и https://yandex.cloud/ru/docs/container-registry/concepts/docker-image. Не более 10 страниц в одном поиске.

  • folderIdидентификатор каталога.

  • fixMisspell — параметр отвечает за проверку текста запроса на опечатки. Если параметр задан, то перед отправкой текст запроса проверяется на наличие опечаток. При этом, если опечатки были найдены, в ответ добавляется поле fixedMisspellQuery, содержащее исправленный текст запроса, который был отправлен в модель. Необязательный параметр. Возможные значения: true или false.

  • enableNrfmDocs — параметр определяет, попадут ли в поиск документы, недоступные при прямом переходе с главной страницы. Параметр работает только в том случае, если область поиска задана параметром site. Например, если вы хотите добавить в поиск страницу, на которую нельзя перейти ни по одной из ссылок, ведущих с главной страницы сайта, то необходимо включить параметр enableNrfmDocs. Необязательный параметр. Возможные значения: true или false.

  • searchFilters — дополнительный текст, который будет добавлен к каждому запросу. Используется для передачи поисковых операторов date:, mime: и lang:. Например, если указать "date": ">20250101", то в ответ на запрос будут получены только документы с датой обновления после 1 января 2025 года. Необязательный параметр. Поля date, lang и format являются взаимоисключающими — в теле запроса можно передать только одно из них.

  • searchType — тип поиска, влияет на область поиска и язык ответов. Возможные значения:

    • SEARCH_TYPE_RU — для типа поиска Русский. Ответ будет сгенерирован на русском языке.
    • SEARCH_TYPE_KK — для типа поиска Казахский.
    • SEARCH_TYPE_UZ — для типа поиска Узбекский.
  • getPartialResults — параметр определяет, отправлять ли промежуточные результаты генерации ответа, или дождаться финальных результатов генерации и прислать весь ответ целиком. Необязательный параметр. Возможные значения: true или false. Значение по умолчанию false.

  • metadata — дополнительные параметры поиска. Опциональный параметр.

Пример тела запроса:
{
          "messages": [
            {
              "content": "Что такое контейнеризация и как она реализована в Yandex Cloud?",
              "role": "ROLE_USER"
            }
          ],
          "site": {
            "site": [
                "https://ru.wikipedia.org/wiki/Контейнеризация",
                "https://yandex.cloud/ru/docs/serverless-containers/",
                "https://yandex.cloud/ru/docs/container-registry/"
            ]
          },
          "folderId": "aoevhr118rhc********",
          "fixMisspell": "true",
          "enableNrfmDocs": "true",
          "searchFilters": [
            {
              "date": ">20250101"
            }
          ]
        }
        
{
          "messages": [
            {
              "content": "<текст_сообщения_1>",
              "role": "ROLE_USER"
            },
            {
              "content": "<ответ_модели_1>",
              "role": "ROLE_ASSISTANT"
            },
            {
              "content": "<текст_сообщения_2>",
              "role": "ROLE_USER"
            },
            {
              "content": "<ответ_модели_3>",
              "role": "ROLE_ASSISTANT"
            },
            ...
            {
              "content": "<текст_сообщения_n>",
              "role": "ROLE_USER"
            }
          ],
          "site": {
            "site": [
              "<адрес_сайта_1_для_поиска>",
              "<адрес_сайта_2_для_поиска>",
              ...
              "<адрес_сайта_5_для_поиска>"
            ]
          },
          "host": {
            "host": [
              "<хост_1_для_поиска>",
              "<хост_2_для_поиска>",
              ...
              "<хост_5_для_поиска>"
            ]
          },
          "url": {
            "url": [
              "<страница_1_для_поиска>",
              "<страница_2_для_поиска>",
              ...
              "<страница_10_для_поиска>"
            ]
          },
          "folder_id": "<идентификатор_каталога>",
          "fix_misspell": true|false,
          "enable_nrfm_docs": true|false,
          "search_filters": [
            {
              "date": "<дата_обновления_документов>",
              "lang": "<язык_документов>",
              "format": "<формат_документов>"
            }
          ]
        }
        

Где:

  • messages — одиночный поисковый запрос или поисковый запрос с контекстом в форме чата с моделью. Задается в виде массива объектов, в каждом из которых содержатся два элемента:

    • content — текст сообщения пользователя или ответа модели (в зависимости от значения элемента role).
    • role — роль автора сообщения. Возможные значения:
      • ROLE_USER — означает, что автор сообщения — пользователь, а в поле content — запрос пользователя.
      • ROLE_ASSISTANT — означает, что автор сообщения — модель, а в поле content — ответ модели.
  • В полях site, host и url задается область поиска. При этом поля site, host и url — взаимоисключающие, задать можно только одно из них. Если ни одно из полей не указано, поиск будет выполнен по всему поисковому индексу Яндекса.

    • site — ограничение области поиска релевантных документов по массиву сайтов. Не более 5 сайтов в одном поиске.

      Например, для сайта yandex.cloud поиск будет выполняться по всем документам вида *.yandex.cloud/*. То есть, в область поиска попадут документы со следующими адресами:

      • yandex.cloud/
      • subdomain.yandex.cloud/
      • yandex.cloud/path/
      • subdomain.yandex.cloud/path/

      В поле site можно указать конкретный путь к области поиска, например https://yandex.cloud/ru/docs.

    • host — ограничение области поиска релевантных документов по массиву хостов. Не более 5 хостов в одном поиске.

      Например, для хоста yandex.cloud/ поиск будет выполняться по всем документам вида yandex.cloud/*. То есть, в область поиска попадут документы со следующими адресами:

      • yandex.cloud/
      • yandex.cloud/path/

      В отличие от ограничения области поиска в поле site, заданное в поле host ограничение не распространяется на поддомены. В поле host также нельзя указать конкретный путь к области поиска.

    • url — ограничение области поиска релевантных документов по массиву страниц. Например https://yandex.cloud/ru/docs/serverless-containers/concepts/container и https://yandex.cloud/ru/docs/container-registry/concepts/docker-image. Не более 10 страниц в одном поиске.

  • folder_idидентификатор каталога.

  • fix_misspell — параметр отвечает за проверку текста запроса на опечатки. Если параметр задан, то перед отправкой текст запроса проверяется на наличие опечаток. При этом, если опечатки были найдены, в ответ добавляется поле fixed_misspell_query, содержащее исправленный текст запроса, который был отправлен в модель. Необязательный параметр. Возможные значения: true или false.

  • enable_nrfm_docs — параметр определяет, попадут ли в поиск документы, недоступные при прямом переходе с главной страницы. Параметр работает только в том случае, если область поиска задана параметром site. Например, если вы хотите добавить в поиск страницу, на которую нельзя перейти ни по одной из ссылок, ведущих с главной страницы сайта, то необходимо включить параметр enable_nrfm_docs. Необязательный параметр. Возможные значения: true или false.

  • search_filters — дополнительный текст, который будет добавлен к каждому запросу. Используется для передачи поисковых операторов date:, mime: и lang:. Например, если указать "date": ">20250101", то в ответ на запрос будут получены только документы с датой обновления после 1 января 2025 года. Необязательный параметр. Поля date, lang и format являются взаимоисключающими — в теле запроса можно передать только одно из них.

  • search_type — тип поиска, влияет на область поиска и язык ответов. Возможные значения:

    • SEARCH_TYPE_RU — для типа поиска Русский. Ответ будет сгенерирован на русском языке.
    • SEARCH_TYPE_KK — для типа поиска Казахский.
    • SEARCH_TYPE_UZ — для типа поиска Узбекский.
  • get_partial_results — параметр определяет, отправлять ли промежуточные результаты генерации ответа, или дождаться финальных результатов генерации и прислать весь ответ целиком. Необязательный параметр. Возможные значения: true или false. Значение по умолчанию false.

  • metadata — дополнительные параметры поиска. Опциональный параметр.

Пример тела запроса:
{
          "messages": [
            {
              "content": "Что такое контейнеризация и как она реализована в Yandex Cloud?",
              "role": "ROLE_USER"
            }
          ],
          "site": {
            "site": [
                "https://ru.wikipedia.org/wiki/Контейнеризация",
                "https://yandex.cloud/ru/docs/serverless-containers/",
                "https://yandex.cloud/ru/docs/container-registry/"
            ]
          },
          "folder_id": "aoevhr118rhc********",
          "fix_misspell": "true",
          "enable_nrfm_docs": "true",
          "search_filters": [
            {
              "date": ">20250101"
            }
          ]
        }
        

Отправка запроса через API

Чтобы отправить запрос через API, используйте метод search для генеративного поиска GenSearch. При необходимости установите утилиты cURL и jq:

curl \
          --request POST \
          --header "Authorization: Bearer <IAM-токен>" \
          --data "@<путь_к_файлу>" \
          "https://searchapi.api.cloud.yandex.net/v2/gen/search" \
          | jq
        

Где:

Чтобы отправить запрос, используйте вызов GenSearchService/Search. При необходимости установите утилиты gRPCurl и jq:

grpcurl \
          -rpc-header "Authorization: Bearer <IAM-токен>" \
          -d @ < <путь_к_файлу> \
          searchapi.api.cloud.yandex.net:443 yandex.cloud.searchapi.v2.GenSearchService/Search \
          | jq
        

Где:

Отправка запроса через Yandex AI Studio SDK

Чтобы отправить запрос на получение генеративного ответа через Yandex AI Studio SDK, выполните код на языке Python. В приведенном примере показаны основные особенности использования AI SDK для получения генеративного ответа:

#!/usr/bin/env python3
        
        from __future__ import annotations
        
        import pprint
        
        from yandex_ai_studio_sdk import AIStudio
        
        
        def main() -> None:
        
            sdk = AIStudio(
                folder_id="<идентификатор_каталога>",
                auth="<API-ключ>",
            )
            sdk.setup_default_logging()
        
            search = sdk.search_api.generative(
                # You can use only one of the three params: site, host, or url
                site=["yandex.cloud", "yandex.ru"],
                # host=['yandex.cloud/', 'yandex.ru/'],
                # url=['https://yandex.cloud/ru/docs/serverless-containers/concepts/container', 'https://yandex.cloud/ru/docs/container-registry/concepts/docker-image'],
                fix_misspell=True,
                enable_nrfm_docs=True,
                search_filters=[
                    {"date": ">20250101"},
                    {"lang": "ru"},
                    {"format": "pdf"},
                ],
            )
        
            # You can pass a string as a query
            search_result = search.run("Yandex Cloud generative Search API params")
        
            # You can examine the search_result structure via pprint
            # to get to know how to work with it:
            pprint.pprint(search_result)
            print()
        
            queries = [
                # You can also pass a {'text', 'role'} dict like in the completions models
                {"text": "Gen search api params", "role": "user"},
                "With examples",
            ]
        
            # And you can pass an array of any allowed types
            search_result = search.run(queries)  # type: ignore[arg-type]
            print(search_result.text)
            print()
        
            # Also search result itself could be used as one of the queries for a better context
            queries.append(search_result)  # type: ignore[arg-type]
            queries.append("Get me more examples of how to use Generative Search API with gprc")
        
            search_result = search.run(queries)  # type: ignore[arg-type]
            print(search_result.text)
            print()
        
        
        if __name__ == "__main__":
            main()
        

Где:

Текст поискового запроса задается в методе .run, а параметры поиска — в свойствах соответствующего объекта класса search_api.generative:

  • В свойствах site, host и url задается область поиска. При этом свойства site, host и url — взаимоисключающие, задать можно только одно из них. Если ни одно из полей не указано, поиск будет выполнен по всему поисковому индексу Яндекса.

    • site — ограничение области поиска релевантных документов по массиву сайтов. Не более 5 сайтов в одном поиске.

      Например, для сайта yandex.cloud поиск будет выполняться по всем документам вида *.yandex.cloud/*. То есть в область поиска попадут документы со следующими адресами:

      • yandex.cloud/
      • subdomain.yandex.cloud/
      • yandex.cloud/path/
      • subdomain.yandex.cloud/path/

      В свойстве site можно указать конкретный путь к области поиска, например https://yandex.cloud/ru/docs.

    • host — ограничение области поиска релевантных документов по массиву хостов. Не более 5 хостов в одном поиске.

      Например, для хоста yandex.cloud/ поиск будет выполняться по всем документам вида yandex.cloud/*. То есть в область поиска попадут документы со следующими адресами:

      • yandex.cloud/
      • yandex.cloud/path/

      В отличие от ограничения области поиска в свойстве site, заданное в свойстве host ограничение не распространяется на поддомены. В свойстве host также нельзя указать конкретный путь к области поиска.

    • url — ограничение области поиска релевантных документов по массиву страниц. Например, https://yandex.cloud/ru/docs/serverless-containers/concepts/container и https://yandex.cloud/ru/docs/container-registry/concepts/docker-image. Не более 10 страниц в одном поиске.

  • fix_misspell — параметр отвечает за проверку текста запроса на опечатки. Если параметр задан, то перед отправкой текст запроса проверяется на наличие опечаток. При этом, если опечатки были найдены, в ответ добавляется поле fixed_misspell_query, содержащее исправленный текст запроса, который был отправлен в модель. Необязательный параметр. Возможные значения: true или false.

  • enable_nrfm_docs — параметр определяет, попадут ли в поиск документы, недоступные при прямом переходе с главной страницы. Параметр работает только в том случае, если область поиска задана параметром site. Например, если вы хотите добавить в поиск страницу, на которую нельзя перейти ни по одной из ссылок, ведущих с главной страницы сайта, то необходимо включить параметр enable_nrfm_docs. Необязательный параметр. Возможные значения: true или false.

  • search_filters — дополнительный текст, который будет добавлен к каждому запросу. Используется для передачи поисковых операторов date:, mime: и lang:. Например, если указать "date": ">20250101", то в ответ на запрос будут получены только документы с датой обновления после 1 января 2025 года. Необязательный параметр.

Исходный код библиотеки AI SDK и примеры использования доступны в репозитории на GitHub. Подробнее о Yandex AI Studio SDK см. в документации AI Studio.

Генеративный ответ

Сервис Yandex Search API возвращает ответ в формате JSON следующего вида:

Примечание

Ответ не содержит обязательных полей. Поле может отсутствовать в ответе, если не содержит значащей информации.

{
          "message": {
            "content": "<текст_ответа>",
            "role": "ROLE_ASSISTANT"
          },
          "sources": [
            {
              "used": false|true,
              "url": "<ссылка_на_найденный_документ_1>",
              "title": "<заголовок_найденного_документа_1>"
            },
            {
              "used": false|true,
              "url": "<ссылка_на_найденный_документ_2>",
              "title": "<заголовок_найденного_документа_2>"
            },
            ...
            {
              "used": false|true,
              "url": "<ссылка_на_найденный_документ_n>",
              "title": "<заголовок_найденного_документа_n>"
            }
          ],
          "searchQueries": [
            {
              "text": "<текст_запроса_1>",
              "reqId": "<идентификатор_запроса_1>"
            },
            {
              "text": "<текст_запроса_2>",
              "reqId": "<идентификатор_запроса_2>"
            },
            ...
            {
              "text": "<текст_запроса_n>",
              "reqId": "<идентификатор_запроса_n>"
            },
          ],
          "isAnswerRejected": false|true,
          "isBulletAnswer": false|true,
          "fixedMisspellQuery": "<исправленный_текст_запроса>"
        }
        

Где:

  • message.content — текст генеративного ответа. Сноски в тексте указывают на источники, список и порядок которых приведены в поле sources.

  • sources — массив документов-источников, которые были найдены при запросе, могли использоваться YandexGPT в качестве источников информации при формировании ответа и на которые могут быть сделаны сноски в поле message.content. Каждый документ-источник содержит поля:

    • used — индикатор того, использовался ли данный документ при формировании ответа. Возможные значения: true или false.
    • url — URL документа.
    • title — заголовок документа. Может отсутствовать в результатах, если владелец сайта не определил заголовок страницы.
  • searchQueries — список дополнительных поисковых запросов, с которыми генеративная модель обращалась к поиску. Каждый запрос содержит поля:

    • text — текст поискового запроса.
    • reqId — уникальный идентификатор запроса Yandex Search API.
  • isAnswerRejected — индикатор отказа модели предоставить ответ из-за этических ограничений:

    • false — модель вернула ответ.
    • true — модель отказалась вернуть ответ.
  • isBulletAnswer — индикатор буллетного ответа, когда модель не может дать хороший ответ и предлагает набор буллетов с различной информацией:

    • false — модель дала хороший ответ.
    • true — модель предложила набор буллетов.
  • fixedMisspellQuery — исправленный текст запроса. Необязательная опция. Присутствует в ответе только в том случае, если в теле запроса задан параметр fixMisspell и в тексте запроса были найдены опечатки.

Пример генеративного ответа с ограничением по сайтам:
[
          {
            "message": {
              "content": "**Контейнеризация** (виртуализация на уровне операционной системы) — **метод 
              виртуализации**, при котором ядро операционной системы поддерживает несколько изолированных 
              экземпляров пространства пользователя вместо одного. [1] Эти экземпляры (контейнеры или зоны) с точки 
              зрения выполняемых в них процессов идентичны отдельному экземпляру операционной системы. [1] Ядро 
              обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут 
              воздействовать друг на друга. [1]\n\n**В Yandex Cloud контейнеризация реализована с помощью сервиса 
              Yandex Serverless Containers**. [5][6] Контейнер позволяет запустить в Yandex Cloud приложение, 
              которое содержится в Docker-образе. [6] \n\n**Некоторые особенности реализации контейнеризации в 
              Yandex Cloud:**\n\n* **Создание ревизии контейнера**. [6] Ревизию контейнера можно создать только из 
              Docker-образа, который загружен в реестр Yandex Container Registry. [6] Другие реестры не 
              поддерживаются. [6] Ревизия содержит всю информацию, необходимую для запуска контейнера. [6]\n* 
              **Вызов контейнера**. [6] После создания ревизии контейнера его можно вызвать через HTTPS, с помощью 
              триггера или с помощью расширения Yandex API Gateway. [6]\n* **Масштабирование контейнера**. [6] Если 
              контейнер вызывается быстрее, чем экземпляр успевает обработать запрос, сервис масштабирует контейнер 
              — запускает его дополнительные экземпляры. [6] Таким образом обеспечивается параллельная обработка 
              запросов. [6]\n* **Подготовленные экземпляры**. [6] Подготовленный экземпляр — это экземпляр 
              контейнера, при запуске которого гарантированно нет холодного старта. [6]",
              "role": "ROLE_ASSISTANT"
            },
            "sources": [
              {
                "used": false,
                "url": "https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F",
                "title": "Контейнеризация — Википедия"
              },
              {
                "used": true,
                "url": "https://yandex.cloud/ru/docs/serverless-containers/tutorials/functions-framework-to-container",
                "title": "Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers | Yandex Cloud - Документация"
              },
              {
                "used": false,
                "url": "https://yandex.cloud/ru/docs/container-registry/",
                "title": "Yandex Container Registry | Yandex Cloud - Документация"
              },
              {
                "used": false,
                "url": "https://yandex.cloud/ru/docs/container-registry/concepts/docker-image",
                "title": "Docker-образ. Что это и как работает? | Yandex Cloud - Документация"
              },
              {
                "used": false,
                "url": "https://yandex.cloud/ru/docs/serverless-containers/operations/",
                "title": "Инструкции по работе с Yandex Serverless Containers | Yandex Cloud - Документация"
              },
              {
                "used": true,
                "url": "https://yandex.cloud/ru/docs/serverless-containers/concepts/container",
                "title": "Контейнер в Yandex Serverless Containers | Yandex Cloud - Документация"
              },
              {
                "used": true,
                "url": "https://yandex.cloud/ru/docs/container-registry/operations/docker-image/docker-image-push",
                "title": "Загрузить Docker-образ в реестр Container Registry | Yandex Cloud - Документация"
              },
              {
                "used": false,
                "url": "https://yandex.cloud/ru/docs/serverless-containers/tutorials/deploy-app-container",
                "title": "Запуск контейнерного приложения в Yandex Serverless Containers | Yandex Cloud - Документация"
              },
              {
                "used": false,
                "url": "https://yandex.cloud/ru/docs/container-registry/tutorials/fault-tolerance",
                "title": "Настройка отказоустойчивой архитектуры в Yandex Cloud | Yandex Cloud - Документация"
              },
              {
                "used": false,
                "url": "https://yandex.cloud/ru/docs/serverless-containers/tf-ref",
                "title": "Справочник Terraform для Yandex Serverless Containers | Yandex Cloud - Документация"
              }
            ],
            "searchQueries": [
              {
                "text": "что такое контейнеризация и как она реализована в yandex cloud date 2025 01 01 date 2025 01 01 date 2025 01 01",
                "reqId": "1742492744075717-6834712924673670818-e23cqdex********-BAL"
              },
              {
                "text": "как контейнеризация реализована в yandex cloud date 2025 01 01 date 2025 01 01 date 2025 01 01",
                "reqId": "1742492744352285-5531077099747983300-hhsihxn5********-BAL"
              },
              {
                "text": "что такое контейнеризация date 2025 01 01 date 2025 01 01 date 2025 01 01",
                "reqId": "1742492744351443-10540017330195862709-gai4ndrg********-BAL"
              }
            ],
            "isAnswerRejected": false,
            "isBulletAnswer": false,
            "fixedMisspellQuery": "Что такое контейнеризация и как она реализована в Yandex Cloud?"
          }
        ]
        
{
          "message": {
            "content": "<текст_ответа>",
            "role": "ROLE_ASSISTANT"
          },
          "sources": [
            {
              "url": "<ссылка_на_найденный_документ_1>",
              "title": "<заголовок_найденного_документа_1>",
              "used": false|true
            },
            {
              "url": "<ссылка_на_найденный_документ_2>",
              "title": "<заголовок_найденного_документа_2>",
              "used": false|true
            },
            ...
            {
              "url": "<ссылка_на_найденный_документ_n>",
              "title": "<заголовок_найденного_документа_n>",
              "used": false|true
            }
          ],
          "search_queries": [
            {
              "text": "<текст_запроса_1>",
              "req_id": "<идентификатор_запроса_1>"
            },
            {
              "text": "<текст_запроса_2>",
              "req_id": "<идентификатор_запроса_2>"
            },
            ...
            {
              "text": "<текст_запроса_n>",
              "req_id": "<идентификатор_запроса_n>"
            },
          ],
          "is_answer_rejected": false|true,
          "is_bullet_answer": false|true,
          "fixed_misspell_query": "<исправленный_текст_запроса>"
        }
        

Где:

  • message.content — текст генеративного ответа. Сноски в тексте указывают на источники, список и порядок которых приведены в поле sources.

  • sources — массив документов-источников, которые были найдены при запросе, могли использоваться YandexGPT в качестве источников информации при формировании ответа и на которые могут быть сделаны сноски в поле message.content. Каждый документ-источник содержит поля:

    • url — URL документа.
    • title — заголовок документа.
    • used — индикатор того, использовался ли данный документ при формировании ответа. Возможные значения: true или false.
  • search_queries — список дополнительных поисковых запросов, с которыми генеративная модель обращалась к поиску. Каждый запрос содержит поля:

    • text — текст поискового запроса.
    • req_id — уникальный идентификатор запроса Yandex Search API.
  • is_answer_rejected — индикатор отказа модели предоставить ответ из-за этических ограничений:

    • false — модель вернула ответ.
    • true — модель отказалась вернуть ответ.
  • is_bullet_answer — индикатор буллетного ответа, когда модель не может дать хороший ответ и предлагает набор буллетов с различной информацией:

    • false — модель дала хороший ответ.
    • true — модель предложила набор буллетов.
  • fixed_misspell_query — исправленный текст запроса. Необязательная опция. Присутствует в ответе только в том случае, если в теле запроса задан параметр fix_misspell и в тексте запроса были найдены опечатки.

Пример генеративного ответа с ограничением по сайтам:
{
          "message": {
            "content": "**Контейнеризация** (виртуализация на уровне операционной системы) — **метод 
            виртуализации**, при котором ядро операционной системы поддерживает несколько изолированных экземпляров 
            пространства пользователя вместо одного. [1] Эти экземпляры (контейнеры или зоны) с точки зрения 
            выполняемых в них процессов идентичны отдельному экземпляру операционной системы. [1] Ядро обеспечивает 
            полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг 
            на друга. [1]\n\n**В Yandex Cloud контейнеризация реализована с помощью сервиса 
            Yandex Serverless Containers**. [7] Он позволяет запустить в Yandex Cloud приложение, 
            которое содержится в Docker-образе. [7] \n\n**Некоторые особенности реализации контейнеризации в 
            Yandex Cloud:**\n\n* **Создание ревизии контейнера**. [7] Ревизию можно создать только из 
            Docker-образа, который загружен в реестр Yandex Container Registry. [7] Другие реестры не 
            поддерживаются. [7] Ревизия содержит всю информацию, необходимую для запуска контейнера. [7]\n* **Вызов 
            контейнера**. [7] После создания ревизии контейнер можно вызвать через HTTPS, с помощью триггера или 
            расширения Yandex API Gateway. [7]\n* **Масштабирование контейнера**. [7] Если контейнер вызывается 
            быстрее, чем экземпляр успевает обработать запрос, сервис масштабирует контейнер — запускает его 
            дополнительные экземпляры. [7] Таким образом обеспечивается параллельная обработка запросов. [7]\n* 
            **Подготовленные экземпляры**. [7] Это экземпляр контейнера, при запуске которого гарантированно нет 
            холодного старта. [7] В подготовленном экземпляре до вызова контейнера инициализируются компоненты среды 
            выполнения Serverless Containers, загружается и инициализируется пользовательское приложение. [7]",
            "role": "ROLE_ASSISTANT"
          },
          "sources": [
            {
              "url": "https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F",
              "title": "Контейнеризация — Википедия",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/serverless-containers/tutorials/functions-framework-to-container",
              "title": "Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers | Yandex Cloud - Документация",
              "used": true
            },
            {
              "url": "https://yandex.cloud/ru/docs/container-registry/",
              "title": "Yandex Container Registry | Yandex Cloud - Документация",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/container-registry/concepts/docker-image",
              "title": "Docker-образ. Что это и как работает? | Yandex Cloud - Документация",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/container-registry/operations/docker-image/docker-image-push",
              "title": "Загрузить Docker-образ в реестр Container Registry | Yandex Cloud - Документация",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/serverless-containers/tutorials/deploy-app-container",
              "title": "Запуск контейнерного приложения в Yandex Serverless Containers | Yandex Cloud - Документация",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/serverless-containers/concepts/container",
              "title": "Контейнер в Yandex Serverless Containers | Yandex Cloud - Документация",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/serverless-containers/tf-ref",
              "title": "Справочник Terraform для Yandex Serverless Containers | Yandex Cloud - Документация",
              "used": true
            },
            {
              "url": "https://yandex.cloud/ru/docs/serverless-containers/operations/",
              "title": "Инструкции по работе с Yandex Serverless Containers | Yandex Cloud - Документация",
              "used": false
            },
            {
              "url": "https://yandex.cloud/ru/docs/container-registry/tutorials/fault-tolerance",
              "title": "Настройка отказоустойчивой архитектуры в Yandex Cloud | Yandex Cloud - Документация",
              "used": false
            }
          ],
          "search_queries": [
            {
              "text": "что такое контейнеризация и как она реализована в yandex cloud date 2025 01 01 date 2025 01 01 date 2025 01 01",
              "req_id": "1742493532407414-13584885235180537459-jjleoq7t********-BAL"
            },
            {
              "text": "как контейнеризация реализована в yandex cloud date 2025 01 01 date 2025 01 01 date 2025 01 01",
              "req_id": "1742493532717030-17218638161437229208-rs6g5w5h********-BAL"
            },
            {
              "text": "что такое контейнеризация date 2025 01 01 date 2025 01 01 date 2025 01 01",
              "req_id": "1742493532716328-3123354248981714225-rs6g5w5h********-BAL"
            }
          ],
          "is_answer_rejected": false,
          "is_bullet_answer": false,
          "fixed_misspell_query": "Что такое контейнеризация и как она реализована в Yandex Cloud?"
        }
        

Особенности ответа

В зависимости от запроса и полученных результатов поиска, при формировании генеративного ответа Yandex Search API может выдавать такие предупреждения:

  • Если сервис не нашел ни одного документа по запросу:

    Ничего не нашлось.
    Переформулируйте запрос или спросите что-нибудь ещё.

  • Если сервис нашел документы-источники по запросу, но извлечь из них информацию не получилось:

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

  • Если сервис нашел документы-источники и извлек из них информацию, но нет уверенности в высоком качестве ответа, Yandex Search API предваряет ответ следующим сообщением:

    На сайтах по данной теме доступна различная информация, её обзор ниже.

Предыдущая