Обоснование с помощью
Обоснование с помощью
- Повысить фактическую точность. Уменьшить количество галлюцинаций модели, основывая ответы на базе данных Google, в которой содержится информация более чем о 250 миллионах реальных мест и компаний.
- Получать информацию в реальном времени. Отвечайте на вопросы, используя актуальные данные, например текущие часы работы компании и статус станций зарядки ЭМ.
- Указывать источники. Повышайте доверие пользователей, показывая
Google Maps источники информации о местах и ссылки прямо рядом с утверждениями модели, основанными на местоположении.
Поддерживаемые модели
gemini-3.1-pro-previewgemini-3.8-flash(а также более старые версииgemini-3.7-flash,gemini-3.6-flashиgemini-3.5-flash)gemini-3.5-flash-lite(и более ранние версии, напримерgemini-3.1-flash-lite)
Модели общего назначения Gemini 2.5 поддерживают эту функцию, но все они устарели.
Поддерживаемые языки
Ознакомьтесь со списком поддерживаемых языков для моделей Gemini.
Как использовать Google Maps для обоснования ответов модели
|
Нажмите на поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему. |
При создании экземпляра GenerativeModel укажите GoogleMaps в качестве tool, которое модель может использовать для создания ответа.
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Example: Coordinates for New York City
let latAndLong = CLLocationCoordinate2D(latitude: 40.7128, longitude: -74.0060)
// (Optional) Define a RetrievalConfig to configure the Grounding with Google Maps tool.
// You can optionally provide a location's coordinates and/or a language code
// for more relevant and personalized Google Maps results.
let retrievalConfig = RetrievalConfig(
location: latAndLong,
// Example: Language code for English (US).
languageCode: "en-US"
)
// Wrap the RetrievalConfig inside a ToolConfig.
let toolConfig = ToolConfig(retrievalConfig: retrievalConfig)
// Create a `GenerativeModel` instance with a model that supports your use case.
let model = ai.generativeModel(
modelName: "GEMINI_MODEL_NAME",
// Provide Google Maps as a tool that the model can use to generate its response.
tools: [Tool.googleMaps()],
// Add the configuration for the Grounding with Google Maps tool
// (if this optional config was defined above).
toolConfig: toolConfig
)
let response = try await model.generateContent("restaurants near me?")
print(response.text ?? "No text in response.")
// Make sure to comply with the "Grounding with Google Maps " usage requirements,
// which includes how you meet service usage requirements
Kotlin
// (Optional) Define a RetrievalConfig to configure the Grounding with Google Maps tool.
// You can optionally provide a location's coordinates and/or a language code
// for more relevant and personalized Google Maps results.
val retrievalConfig = RetrievalConfig(
// Example: Coordinates for New York City
latLng = LatLng(latitude = 40.7128, longitude = -74.0060),
// Example: Language code for English (US)
languageCode = "en-US"
)
// Wrap the RetrievalConfig inside a ToolConfig.
val toolConfig = ToolConfig(
retrievalConfig = retrievalConfig
)
// 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",
// Add the configuration for the Grounding with Google Maps tool
// (if this optional config was defined above).
toolConfig = toolConfig,
// Provide Google Maps as a tool that the model can use to generate its response.
tools = listOf(Tool.googleMaps())
)
val response = model.generateContent("restaurants near me?")
print(response.text)
// Make sure to comply with the "Grounding with Google Maps " usage requirements,
// which includes how you meet service usage requirements
Java
// (Optional) Define a ToolConfig to configure the Grounding with Google Maps tool.
// You can optionally provide a location's coordinates and/or a language code
// for more relevant and personalized Google Maps results.
ToolConfig toolConfig = new ToolConfig(
null,
new RetrievalConfig(
// Example: Coordinates for New York City.
new LatLng(40.7128, -74.0060),
// Example: Language code for English (US).
"en-US"
)
);
// 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 Maps as a tool that the model can use to generate its response.
List.of(Tool.googleMaps()),
// Add the configuration for the Grounding with Google Maps tool
// (if this optional config was defined above).
toolConfig);
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs.
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
ListenableFuture response = model.generateContent("restaurants near me?");
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 Maps " usage requirements,
// which includes how you meet service usage requirements
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() });
// (Optional) Define a toolConfig to configure the Grounding with Google Maps tool.
// You can optionally provide a location's coordinates and/or a language code
// for more relevant and personalized Google Maps results.
const toolConfig = {
retrievalConfig: {
// Example: Coordinates for New York City
latLng: {
latitude: 40.7128,
longitude: -74.0060
},
// Example: Language code for English (US)
languageCode: 'en-US'
}
};
// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(
ai,
{
model: "GEMINI_MODEL_NAME",
// Provide Google Maps as a tool that the model can use to generate its response.
tools: [ { googleMaps: {} } ],
// Add the configuration for the Grounding with Google Maps tool
// (if this optional config was defined above).
toolConfig
}
);
const result = await model.generateContent("restaurants near me?");
console.log(result.response.text());
// Make sure to comply with the "Grounding with Google Maps " usage requirements,
// which includes how you meet service usage requirements
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,
);
// (Optional) Define a ToolConfig to configure the Grounding with Google Maps tool.
// You can optionally provide a location's coordinates and/or a language code
// for more relevant and personalized Google Maps results.
final toolConfig = ToolConfig(
retrievalConfig: RetrievalConfig(
// Example: Coordinates for New York City.
latLng: LatLng(latitude: 40.712728, longitude: -74.006015),
// Example: Language code for English (US).
languageCode: 'en-US',
),
);
// 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 Maps as a tool that the model can use to generate its response.
tools: [
Tool.googleMaps(),
],
// Add the configuration for the Grounding with Google Maps tool
// (if this optional config was defined above).
toolConfig: toolConfig,
);
final response = await model.generateContent([Content.text("restaurants near me?")]);
print(response.text);
// Make sure to comply with the "Grounding with Google Maps " usage requirements,
// which includes how you meet service usage requirements
Unity
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Example: Coordinates for New York City
var latLng = new LatLng(40.7128, -74.0060);
// (Optional) Define a RetrievalConfig to configure the Grounding with Google Maps tool.
// You can optionally provide a location's coordinates and/or a language code
// for more relevant and personalized Google Maps results.
var retrievalConfig = new RetrievalConfig(latLng, languageCode: "en");
// Wrap the RetrievalConfig inside a ToolConfig.
var toolConfig = new ToolConfig(retrievalConfig: retrievalConfig);
// Create a `GenerativeModel` instance with a model that supports your use case.
var model = ai.GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
// Provide Google Maps as a tool that the model can use to generate its response.
tools: new[] { new Tool(new GoogleMaps()) },
// Add the configuration for the Grounding with Google Maps tool
// (if this optional config was defined above).
toolConfig: toolConfig
);
var response = await model.GenerateContentAsync("restaurants near me?");
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
// Make sure to comply with the "Grounding with Google Maps " usage requirements,
// which includes how you meet service usage requirements
Узнайте, как выбрать модель для вашего приложения и варианта использования.
Советы и рекомендации по повышению эффективности
В этом разделе описаны общие рекомендации по использованию Grounding с
Общие рекомендации
Предоставляйте доступ к инструменту только при необходимости. Чтобы оптимизировать производительность и расходы, предоставляйте модели доступ к инструменту Grounding with
Google Maps только в тех случаях, когда у запроса есть четкий географический контекст.Укажите местоположение пользователя. Чтобы ответы были наиболее релевантными и персонализированными (если местоположение пользователя известно), добавьте его (с помощью широты и долготы через
latLng) в конфигурацию инструмента Grounding withGoogle Maps .Уведомляйте конечных пользователей. Четко сообщайте конечным пользователям, что для ответа на их запросы используются данные
Google Maps . Предоставление конечным пользователям источников изGoogle Maps является требованием к использованию сервиса для инструмента "Обоснование с помощьюGoogle Maps ".
Как использовать свойства мест в запросах
В этом разделе перечислены свойства мест, которые используются для описания местоположений и применяются в Grounding с
Примеры свойств мест
В этом списке в алфавитном порядке приведены некоторые свойства мест, которые модель может использовать для создания ответов.
- Адрес
- Заказ с улицы
- Дебетовая карта
- Расстояние
- Бесплатная парковка
- Живая музыка
- Детское меню
- Часы работы
- Способы оплаты, например наличные или кредитная карта.
- Ответы на вопросы о местах
- Можно с животными
- Пиво
- Вегетарианские блюда
- Доступ для инвалидов-колясочников
- Wi-Fi
Ответы о местах – это ответы от Grounding с
Примеры запросов, в которых используются свойства мест
В приведенных ниже примерах используются свойства мест в запросах о разных типах мест. При обосновании с помощью
Планирование семейного ужина. Узнайте, подходит ли ресторан для семейного отдыха и предлагает ли он удобные услуги.
- Пример запроса: Подходит ли ресторан "Итальянское место" для детей и можно ли заказать еду на вынос? Какой у него рейтинг?
Проверить доступность для друга. Узнайте, соответствует ли местоположение особым потребностям.
- Пример запроса: Мне нужен ресторан с входом, оборудованным пандусом.
Найти место, где можно перекусить ночью. Найти открытое заведение, где подают определенное блюдо в определенное время.
- Пример запроса: "Ресторан "Бургерная" сейчас открыт?" Здесь подают ужин? Какие у них часы работы в пятницу?
Встреча с клиентом в кафе. Оцените, подходит ли кафе для деловой встречи, учитывая удобства, ассортимент и способы оплаты.
- Пример запроса: Есть ли в кафе "Центральное" Wi-Fi? Здесь подают кофе? Какой у них уровень цен и принимают ли они кредитные карты?
Обратите внимание, что информация в
Как работает обоснование с помощью Google Maps
Если вы предоставите модели инструмент GoogleMaps, она автоматически выполнит все этапы поиска, обработки и цитирования информации.
Вот рабочий процесс модели:
Получает запрос. Ваше приложение отправляет запрос модели Gemini с включенным инструментом
GoogleMaps.Анализ запроса. Модель анализирует запрос и определяет, может ли
Google Maps улучшить ответ, например если запрос содержит географический контекст (например, "кофейни рядом со мной", "музеи в Сан-Франциско").Вызов инструмента. Модель распознает географическое намерение и вызывает инструмент Grounding with
Google Maps .Отправляет запросы в
Google Maps . Сервис Grounding withGoogle Maps отправляет запросы вGoogle Maps для получения релевантной информации (например, о местах, отзывах, фотографиях, адресах и часах работы).Вы можете добавить в конфигурацию инструмента (или даже в сам запрос) широту и долготу, чтобы получать более релевантные и персонализированные результаты.
Google Maps Этот инструмент текстового поиска работает так же, как поиск вGoogle Maps . В частности, местные запросы ("рядом со мной") будут использовать координаты, а на результаты поиска по конкретным или неместным запросам указанное местоположение вряд ли повлияет.Обрабатывает результаты
Google Maps . Модель обрабатывает результатыGoogle Maps и формулирует ответ на исходный запрос.Возвращает
Google Maps обоснованный результат – окончательный, удобный для пользователя ответ, основанный на результатахGoogle Maps . В ответе:- Текстовый ответ модели.
- Объект
groundingMetadataс результатамиGoogle Maps и источниками.
Обратите внимание, что предоставление groundingMetadata и, следовательно, не будет
Как интерпретировать обоснованный ответ
Если модель обосновывает свой ответ результатами поиска groundingMetadata, в котором хранятся структурированные данные, необходимые для проверки утверждений и создания в приложении расширенного источника.
Объект groundingMetadata в
groundingChunks– массив объектов, содержащих источникиmaps(uri,placeIdиtitle).groundingSupports: массив фрагментов, позволяющий связать ответ моделиtextс источниками вgroundingChunks. Каждый фрагмент связывает текстsegment(определенный вstartIndexиendIndex) с одним или несколькими объектамиgroundingChunkIndices. Это поле помогает создавать встроенные ссылки на источники. Подробнее о том, как соблюдать требования к использованию сервисов…
Ниже приведен пример ответа, содержащего объект groundingMetadata:
{
"candidates": [
{
"content": {
"parts": [
{
"text": "CanteenM is an American restaurant with..."
}
],
"role": "model"
},
"groundingMetadata": {
"groundingChunks": [
{
"maps": {
"uri": "https://maps.google.com/?cid=13100894621228039586",
"title": "Heaven on 7th Marketplace",
"placeId": "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
}
}
],
"groundingSupports": [
{
"segment": {
"startIndex": 0,
"endIndex": 79,
"text": "CanteenM is an American restaurant with a 4.6-star rating and is open 24 hours."
},
"groundingChunkIndices": [0]
}
]
}
}
]
}
Требования к использованию сервисов
В этом разделе описаны требования к использованию сервиса Grounding with
Уведомления об источниках Google Maps
В каждом groundingChunks, подтверждающие каждый ответ. Также возвращаются следующие метаданные:
- URI источника
- название
- ID
Когда вы показываете в приложении результаты, полученные с помощью функции Grounding с
Источники
Google Maps должны следовать сразу за сгенерированным контентом, который они подтверждают. Такой контент называетсяGoogle Maps обоснованным результатом.Источники с разметкой
Google Maps должны быть доступны в рамках одного взаимодействия с пользователем.
Вот как получить значения для отображения источников из
Swift
// ...
// Get the model's response
let text = response.text
// Get the grounding metadata
if let candidate = response.candidates.first,
let groundingMetadata = candidate.groundingMetadata {
// Get sources
let groundingChunks = groundingMetadata.groundingChunks
for chunk in groundingChunks {
if let maps = chunk.maps {
let title = maps.title // for example, "Heaven on 7th Marketplace"
let url = maps.url // for example, "https://maps.google.com/?cid=13100894621228039586"
let placeId = maps.placeId // for example, "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
// TODO(developer): show source in the UI
}
}
}
Kotlin
// ...
// Get the model's response
val text = response.text
// Get the grounding metadata
val groundingMetadata = response.candidates.firstOrNull()?.groundingMetadata
// Get sources
val groundingChunks = groundingMetadata?.groundingChunks
groundingChunks?.let { chunks ->
for (chunk in chunks) {
val title = chunk.maps?.title // for example, "Heaven on 7th Marketplace"
val uri = chunk.maps?.uri // for example, "https://maps.google.com/?cid=13100894621228039586"
val placeId = chunk.maps?.placeId // for example, "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
// TODO(developer): show source 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) {
// Get sources
List chunks = groundingMetadata.getGroundingChunks();
if (chunks != null) {
for(GroundingChunk chunk : chunks) {
GoogleMapsGroundingChunk maps = chunk.getMaps();
if (maps != null) {
String title = maps.getTitle(); // for example, "Heaven on 7th Marketplace"
String uri = maps.getUri(); // for example, "https://maps.google.com/?cid=13100894621228039586"
String placeId = maps.getPlaceId(); // for example, "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
// TODO(developer): show sources 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;
// Get sources
const groundingChunks = groundingMetadata?.groundingChunks;
if (groundingChunks) {
for (const chunk of groundingChunks) {
const title = chunk.maps?.title; // for example, "Heaven on 7th Marketplace"
const uri = chunk.maps?.uri; // for example, "https://maps.google.com/?cid=13100894621228039586"
const placeId = chunk.maps?.placeId; // for example, "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
// TODO(developer): show sources in the UI
}
}
Dart
// ...
// Get the model's response
final text = response.text;
// Get the grounding metadata
final groundingMetadata = response.candidates.first.groundingMetadata;
// Get sources
final groundingChunks = groundingMetadata?.groundingChunks;
if (groundingChunks != null) {
for (var chunk in groundingChunks) {
final title = chunk.maps?.title; // for example, "Heaven on 7th Marketplace"
final uri = chunk.maps?.uri; // for example, "https://maps.google.com/?cid=13100894621228039586"
final placeId = chunk.maps?.placeId; // for example, "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
// TODO(developer): show sources in the UI
}
}
Unity
// ...
// Get the model's response.
var text = response.Text;
// Get the grounding metadata.
var groundingMetadata = response.Candidates.First().GroundingMetadata;
// Get sources.
if (groundingMetadata != null) {
foreach(GroundingChunk chunk in groundingMetadata?.GroundingChunks) {
if (chunk.Maps != null) {
var title = chunk.Maps?.Title; // for example, "Heaven on 7th Marketplace"
var uri = chunk.Maps?.Uri; // for example, "https://maps.google.com/?cid=13100894621228039586"
var placeId = chunk.Maps?.PlaceId; // for example, "places/ChIJ0-zA1vBZwokRon0fGj-6z7U"
// TODO(developer): show sources in the UI
}
}
}
Показывать источники Google Maps со ссылками Google Maps
Для каждого источника в groundingChunks необходимо создать предварительный просмотр ссылки, соответствующий следующим требованиям:
- Укажите источник каждого изображения, добавив
Google Maps в соответствии сGoogle Maps правилами атрибуции текста. - Показывать название источника, указанное в ответе.
- Перейдите к источнику, используя
uriиз ответа.
Источники можно свернуть.
При желании вы можете добавить в предпросмотр ссылки дополнительный контент, например:
- A
Google Maps значок сайта вставлен перед текстомGoogle Maps . - Фотография из исходного URL (
og:image).
Дополнительную информацию о некоторых поставщиках данных
Google Maps правила в отношении текстового указания авторства
При указании источников в тексте
Не изменяйте текст
Google Maps:- Не меняйте регистр текста
Google Maps. - Не переносите текст
Google Mapsна несколько строк. - Не локализуйте текст
Google Mapsна другие языки. - Запретить браузерам переводить текст
Google Mapsможно с помощью HTML-атрибутаtranslate="no".
- Не меняйте регистр текста
Отформатируйте текст
Google Maps, как описано в таблице ниже.Ресурс Стиль Семейство шрифтов Roboto. Загружать шрифт необязательно. Резервное семейство шрифтов Любой шрифт без засечек, который уже используется в вашем продукте, или "Sans-Serif", чтобы вызвать системный шрифт по умолчанию. Стиль шрифта Обычный Насыщенность шрифта 400 Цвет шрифта белый, черный (#1F1F1F) или серый (#5E5E5E). Обеспечьте доступный контраст (4,5:1) с фоном. размер шрифта; Минимальный размер шрифта: 12sp
Максимальный размер шрифта: 16sp
Подробнее о единицах измерения размера шрифта можно узнать на сайте Material Design.Интервалы Обычный
Пример CSS
Ниже приведен код CSS, с помощью которого можно отобразить текст Google Maps на белом или светлом фоне с использованием подходящего шрифта, цвета и отступов.
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
.GMP-attribution {
font-family: Roboto, Sans-Serif;
font-style: normal;
font-weight: 400;
font-size: 1rem;
letter-spacing: normal;
white-space: nowrap;
color: #5e5e5e;
}
Кеширование идентификатора места
placeId
Ограничения на кеширование, указанные в Условиях использования Google Карт для обоснования ответов, не распространяются на эти данные.
Запрещенные действия и территории
При использовании функции "Обоснование" с
Вы не будете использовать Grounding с
Google Maps для действий, связанных с высоким риском, в том числе для вызова экстренных служб.Вы не будете распространять или продвигать приложение, предлагающее Grounding с
Google Maps , на Запрещенной территории. Подробнее о запрещенных территориях платформы Google Карт… Список запрещенных территорий может время от времени обновляться.
Обоснованные результаты и мониторинг ИИ в консоли Firebase
Если вы включили мониторинг ИИ в консоли Firebase, ответы будут храниться в Cloud Logging. По умолчанию эти данные хранятся 30 дней.
Вы несете ответственность за то, чтобы этот период хранения или любой заданный вами период полностью соответствовал вашему варианту использования и любым дополнительным требованиям к соблюдению нормативных требований для выбранного вами поставщика: Gemini APIGemini Developer API или Agent Platform Gemini API (formerly Vertex AI) (см. раздел Условия использования сервисов в Условиях использования сервисов Workspace). Возможно, вам потребуется изменить срок хранения в Cloud Logging, чтобы соответствовать этим требованиям.
Цены и ограничения частоты запросов
Обоснование с ценами
Ознакомьтесь с информацией о ценах, доступности моделей и лимитах для функции "Обоснование с помощью