Căn cứ vào Google Maps

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

Tính năng dựa trên dữ liệu của Google Maps mang lại những lợi ích sau:

  • Tăng độ chính xác về mặt thực tế: Giảm hiện tượng mô hình tạo ra thông tin không có thật bằng cách dựa trên cơ sở dữ liệu của Google về hơn 250 triệu địa điểm và doanh nghiệp trong thế giới thực.
  • 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ờ mở cửa hiện tại và trạng thái theo thời gian thực của các trạm sạc xe điện.
  • Cung cấp bối cảnh trực quan: Xây dựng lòng 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 thông tin dựa trên vị trí của mô hình.

Mô hình được hỗ trợ

  • gemini-3.1-pro-preview
  • gemini-3.5-flash
  • 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 mô hình Gemini.

Dựa trên dữ liệu của Google Maps cho mô hình

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

Khi bạn tạo thực thể GenerativeModel, hãy cung cấp GoogleMaps làm tool mà mô hình có thể sử 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ô hình phù hợp với trường hợp sử dụng và ứng dụng của bạn.

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 dựa trên dữ liệu với Google Maps, cũng như cách tận dụng thuộc tính đị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ỉ cung cấp cho mô hình quyền truy cập vào công cụ dựa trên dữ liệu của 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â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 đưa 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ụ dựa trên dữ liệu của 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 sử dụng để trả lời câu hỏi của họ. Việc 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ụ dựa trên dữ liệu của Google Maps.

  • (Chỉ SDK web) Kết xuất tiện ích theo bối cảnh của Google Maps: Tiện ích theo bối cảnh được kết xuất bằng mã thông báo theo bối cảnh, googleMapsWidgetContextToken. Mã thông báo này được trả về trong câu trả lời của 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 Tiện ích dựa trên dữ liệu của Google Maps trong tài liệu về Google Maps.

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

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

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

Danh sách này cung cấp mẫu thuộc tính về địa điểm theo bảng chữ cái mà mô hình của bạn có thể sử 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
  • 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 của tính năng dựa trên dữ liệu của Google Maps dựa trên thông tin lấy từ bài đánh giá của người dùng.

Câu lệnh mẫu sử dụng thuộc tính đị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 dựa trên dữ liệu của 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 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à liệu nhà hàng đó có cung cấp dịch vụ tiện lợi hay không.

    • Câu lệnh 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 về không? Xếp hạng của họ là bao nhiêu?
  • Kiểm tra khả năng tiếp cận cho một người bạn: 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 mẫu: Tôi cần một nhà hàng có lối vào cho xe lăn.
  • Tìm địa điểm để ăn nhẹ vào đêm muộn: Tìm một cơ sở đang mở cửa và phục vụ một bữa ăn cụ thể trong một khoảng thời gian cụ thể.

    • Câu lệnh mẫu: "Burger Joint" có mở cửa vào lúc này 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à bao nhiêu?
  • 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, dịch vụ và phương thức thanh toán.

    • Câu lệnh mẫu: "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ả dựa trên dữ liệu có thể khác với điều kiện thực tế của đường.

Cách hoạt động của tính năng dựa trên dữ liệu với Google Maps

Khi bạn cung cấp cho mô hình công cụ GoogleMaps, 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 của mô hình:

  1. Nhận câu lệnh: Ứng dụng của bạn gửi 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, chẳng hạn như nếu câu lệnh chứa bối cảnh địa lý (như "quán cà phê gần tôi", "bảo tàng ở San Francisco").

  3. Gọi công cụ: Mô hình, nhận ra ý định địa lý, sẽ gọi công cụ dựa trên dữ liệu của Google Maps.

  4. Gửi truy vấn đến Google Maps: Dịch vụ dựa trên dữ liệu của Google Maps 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ỳ ý đưa vĩ độ và kinh độ vào cấu hình của công cụ (hoặc thậm chí chỉ trong câu lệnh) để có kết quả phù hợp và được cá nhân hoá hơn Google Maps. Công cụ 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ư tìm kiếm trên Google Maps, trong đó các truy vấn tại địa phương ("gần tôi") sẽ sử dụng toạ độ, còn các truy vấn cụ thể hoặc không phải tại địa phương sẽ ít 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ả dựa trên dữ liệu: Mô hình trả về câu trả lời cuối cùng, thân thiện với người dùng và dựa trên kết quả Google Maps. 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.
    • Đối tượng groundingMetadata có kết quả Google Maps và nguồn.
    • (Chỉ SDK web) Tuỳ ý googleMapsWidgetContextToken cho phép bạn kết xuất tiện ích theo ngữ cảnh Google Maps trong ứng dụng để 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 Tiện ích dựa trên dữ liệu của Google Maps widget 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, câu trả lời sẽ không chứa đối tượng groundingMetadata và do đó câu trả lời đó không phảiGoogle Maps Kết quả dựa trên dữ liệu.

