Căn cứ vào Google Maps

Tính năng bám sát nguồn với Google Maps kết nối một mô hình Gemini với dữ liệu không gian địa lý từ Google Maps để bạn có thể tạo chức năng nhận biết vị trí trong các ứng dụng của mình.

Việc tiếp đất bằng Google Maps mang lại những lợi ích sau:

  • Tăng độ chính xác về thông tin thực tế: Giảm hiện tượng ảo giác của mô hình bằng cách dựa vào cơ sở dữ liệu của Google về hơn 250 triệu địa điểm và doanh nghiệp thực tế.
  • Truy cập thông tin theo thời gian thực: Trả lời câu hỏi bằng dữ liệu trực tiếp, chẳng hạn như giờ hoạt động hiện tại và trạng thái theo thời gian thực của trạm sạc xe điện.
  • Cung cấp bối cảnh trực quan: Xây dựng niềm tin của người dùng bằng cách tích hợp các tiện ích bản đồ tương tác, ảnh và Chế độ xem đường phố ngay bên cạnh các tuyên bố dựa trên vị trí của mô hình.

Các mô hình được hỗ trợ

  • gemini-3.1-pro-preview
  • gemini-3-flash-preview
  • gemini-3.1-flash-lite
  • gemini-2.5-pro
  • gemini-2.5-flash
  • gemini-2.5-flash-lite

Ngôn ngữ được hỗ trợ

Xem các ngôn ngữ được hỗ trợ cho các mô hình Gemini.

Cung cấp thông tin cơ sở cho mô hình bằng Google Maps

Nhấp vào nhà cung cấp Gemini API để xem nội dung và mã dành riêng cho nhà cung cấp trên trang này.

Khi bạn tạo phiên bản GenerativeModel, hãy cung cấp GoogleMaps dưới dạng tool mà mô hình có thể dùng để tạo câu trả lời.

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.
    // (Optional) Set `enableWidget` to control whether the response contains a `googleMapsWidgetContextToken`.
    tools: [ { googleMaps: { enableWidget: true } } ],
    // 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',
  ),
);

// 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

Tìm hiểu cách chọn một mô hình phù hợp với trường hợp sử dụng và ứng dụng của bạn.

Để có kết quả lý tưởng, hãy sử dụng nhiệt độ 1.0 (đây là giá trị mặc định cho tất cả các mô hình Gemini 2.5 trở lên). Tìm hiểu cách đặt nhiệt độ trong cấu hình của mô hình.

Các phương pháp hay nhất và mẹo để cải thiện kết quả

Phần này mô tả một số phương pháp hay nhất chung để sử dụng tính năng Nền tảng với Google Maps, cũng như cách tận dụng các thuộc tính của địa điểm để cải thiện kết quả.

Các phương pháp chung hay nhất

  • Chỉ cung cấp công cụ khi cần: Để tối ưu hoá hiệu suất và chi phí, hãy chỉ cấp cho mô hình quyền truy cập vào công cụ Nền tảng với Google Maps khi trường hợp sử dụng có bối cảnh địa lý rõ ràng.

  • Cung cấp vị trí của người dùng: Để có được những câu trả lời phù hợp và được cá nhân hoá nhất (và khi biết vị trí của người dùng), hãy thêm vị trí của người dùng (sử dụng vĩ độ và kinh độ thông qua latLng) vào cấu hình công cụ Grounding bằng Google Maps.

  • Thông báo cho người dùng cuối: Thông báo rõ ràng cho người dùng cuối rằng dữ liệu Google Maps đang được dùng để trả lời các câu hỏi của họ. Cung cấp cho người dùng cuối các nguồn từ Google Maps là một yêu cầu về việc sử dụng dịch vụ đối với công cụ Grounding with Google Maps.

  • (Chỉ SDK web) Kết xuất tiện ích theo bối cảnh Google Maps: Tiện ích theo bối cảnh được kết xuất bằng mã thông báo bối cảnh googleMapsWidgetContextToken. Mã thông báo này được trả về trong phản hồi Gemini API và có thể dùng để kết xuất nội dung trực quan từ Google Maps. Để biết thêm thông tin về tiện ích theo bối cảnh, hãy xem phần Căn cứ vào tiện ích Google Maps trong tài liệu về Google Maps.

