Заземление с помощью Google Поиска

Использование Google Поиска позволяет модели Gemini подключаться к общедоступному веб-контенту в режиме реального времени. Это позволяет модели предоставлять более точные и актуальные ответы и ссылаться на проверяемые источники, находящиеся за пределами её знаний.

Использование поиска Google имеет следующие преимущества:

  • Повышайте фактическую точность : уменьшайте галлюцинации модели, основывая ответы на информации из реального мира.
  • Доступ к информации в режиме реального времени : отвечайте на вопросы о последних событиях и темах.
  • Предоставьте ссылки : создайте доверие пользователей или дайте им возможность просматривать соответствующие сайты, указав источники утверждений модели.
  • Выполняйте более сложные задачи : извлекайте артефакты и соответствующие изображения, видео или другие медиафайлы для помощи в задачах по рассуждению.
  • Улучшите ответы, специфичные для региона или языка : найдите информацию, специфичную для региона, или помогите точно перевести контент.

Обратите внимание, что поддержка Grounding for Google Search доступна для iOS+, Android, Web и Flutter. В Unity она появится в следующей версии.

Поддерживаемые модели

  • gemini-2.5-pro
  • gemini-2.5-flash
  • gemini-2.5-flash-lite-preview-06-17
  • gemini-2.0-flash-001 (и его автоматически обновляемый псевдоним gemini-2.0-flash )
  • gemini-2.0-flash-live-preview-04-09

Поддерживаемые языки

Ознакомьтесь с поддерживаемыми языками для моделей Gemini .

Заземлите модель с помощью поиска Google

Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице.

При создании экземпляра GenerativeModel предоставьте GoogleSearch в качестве tool , который модель может использовать для генерации своего ответа.

Быстрый


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(
    modelName: "GEMINI_MODEL_NAME",
    // Provide Google Search as a tool that the model can use to generate its response
    tools: [Tool.googleSearch()]
)

let response = try await model.generateContent("Who won the euro 2024?")
print(response.text ?? "No text in response.")

// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result

Kotlin


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
    modelName = "GEMINI_MODEL_NAME",
    // Provide Google Search as a tool that the model can use to generate its response
    tools = listOf(Tool.GoogleSearch())
)

val response = model.generateContent("Who won the euro 2024?")
print(response.text)

// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result

Java


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
                .generativeModel("GEMINI_MODEL_NAME",
                        null,
                        null,
                        // Provide Google Search as a tool that the model can use to generate its response
                        List.of(Tool.GoogleSearch()));

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

ListenableFuture response = model.generateContent("Who won the euro 2024?");
  Futures.addCallback(response, new FutureCallback() {
      @Override
      public void onSuccess(GenerateContentResponse result) {
          String resultText = result.getText();
          System.out.println(resultText);
      }

      @Override
      public void onFailure(Throwable t) {
          t.printStackTrace();
      }
  }, executor);

// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result

Web


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(
  ai,
  {
    model: "GEMINI_MODEL_NAME",
    // Provide Google Search as a tool that the model can use to generate its response
    tools: [{ googleSearch: {} }]
  }
);

const result = await model.generateContent("Who won the euro 2024?");

console.log(result.response.text());

// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result

Dart


import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_ai/firebase_ai.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_MODEL_NAME',
  // Provide Google Search as a tool that the model can use to generate its response
  tools: [
    Tool.googleSearch(),
  ],
);

final response = await model.generateContent([Content.text("Who won the euro 2024?")]);
print(response.text);

// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result

Единство

Поддержка Unity появится в следующей версии.

Узнайте, как выбрать модельподходящий для вашего варианта использования и приложения.

Для достижения наилучших результатов используйте температуру 1.0 (это значение по умолчанию для всех моделей 2,5). Узнайте, как задать температуру в настройках модели .

Как работает заземление с помощью поиска Google

При использовании инструмента GoogleSearch модель автоматически управляет всем рабочим процессом поиска, обработки и цитирования информации.

Вот рабочий процесс модели:

  1. Получение подсказки : Ваше приложение отправляет подсказку модели Gemini с включенным инструментом GoogleSearch .
  2. Анализ запроса : модель анализирует запрос и определяет, может ли Google Search улучшить свой ответ.
  3. Отправка запросов в Google Search : при необходимости модель автоматически генерирует один или несколько поисковых запросов и выполняет их.
  4. Обработка результатов поиска : модель обрабатывает результаты поиска Google и формулирует ответ на исходный запрос.
  5. Возвращает «обоснованный результат» : модель возвращает окончательный, удобный для пользователя ответ, основанный на результатах поиска Google. Этот ответ включает текстовый ответ модели и groundingMetadata с поисковыми запросами, результатами поиска и цитатами.