Tìm hiểu kết quả dựa trên dữ liệu

Nếu mô hình dựa trên câu trả lời của mình vào kết quả Google Maps, thì câu trả lời sẽ bao gồm đối tượng groundingMetadata chứa dữ liệu có cấu trúc cần thiết để xác minh thông tin 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 Kết quả dựa trên dữ liệuGoogle Maps Grounded Result chứa các thông tin sau:

  • groundingChunks: Một mảng đố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 câu trả lời text của mô hình với các nguồn trong groundingChunks. Mỗi đoạn liên kết một segment văn bản (được xác định bởi startIndexendIndex) với một hoặc nhiều groundingChunkIndices. Trường này giúp bạn xây dựng các đường liên kết nguồn nội tuyến. 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 trên trang này.
  • (Chỉ SDK web) googleMapsWidgetContextToken: Mã thông báo văn bản có thể dùng để kết xuất tiện ích Địa điểm theo bối cảnh. Trường này chỉ được trả về khi bạn sử dụng SDK web và nếu bạn đã đặt tham số enableWidget thành true.

Dưới đây là câu trả lời mẫu 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ụ đối với tính năng dựa trên dữ liệu của Google Maps cho nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API hoặc Vertex AI Gemini API (xem Điều khoản dịch vụ trong Điều khoản dành riêng cho 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ả dựa trên dữ liệu, 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 bạn, khi trình bày kết quả từ tính năng dựa trên dữ liệu của Google Maps, bạn phải chỉ định các nguồn liên kết của Google Maps 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ả dựa trên dữ liệu.

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

Sau đây là cách lấy các giá trị để hiển thị nguồn từ Google Maps Kết quả dựa trên dữ liệu:

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 cung cấp trong câu trả lời.
  • Liên kết đến nguồn bằng uri trong câu trả lời.

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

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

Câu lệnh có phản hồ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 Google Maps favicon được chèn trước thông tin phân bổ 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à đ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 phân bổ văn bản

Khi bạn phân bổ 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 chuyển văn bản Google Maps sang 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 Bất kỳ phông chữ không chân nào đã được sử dụng trong sản phẩm của bạn hoặc "Sans-Serif" để gọi phông chữ mặc định của hệ thống
    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 có thể 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 kết xuất 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 vào bộ nhớ đệm mã thông báo theo bối cảnh và mã địa điểm

Kết quả dựa trên dữ liệu của Google Maps Google Maps có thể bao gồm mã thông báo theo bối 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 câu trả lời sau:

  • (Chỉ SDK web) 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 về tính năng dựa trên dữ liệu của 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 dựa trên dữ liệu của Google Maps có các quy định hạn chế bổ sung đối với một số nội dung và hoạt động để duy trì một nền tảng an toàn và đáng tin cậy. Ngoài các quy định 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 Điều khoản dịch vụ phần 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 dựa trên dữ liệu của Google Maps cho các hoạt động có rủi ro cao bao gồm 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 dựa trên dữ liệu của Google Maps với Google Maps ở Lãnh thổ bị cấm. Để biết thêm thông tin, hãy xem phần Lãnh thổ bị cấm của Google Maps Platform. Danh sách Lãnh thổ bị cấm có thể được cập nhật theo thời gian.

Kết quả dựa trên dữ liệu và tính năng giám sát AI trong bảng điều khiển của Firebase

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

Bạn có trách nhiệm đảm bảo rằ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 Điều khoản dịch vụ trong Điều khoản dành riêng cho dịch vụ). Bạn có thể cần điều chỉnh thời gian lưu giữ trong Cloud Logging để đáp ứng các yêu cầu này.

Giá và hạn mức về giá

Giá của tính năng dựa trên dữ liệu của Google Maps được tính dựa trên các truy vấn. Yêu cầu chỉ được tính vào hạn mức của Google Maps khi câu lệnh trả về thành công ít nhất một Google Maps Kết quả dựa trên dữ liệu (nghĩa là câu trả lời chứa ít nhất một nguồn của Google Maps). Nếu nhiều truy vấn được gửi đến Google Maps từ một yêu cầu, thì yêu cầu đó sẽ được tính là một yêu cầu theo hạn mức về giá.

Hãy nhớ xem 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 dựa trên dữ liệu của Google Maps trong tài liệu về nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API | Vertex AI Gemini API.