Căn cứ vào Google Maps

Tính năng dựa trên dữ liệu thực tế của Google Maps kết nối mô hình Gemini với dữ liệu không gian địa lý của 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 thực tế của Google Maps có những lợi ích sau:

  • Tăng độ chính xác của thông tin thực tế: Giảm thiểu tình trạng ảo tưởng của mô hình bằng cách đưa ra câu trả lời 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ờ hoạt động 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 nguồn: Xây dựng lòng tin của người dùng bằng cách hiển thị Google Maps nguồn địa điểm và đường liên kết ngay bên cạnh các tuyên bố dựa trên vị trí của mô hình.

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

  • gemini-4-argon
  • gemini-3.8-flash (và các phiên bản cũ hơn là gemini-3.7-flash, gemini-3.6-flash và gemini-3.5-flash)
  • gemini-3.5-flash-lite (và gemini-3.1-flash-lite cũ hơn)

Các mô hình gemini-3.1-pro-preview và Gemini 2.5 đa năng (không còn được dùng nữa) cũng hỗ trợ tính năng này.

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 dữ liệu thực tế cho mô hình bằng Google Maps

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

Swift


import CoreLocation
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: [.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

Tìm hiểu cách chọn một mô hình (không bắt buộc) 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 Căn cứ vào dữ liệu thực tế 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 hay nhất nói chung

  • Chỉ cung cấp công cụ khi cần: Để tối ưu hoá hiệu suất và chi phí, chỉ cung cấp cho mô hình quyền truy cập vào công cụ Grounding with 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: Để nhận đượ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 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 with 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â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ụ Grounding with Google Maps.

Sử dụng 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 địa điểm dùng để mô tả vị trí và được tính năng Grounding with 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 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 một mẫu thuộc tính được sắp xếp theo thứ tự bảng chữ cái về những địa điểm 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
  • Không gây hại cho vật nuôi
  • 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 Xác minh thông tin 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 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ề các loại địa điểm khác nhau. Tính năng dựa trên dữ liệu thực tế với 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 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 lệnh mẫu: "The Italian Place" có phù hợp với trẻ em không và họ có bán đồ ăn mang đi không? Họ được đánh giá như thế nào?
  • Kiểm tra khả năng hỗ trợ 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 hỗ trợ tiếp cận hay không.

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

    • Câu lệnh mẫu: "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 khách hàng tại quán cà phê: Đánh giá mức độ phù hợp của một quán cà phê cho cuộc họp công việc dựa trên 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 thực tế có thể khác với tình trạng thực tế của đường đi.

Cách hoạt động của tính năng Tạo cơ sở bằng 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ý (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 về địa lý và gọi công cụ Grounding with Google Maps.

  4. Gửi truy vấn đến Google Maps: Dịch vụ Grounding with Google Maps truy vấn Google Maps để lấy 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) để nhận được kết quả phù hợp và phù hợp hơn với cá nhân.Google Maps Công cụ này là một công cụ tìm kiếm văn bản và hoạt động tương tự như tính năng 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ạ độ, trong khi các cụm từ tìm kiếm cụ thể hoặc không phải tại địa phương thì không có khả năng chịu ảnh hưởng của 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à dựa trên kết quả của Google Maps. Câu trả lời này bao gồm:

    • Câu trả lời dạng văn bản của mô hình.
    • Đối tượng groundingMetadata có kết quả và nguồn 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ả dựa trên dữ liệu thực tế.

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

Nếu mô hình dựa trên kết quả của 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 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 Google Maps Kết quả dựa trên dữ liệu thực tế chứa thông tin sau:

  • groundingChunks: Một mảng đối tượng chứa các nguồn maps (uri, placeId và title).
  • 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 (được xác định bằng startIndex và endIndex) 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 trong 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.

Dưới đây là ví dụ về phản hồi có chứa đố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]
          }
        ]
      }
    }
  ]
}

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 Tạo sinh dựa trên dữ liệu thực tế bằng Google Maps cho nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API hoặc Agent Platform Gemini API (formerly Vertex AI) (xem phần Đ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ả có căn cứ, bạn sẽ nhận được các nguồn trong groundingChunks hỗ trợ cho 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 Tạo sinh dựa trên dữ liệu thực tế bằng Google Maps, bạn phải chỉ định các nguồn Google Maps liên quan và thông báo cho người dùng về những điều sau:

  • Google Maps nguồn phải xuất hiện ngay sau nội dung được tạo mà các nguồn đó hỗ trợ. Nội dung được tạo này cũng đượ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ần tương tác.

Sau đây là cách lấy giá trị để hiển thị nguồn từ Google Maps Grounded Result:

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 một bản xem trước đường liên kết theo các yêu cầu sau:

Câu lệnh kèm theo câu trả lời cho thấy các 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 đã 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ư:

Để biết thêm thông tin về một số nhà cung cấp dữ liệu của 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 ghi công bằng văn bản

Khi bạn ghi nhận 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 Bất kỳ phông chữ nội dung sans serif 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 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

CSS mẫu

CSS sau đây 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 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ã địa điểm vào bộ nhớ đệm

Google Maps Grounded Result có thể bao gồm 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:

  • 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 của tính năng Neo bám vào 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 thực tế của Google Maps có thêm các quy định 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 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 Agent Platform Gemini API (formerly Vertex AI) (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 Căn cứ vào 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 có cung cấp tính năng Căn cứ vào dữ liệu thực tế bằng Google Maps ở một Lãnh thổ bị cấm. Để biết thêm thông tin, hãy xem bài viết Lãnh thổ bị cấm đối với Google Maps Platform. Danh sách Lãnh thổ bị cấm có thể được cập nhật tuỳ từng thời điểm.

Kết quả có căn cứ và tính năng giám sát bằng 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 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ó 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ỳ thời gian lưu giữ 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 tuân thủ bổ sung đối với nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API hoặc Agent Platform Gemini API (formerly Vertex AI) (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 có thể cần phải điều chỉnh khoảng thời gian lưu giữ trong Cloud Logging để đáp ứng các yêu cầu này.

Giá và giới hạn số lượng yêu cầu

Giá của tính năng Đối chiếu thông tin với Google Maps được tính theo số lượng truy vấn. Yêu cầu chỉ được tính vào hạn mức 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 thực tế (nghĩa là câu trả lờ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, thì yêu cầu đó sẽ được tính là một yêu cầu đối với giới hạn số lượng yêu cầu.

Hãy nhớ xem thông tin chi tiết về giá, phạm vi cung cấp mô hình và các giới hạn đối với tính năng Tạo sinh dựa trên dữ liệu thực tế bằng Google Maps trong tài liệu của nhà cung cấp Gemini API mà bạn chọn: Gemini Developer API | Agent Platform Gemini API (formerly Vertex AI).