AGTCloud API Docs
РуководстваСправочник APIИнтеграции и ресурсыОбновления и помощь
Web Search

Gemini Search Grounding

Используйте Google Search Grounding и связывайте фрагменты ответа с веб-источниками.

Gemini Search Grounding позволяет поддерживающим его моделям Gemini получать актуальную информацию через Google Search и связывать фрагменты ответа с веб-источниками через groundingMetadata.

Grounding — не просто включение поиска. Клиентская программа должна читать связи между запросами, источниками и фрагментами текста, чтобы показывать проверяемые ссылки.

Поддержка протокола не равнозначна поддержке модели

Generate Content может описывать инструмент Google Search, но доступность зависит от текущей модели и учётной записи. Сначала проверьте модель в каталоге моделей, затем руководствуйтесь Gemini Generate Content Reference.

Запрос Grounding

Нативный путь Gemini добавляет /v1beta к Origin сайта. Нельзя добавлять /v1beta к Base URL, уже содержащему /v1:

curl --request POST \
  'https://api.agtcloud.cn/v1beta/models/MODEL_ID:generateContent' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer your-api-key' \
  --data '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "Какие новости об искусственном интеллекте сегодня заслуживают внимания? Укажите источники."
          }
        ]
      }
    ],
    "tools": [
      {
        "google_search": {}
      }
    ]
  }'

Модель определяет необходимость поиска и может сформировать один или несколько поисковых запросов. Не предполагайте, что включение инструмента всегда создаёт Grounding Metadata.

Обработка Grounding

1. Отправьте вопрос и поисковый инструмент

Поместите вопрос в contents[].parts и включите Google Search в tools.

2. Прочитайте текст ответа

Читайте текст модели из content.parts кандидатов. Не предполагайте, что кандидат или Part всегда только один.

3. Прочитайте Grounding Metadata

Сохраните поисковые запросы, веб-источники и связи фрагментов ответа с индексами источников.

4. Покажите кликабельные ссылки

Добавьте маркеры ссылок по позициям конца фрагментов или покажите карточки источников рядом с ответом, чтобы пользователь мог проверить исходные страницы.

Структура groundingMetadata

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {"text": "Согласно недавним публикациям, основные изменения включают…"}
        ]
      },
      "groundingMetadata": {
        "webSearchQueries": [
          "искусственный интеллект новости сегодня"
        ],
        "groundingChunks": [
          {
            "web": {
              "uri": "https://example.com/article",
              "title": "Название источника"
            }
          }
        ],
        "groundingSupports": [
          {
            "segment": {
              "startIndex": 0,
              "endIndex": 12,
              "text": "Согласно недавним публикациям"
            },
            "groundingChunkIndices": [0]
          }
        ]
      }
    }
  ]
}
ПолеНазначение в клиенте
webSearchQueriesЗапись фактических запросов модели для диагностики и объяснения области поиска
groundingChunksСохранение URI, заголовков и других сведений об источниках
groundingSupportsСвязь фрагментов ответа с одним или несколькими индексами источников

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

Вставка ссылок в текст

Вставляйте ссылки в порядке убывания segment.endIndex, чтобы предыдущая вставка не сместила следующие позиции:

function addCitations(text, supports = [], chunks = []) {
  const sorted = [...supports].sort(
    (a, b) => (b.segment?.endIndex ?? 0) - (a.segment?.endIndex ?? 0),
  );

  for (const support of sorted) {
    const endIndex = support.segment?.endIndex;
    if (endIndex == null) continue;

    const links = (support.groundingChunkIndices ?? [])
      .map((index) => {
        const source = chunks[index]?.web;
        return source?.uri ? `[${index + 1}](${source.uri})` : null;
      })
      .filter(Boolean);

    if (links.length > 0) {
      text = `${text.slice(0, endIndex)}${links.join('')}${text.slice(endIndex)}`;
    }
  }

  return text;
}

В браузере безопасно обрабатывайте Markdown или HTML, возвращённый моделью, и добавляйте внешним ссылкам безопасные атрибуты новой вкладки.

Ошибки и резервное поведение

СитуацияДействие
Нет groundingMetadataПокажите ответ и укажите, что источники Grounding в этом ответе отсутствуют
Индекс источника вне границПропустите неверную связь и сохраните обезличенный ответ; не вставляйте ошибочную ссылку
Позиции текста не совпадаютПокажите список источников в конце, не вставляя ссылки в неверные позиции
Поиск завершился ошибкойПо ошибке ответа выберите ограниченный повтор или ответ без поиска
Источники противоречат друг другуПокажите разные источники и даты, оставив решение пользователю и не скрывая важных расхождений

Проверка перед запуском

  • Текущая модель поддерживает Google Search Grounding.
  • Gemini Endpoint использует Origin сайта, без /v1/v1beta.
  • Текст ответа, запросы, источники и связи фрагментов сохраняются отдельно.
  • Неверные индексы ссылок не приводят к сбою страницы.
  • Внешние веб-страницы не считаются доверенными бизнес-инструкциями.
  • При отсутствии источников не создаются вымышленные Citation.

Если приложение использует Chat, а не нативную структуру Gemini, используйте явно поддерживаемые моделью поисковые поля Chat; не переносите парсер groundingMetadata напрямую.

На этой странице