Sử dụng các thuộc tính địa điểm trong câu lệnh

Phần này liệt kê các thuộc tính của địa điểm được dùng để mô tả các vị trí và được Grounding bằng Google Maps dùng để tạo câu trả lời. Các thuộc tính này được dùng để xác định những loại câu hỏi mà tính năng Grounding with Google Maps có thể trả lời.

Thuộc tính mẫu của địa điểm

Danh sách này cung cấp thông tin mẫu theo bảng chữ cái về những thuộc tính của các địa điểm mà mô hình của bạn có thể dùng để tạo câu trả lời.

  • Địa chỉ
  • Nhận hàng ở lề đường
  • Thẻ ghi nợ
  • Khoảng cách
  • Bãi đỗ xe miễn phí
  • Nhạc sống
  • Thực đơn cho trẻ em
  • Giờ mở cửa
  • Các phương thức thanh toán (chẳng hạn như tiền mặt hoặc thẻ tín dụng)
  • Câu trả lời về địa điểm
  • Cho phép mang theo thú cưng
  • Phục vụ bia
  • Phục vụ đồ ăn chay
  • Có lối đi cho xe lăn
  • Wi-Fi

Câu trả lời về địa điểm là câu trả lời từ tính năng Grounding bằng Google Maps dựa trên thông tin lấy từ bài đánh giá của người dùng.

Ví dụ về câu lệnh sử dụng các thuộc tính của địa điểm

Các ví dụ sau đây sử dụng thuộc tính địa điểm trong câu lệnh về nhiều loại địa điểm. Tính năng bám sát nguồn bằng Google Maps sử dụng các thuộc tính để hiểu ý định của bạn, sau đó cung cấp câu trả lời phù hợp dựa trên dữ liệu được liên kết với các địa điểm trong Google Maps.

  • Lên kế hoạch cho bữa tối gia đình: Xác định xem một nhà hàng có phù hợp với gia đình hay không và nhà hàng đó có cung cấp dịch vụ thuận tiện hay không.

    • Câu hỏi mẫu: "The Italian Place" có phù hợp với trẻ em không và họ có cung cấp dịch vụ mang đi không? Mức phân loại của họ là gì?
  • Kiểm tra khả năng tiếp cận cho bạn bè: Xác định xem địa điểm có đáp ứng các nhu cầu cụ thể về khả năng tiếp cận hay không.

    • Câu lệnh ví dụ: Tôi cần một nhà hàng có lối vào cho xe lăn.
  • Tìm địa điểm ăn đêm: Tìm một cơ sở đang mở cửa và phục vụ một bữa ăn cụ thể vào một thời điểm nhất định.

    • Câu lệnh ví dụ: "Burger Joint" có đang mở cửa không? Họ có phục vụ bữa tối không? Giờ mở cửa của họ vào thứ Sáu là mấy giờ?
  • Gặp gỡ khách hàng để uống cà phê: Đánh giá mức độ phù hợp của một quán cà phê cho cuộc họp kinh doanh dựa trên các tiện nghi, sản phẩm/dịch vụ và phương thức thanh toán.

    • Ví dụ về câu lệnh: "Cafe Central" có Wi-Fi không? Họ có phục vụ cà phê không? Mức giá của họ là bao nhiêu và họ có chấp nhận thẻ tín dụng không?

Xin lưu ý rằng thông tin trong Google Maps Kết quả có căn cứ có thể khác với tình trạng thực tế của đường.

Cách hoạt động của tính năng Grounding với Google Maps

Khi bạn cung cấp công cụ GoogleMaps cho mô hình, mô hình sẽ tự động xử lý toàn bộ quy trình tìm kiếm, xử lý và trích dẫn thông tin.