Обратите внимание, что использование Google Поиска в качестве инструмента для модели не обязывает модель всегда использовать его для генерации ответа. В таких случаях ответ не будет содержать объекта groundingMetadata и, следовательно, не будет считаться «обоснованным результатом».

Диаграмма, показывающая, как привязка к Google Search подразумевает взаимодействие модели с Google Search.

Понять обоснованный результат

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

Объект groundingMetadata в «обоснованном результате» содержит следующую информацию:

  • webSearchQueries : массив поисковых запросов, отправленных в Google Поиск. Эта информация полезна для отладки и понимания процесса рассуждений модели.

  • searchEntryPoint : Содержит HTML и CSS для отображения необходимых «подсказок поиска Google». Вам необходимо соблюдать требования к использованию «Grounding with Google Search» для выбранного вами поставщика API: Gemini Developer API или Vertex AI Gemini API (см. раздел «Условия обслуживания» в разделе «Условия обслуживания»). Подробнее об использовании и отображении обоснованных результатов см. далее на этой странице.

  • groundingChunks : Массив объектов, содержащих веб-источники ( uri и title ).

  • groundingSupports : массив фрагментов для связи text ответа модели с источниками в groundingChunks . Каждый фрагмент связывает текстовый segment (определяемый startIndex и endIndex ) с одним или несколькими индексами groundingChunkIndices . Это поле помогает создавать встроенные ссылки. Подробнее об использовании и отображении результата с привязкой к основе см. далее на этой странице.

Вот пример ответа, который включает объект groundingMetadata :

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "Spain won Euro 2024, defeating England 2-1 in the final. This victory marks Spain's record fourth European Championship title."
          }
        ],
        "role": "model"
      },
      "groundingMetadata": {
        "webSearchQueries": [
          "UEFA Euro 2024 winner",
          "who won euro 2024"
        ],
        "searchEntryPoint": {
          "renderedContent": "<!-- HTML and CSS for the search widget -->"
        },
        "groundingChunks": [
          {"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "aljazeera.com"}},
          {"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "uefa.com"}}
        ],
        "groundingSupports": [
          {
            "segment": {"startIndex": 0, "endIndex": 85, "text": "Spain won Euro 2024, defeatin..."},
            "groundingChunkIndices": [0]
          },
          {
            "segment": {"startIndex": 86, "endIndex": 210, "text": "This victory marks Spain's..."},
            "groundingChunkIndices": [0, 1]
          }
        ]
      }
    }
  ]
}

Используйте и отображайте обоснованный результат

Если модель использует инструмент поиска Google для генерации ответа, она предоставит в ответе объект groundingMetadata .

Требуется для отображения подсказок поиска Google и рекомендуется для отображения цитат .

Помимо соответствия требованиям использования инструмента поиска Google, отображение этой информации помогает вам и вашим конечным пользователям проверять ответы и открывает возможности для дальнейшего обучения.

(Обязательно) Отображать предложения поиска Google

Если ответ содержит «Предложения поиска Google», то вам необходимо соблюдать требования к использованию «Основания с поиском Google», которые включают в себя способ отображения предложений поиска Google.

Объект groundingMetadata содержит «предложения поиска Google», в частности поле searchEntryPoint , которое имеет поле renderedContent , обеспечивающее совместимые стили HTML и CSS, которые необходимо реализовать для отображения предложений поиска в вашем приложении.

Подробную информацию о требованиях к отображению и поведению подсказок поиска Google см. в документации Google Cloud . Обратите внимание: хотя это подробное руководство и содержится в документации Vertex AI Gemini API , оно применимо и к поставщику Gemini Developer API .

См. примеры кода далее в этом разделе.

(Рекомендуется) Отображать цитаты

Объект groundingMetadata содержит структурированные данные о цитировании, в частности поля groundingSupports и groundingChunks . Используйте эту информацию, чтобы напрямую связать утверждения модели с их источниками в вашем пользовательском интерфейсе (встроенными и агрегированными).

См. примеры кода далее в этом разделе.

Примеры кодов

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

Быстрый

// ...

// Get the model's response
let text = response.text