Sau đây là quy trình làm việc của mô hình:

  1. Nhận câu lệnh: Ứng dụng của bạn gửi một câu lệnh đến mô hình Gemini khi công cụ GoogleMaps được bật.

  2. Phân tích câu lệnh: Mô hình phân tích câu lệnh và xác định xem Google Maps có thể cải thiện câu trả lời hay không, ví dụ: nếu câu lệnh chứa bối cảnh địa lý (chẳng hạn như "quán cà phê gần tôi", "bảo tàng ở San Francisco").

  3. Gọi công cụ: Mô hình, khi nhận ra ý định về vị trí địa lý, sẽ gọi công cụ Grounding with Google Maps.

  4. Gửi cụm từ tìm kiếm đến Google Maps: Dịch vụ Grounding with Google Maps (Căn cứ vào Google Maps) sẽ truy vấn Google Maps để tìm thông tin liên quan (ví dụ: địa điểm, bài đánh giá, ảnh, địa chỉ, giờ mở cửa).

    Bạn có thể tuỳ ý thêm vĩ độ và kinh độ vào cấu hình của công cụ (hoặc thậm chí chỉ cần thêm trực tiếp vào câu lệnh) để có kết quả Google Maps phù hợp và được cá nhân hoá hơn. Đây là một công cụ tìm kiếm bằng văn bản và hoạt động tương tự như khi bạn tìm kiếm trên Google Maps, trong đó các cụm từ tìm kiếm tại địa phương ("gần tôi") sẽ sử dụng toạ độ, còn các cụm từ tìm kiếm cụ thể hoặc không phải tại địa phương sẽ khó bị ảnh hưởng bởi vị trí rõ ràng.

  5. Xử lý kết quả Google Maps: Mô hình xử lý kết quả Google Maps và đưa ra câu trả lời cho câu lệnh ban đầu.

  6. Trả về Google Maps Kết quả có căn cứ: Mô hình trả về một câu trả lời cuối cùng, thân thiện với người dùng và có căn cứ dựa trên Google Maps kết quả. Câu trả lời này bao gồm:

    • Câu trả lời bằng văn bản của mô hình.
    • Một đối tượng groundingMetadata có kết quả và nguồn Google Maps.
    • (Chỉ dành cho Web SDK) Bạn có thể chọn sử dụng googleMapsWidgetContextToken để hiển thị một tiện ích Google Maps theo bối cảnh trong ứng dụng của mình để tương tác trực quan. Để biết thêm thông tin về tiện ích theo bối cảnh, hãy xem phần Căn cứ vào tiện ích Google Maps trong tài liệu về Google Maps.

Xin lưu ý rằng việc cung cấp Google Maps làm công cụ cho mô hình không yêu cầu mô hình luôn sử dụng công cụ Google Maps để tạo câu trả lời. Trong những trường hợp này, phản hồi sẽ không chứa đối tượng groundingMetadata và do đó, đây không phải là Google Maps Kết quả có căn cứ.

Tìm hiểu kết quả có căn cứ

Nếu mô hình dựa vào kết quả Google Maps để đưa ra câu trả lời, thì câu trả lời sẽ bao gồm một đối tượng groundingMetadata chứa dữ liệu có cấu trúc cần thiết để xác minh các tuyên bố và xây dựng trải nghiệm nguồn phong phú trong ứng dụng của bạn.

Đối tượng groundingMetadata trong Google Maps Kết quả có cơ sở chứa thông tin sau:

  • groundingChunks: Một mảng các đối tượng chứa các nguồn maps (uri, placeIdtitle).
  • groundingSupports: Một mảng các đoạn để kết nối phản hồi của mô hình text với các nguồn trong groundingChunks. Mỗi đoạn liên kết một văn bản segment (do startIndexendIndex xác định) với một hoặc nhiều groundingChunkIndices. Trường này giúp bạn tạo đường liên kết đến nguồn cùng dòng. Tìm hiểu cách đáp ứng các yêu cầu về việc sử dụng dịch vụ ở phần sau của trang này.
  • (Chỉ dành cho Web SDK) googleMapsWidgetContextToken: Mã thông báo văn bản có thể dùng để hiển thị một tiện ích Places theo bối cảnh. Trường này chỉ được trả về khi bạn sử dụng Web SDK và nếu bạn đã đặt tham số enableWidget thành true.