// Get the grounding metadata
if let candidate = response.candidates.first,
   let groundingMetadata = candidate.groundingMetadata {
  // REQUIRED - display Google Search suggestions
  // (renderedContent contains HTML and CSS for the search widget)
  if let renderedContent = groundingMetadata.searchEntryPoint?.renderedContent {
    // TODO(developer): Display Google Search suggestions using a WebView
  }

  // RECOMMENDED - display citations
  let groundingChunks = groundingMetadata.groundingChunks
  for chunk in groundingMetadata.groundingChunks {
    if let web = chunk.web {
      let title = web.title  // for example, "uefa.com"
      let uri = web.uri  // for example, "https://vertexaisearch.cloud.google.com..."
      // TODO(developer): show citation in the UI
    }
  }
}

Kotlin

// ...

// Get the model's response
val text = response.text

// Get the grounding metadata
val groundingMetadata = response.candidates.firstOrNull()?.groundingMetadata

// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
val renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent
if (renderedContent != null) {
    // TODO(developer): Display Google Search suggestions using a WebView
}

// RECOMMENDED - display citations
val groundingChunks = groundingMetadata?.groundingChunks
groundingChunks?.let { chunks ->
  for (chunk in chunks) {
  	val title = chunk.web?.title  // for example, "uefa.com"
	val uri = chunk.web?.uri  // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
  }
}

Java

// ...

Futures.addCallback(response, new FutureCallback() {
  @Override
  public void onSuccess(GenerateContentResponse result) {
  // Get the model's response
  String text = result.getText();

  // Get the grounding metadata
  GroundingMetadata groundingMetadata =
  result.getCandidates()[0].getGroundingMetadata();

  if (groundingMetadata != null) {
    // REQUIRED - display Google Search suggestions
  // (renderedContent contains HTML and CSS for the search widget)
    String renderedContent =
  groundingMetadata.getSearchEntryPoint().getRenderedContent();
    if (renderedContent != null) {
      // TODO(developer): Display Google Search suggestions using a WebView
    }

    // RECOMMENDED - display citations
    List chunks = groundingMetadata.getGroundingChunks();
    if (chunks != null) {
      for(GroundingChunk chunk : chunks) {
        WebGroundingChunk web = chunk.getWeb();
        if (web != null) {
          String title = web.getTitle();  // for example, "uefa.com"
          String uri = web.getUri();  // for example, "https://vertexaisearch.cloud.google.com..."
          // TODO(developer): show citation in the UI
        }
      }
    }
  }
  }

  @Override
  public void onFailure(Throwable t) {
  t.printStackTrace();
  }
  }, executor);

Web

// ...

// Get the model's text response
const text = result.response.text();

// Get the grounding metadata
const groundingMetadata = result.response.candidates?.[0]?.groundingMetadata;

// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
const renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent;
if (renderedContent) {
  // TODO(developer): render this HTML and CSS in the UI
}

// RECOMMENDED - display citations
const groundingChunks = groundingMetadata?.groundingChunks;
if (groundingChunks) {
  for (const chunk of groundingChunks) {
    const title = chunk.web?.title;  // for example, "uefa.com"
    const uri = chunk.web?.uri;  // for example, "https://vertexaisearch.cloud.google.com..."
    // TODO(developer): show citation in the UI
  }
}

Dart

// ...

// Get the model's response
final text = response.text;

// Get the grounding metadata
final groundingMetadata = response.candidates.first.groundingMetadata;

// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
final renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent;
if (renderedContent != null) {
    // TODO(developer): Display Google Search suggestions using a WebView
}

// RECOMMENDED - display citations
final groundingChunks = groundingMetadata?.groundingChunks;
if (groundingChunks != null) {
  for (var chunk in groundingChunks) {
    final title = chunk.web?.title;  // for example, "uefa.com"
    final uri = chunk.web?.uri;  // for example, "https://vertexaisearch.cloud.google.com..."
    // TODO(developer): show citation in the UI
  }
}

Единство

Поддержка Unity появится в следующей версии.

Наземные результаты и мониторинг ИИ в консоли Firebase

Если вы включили мониторинг с помощью ИИ в консоли Firebase , ответы хранятся в Cloud Logging . По умолчанию эти данные хранятся 30 дней.

Вы несете ответственность за то, чтобы этот срок хранения или любой другой установленный вами период полностью соответствовал вашему конкретному варианту использования и любым дополнительным требованиям к выбранному вами поставщику API Gemini : Gemini Developer API или Vertex AI Gemini API (см. раздел «Условия обслуживания» в разделе «Особые условия обслуживания»). Вам может потребоваться скорректировать срок хранения в Cloud Logging для соответствия этим требованиям.

Цены и ограничения

Обязательно ознакомьтесь с ценами, доступностью моделей и ограничениями для поиска Google в документации выбранного вами поставщика API Gemini : Gemini Developer API |Vertex AI Gemini API .