Sau đây là một ví dụ về phản hồi bao gồm đối tượng 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]
          }
        ],
        "googleMapsWidgetContextToken": "widgetcontent/..."
      }
    }
  ]
}

Yêu cầu về việc sử dụng dịch vụ

Phần này mô tả các yêu cầu về việc sử dụng dịch vụ cho tính năng Grounding with Google Maps đối với nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API hoặc Vertex AI Gemini API (xem phần Điều khoản dịch vụ trong Điều khoản dành riêng cho từng dịch vụ).

Thông báo cho người dùng về các nguồn Google Maps

Với mỗi Google Maps Kết quả có căn cứ, bạn sẽ nhận được các nguồn trong groundingChunks hỗ trợ từng câu trả lời. Siêu dữ liệu sau đây cũng được trả về:

  • uri nguồn
  • tiêu đề
  • giấy tờ tùy thân

Trong ứng dụng của mình, khi trình bày kết quả từ tính năng Grounding with Google Maps, bạn phải chỉ định các nguồn Google Maps được liên kết và thông báo cho người dùng về những điều sau:

  • Các nguồn Google Maps phải nằm ngay sau nội dung được tạo mà các nguồn đó hỗ trợ. Nội dung được tạo này còn được gọi là Google Maps Kết quả có căn cứ.

  • Người dùng phải xem được các nguồn Google Maps trong một lượt tương tác của người dùng.

Sau đây là cách lấy các giá trị để hiển thị nguồn từ Google Maps Kết quả có căn cứ:

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
    }
  }
}

Đối với mỗi nguồn trong groundingChunks, bạn phải tạo bản xem trước đường liên kết theo các yêu cầu sau:

  • Phân bổ từng nguồn cho Google Maps theo Google Maps nguyên tắc phân bổ văn bản.
  • Hiển thị tiêu đề nguồn có trong câu trả lời.
  • Liên kết đến nguồn bằng cách sử dụng uri trong câu trả lời.

Câu lệnh có câu trả lời cho thấy nguồn

Bạn có thể thu gọn chế độ xem nguồn.

Câu lệnh có câu trả lời và nguồn được thu gọn

Nếu muốn, bạn có thể cải thiện bản xem trước đường liên kết bằng nội dung bổ sung, chẳng hạn như:

  • Một biểu tượng Google Maps favicon được chèn trước phần ghi công văn bản Google Maps.
  • Ảnh từ URL nguồn (og:image).

Để biết thêm thông tin về một số nhà cung cấp dữ liệu Google Maps và các điều khoản cấp phép của họ, hãy xem Thông báo pháp lý của Google Maps và Google Earth.

Google Maps nguyên tắc về văn bản ghi công

Khi ghi nguồn cho Google Maps trong văn bản, hãy tuân theo các nguyên tắc sau:

  • Đừng sửa đổi văn bản Google Maps theo bất kỳ cách nào:

    • Đừng thay đổi cách viết hoa của văn bản Google Maps.
    • Đừng xuống dòng văn bản Google Maps thành nhiều dòng.
    • Đừng bản địa hoá văn bản Google Maps sang ngôn ngữ khác.
    • Ngăn trình duyệt dịch văn bản Google Maps bằng cách sử dụng thuộc tính HTML translate="no".
  • Tạo kiểu cho văn bản Google Maps như mô tả trong bảng sau:

    Tài sản Phong cách
    Bộ phông chữ Roboto. Bạn không bắt buộc phải tải phông chữ.
    Bộ phông chữ dự phòng Mọi phông chữ không chân đã được dùng trong sản phẩm của bạn hoặc "Sans-Serif" để gọi phông chữ hệ thống mặc định
    Kiểu phông chữ Bình thường
    Độ đậm phông chữ 400
    Màu phông chữ Trắng, đen (#1F1F1F) hoặc xám (#5E5E5E). Duy trì độ tương phản dễ tiếp cận (4,5:1) so với nền.
    Cỡ chữ Cỡ chữ tối thiểu: 12sp
    Cỡ chữ tối đa: 16sp
    Để tìm hiểu về sp, hãy xem phần Đơn vị cỡ chữ trên trang web Material Design.
    Giãn cách Bình thường

Ví dụ về CSS

CSS sau đây sẽ hiển thị văn bản Google Maps với kiểu chữ và màu sắc phù hợp trên nền trắng hoặc nền sáng.

@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;
}

Lưu mã thông báo ngữ cảnh và mã địa điểm vào bộ nhớ đệm

Google Maps Kết quả có căn cứ có thể bao gồm mã thông báo ngữ cảnh và mã địa điểm. Bạn có thể lưu vào bộ nhớ đệm, lưu trữ và xuất dữ liệu phản hồi sau:

  • (Chỉ Web SDK) googleMapsWidgetContextToken
  • placeId

Các quy định hạn chế đối với việc lưu vào bộ nhớ đệm trong Điều khoản Kết nối với Google Maps không áp dụng cho dữ liệu này.

Hoạt động và lãnh thổ bị cấm

Tính năng tiếp đất bằng Google Maps có thêm các hạn chế đối với một số nội dung và hoạt động nhất định để duy trì một nền tảng an toàn và đáng tin cậy. Ngoài các hạn chế về việc sử dụng trong Điều khoản dành cho nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API hoặc Vertex AI Gemini API (xem phần Điều khoản dịch vụ trong Điều khoản dành riêng cho dịch vụ).

  • Bạn sẽ không sử dụng tính năng Ngừng hoạt động với Google Maps cho các hoạt động có mức độ rủi ro cao, kể cả dịch vụ ứng phó khẩn cấp.

  • Bạn sẽ không phân phối hoặc tiếp thị ứng dụng cung cấp tính năng Grounding bằng Google Maps ở Lãnh thổ bị cấm. Để biết thêm thông tin, hãy xem Các lãnh thổ bị cấm của Google Maps Platform. Danh sách Các lãnh thổ bị cấm có thể được cập nhật tuỳ từng thời điểm.

Kết quả dựa trên thông tin thực tế và hoạt động giám sát bằng AI trong bảng điều khiển Firebase

Nếu bạn đã bật tính năng giám sát bằng AI trong bảng điều khiển Firebase, thì các câu trả lời sẽ được lưu trữ trong Cloud Logging. Theo mặc định, dữ liệu này có khoảng thời gian lưu giữ là 30 ngày.

Bạn có trách nhiệm đảm bảo rằng khoảng thời gian lưu giữ này hoặc bất kỳ khoảng thời gian tuỳ chỉnh nào mà bạn đặt đều hoàn toàn phù hợp với trường hợp sử dụng cụ thể của bạn và mọi yêu cầu bổ sung về việc tuân thủ đối với nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API hoặc Vertex AI Gemini API (xem phần Điều khoản dịch vụ trong Điều khoản dành riêng cho từng dịch vụ). Bạn có thể cần phải điều chỉnh khoảng thời gian lưu giữ trong Cloud Logging để đáp ứng những yêu cầu này.

Mức giá và hạn mức

Việc đưa ra thông tin cơ sở với mức giá Google Maps dựa trên các cụm từ tìm kiếm. Yêu cầu chỉ được tính vào hạn mức Google Maps khi một câu lệnh thành công trả về ít nhất một Google Maps Kết quả có căn cứ (nghĩa là phản hồi chứa ít nhất một nguồn Google Maps). Nếu nhiều truy vấn được gửi đến Google Maps từ một yêu cầu duy nhất, thì yêu cầu đó sẽ được tính là một yêu cầu trong giới hạn về tốc độ.

Hãy nhớ xem kỹ thông tin chi tiết về giá, phạm vi cung cấp mô hình và hạn mức cho tính năng Cơ sở dữ liệu với Google Maps trong tài liệu của nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API | Vertex AI Gemini API.