Tính năng tiếp đất bằng Google Tìm kiếm kết nối mô hình Gemini với nội dung web công khai có sẵn theo thời gian thực. Điều này cho phép mô hình cung cấp câu trả lời chính xác và mới nhất, đồng thời trích dẫn các nguồn có thể xác minh ngoài thời điểm ngừng cập nhật kiến thức.
Việc sử dụng Google Tìm kiếm để cung cấp thông tin cơ sở có 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 thông tin thực tế để đưa ra câu trả lời.
- Truy cập thông tin theo thời gian thực: Trả lời các câu hỏi về các sự kiện và chủ đề gần đây.
- Cung cấp thông tin trích dẫn: Tạo dựng niềm tin của người dùng hoặc cho phép người dùng duyệt xem các trang web có liên quan bằng cách cho thấy nguồn của các tuyên bố của mô hình.
- Hoàn thành các tác vụ phức tạp hơn: Truy xuất các hiện vật và hình ảnh, video hoặc nội dung nghe nhìn khác có liên quan để hỗ trợ các tác vụ suy luận.
- Cải thiện câu trả lời theo khu vực hoặc ngôn ngữ cụ thể: Tìm thông tin theo khu vực cụ thể hoặc hỗ trợ dịch nội dung một cách chính xác.
Xin lưu ý rằng tính năng Dựa trên thông tin thực tế cho Google Tìm kiếm hiện có trên iOS+, Android và Web. SDK này sẽ có sẵn cho Flutter và Unity trong các bản phát hành sắp tới.
Các mô hình được hỗ trợ
gemini-2.5-pro
gemini-2.5-flash
gemini-2.5-flash-lite-preview-06-17
gemini-2.0-flash-001
(và bí danh được cập nhật tự động của miền này làgemini-2.0-flash
)gemini-2.0-flash-live-preview-04-09
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 Tìm kiếm
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 thực thể GenerativeModel
, hãy cung cấp GoogleSearch
dưới dạng tool
mà mô hình có thể dùng để tạo câu trả lời.
Swift
import FirebaseAI
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(
modelName: "GEMINI_MODEL_NAME",
// Provide Google Search as a tool that the model can use to generate its response
tools: [Tool.googleSearch()]
)
let response = try await model.generateContent("Who won the euro 2024?")
print(response.text ?? "No text in response.")
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Kotlin
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
// Provide Google Search as a tool that the model can use to generate its response
tools = listOf(Tool.GoogleSearch())
)
val response = model.generateContent("Who won the euro 2024?")
print(response.text)
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Java
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("GEMINI_MODEL_NAME",
null,
null,
// Provide Google Search as a tool that the model can use to generate its response
List.of(Tool.GoogleSearch()));
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
ListenableFuture response = model.generateContent("Who won the euro 2024?");
Futures.addCallback(response, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(
ai,
{
model: "GEMINI_MODEL_NAME",
// Provide Google Search as a tool that the model can use to generate its response
tools: [{ googleSearch: {} }]
}
);
const result = await model.generateContent("Who won the euro 2024?");
console.log(result.response.text());
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Dart
Chúng tôi sẽ hỗ trợ Flutter trong bản phát hành tiếp theo.
Unity
Unity sẽ được hỗ trợ trong bản phát hành tiếp theo.
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à nhiệt độ mặc định cho tất cả các mô hình 2.5). Tìm hiểu cách đặt nhiệt độ trong cấu hình của mô hình.
Cách hoạt động của tính năng căn cứ vào thông tin trên Google Tìm kiếm
Khi bạn sử dụng công cụ GoogleSearch
, 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:
- Nhận lời nhắc: Ứng dụng của bạn gửi lời nhắc đến mô hình Gemini khi công cụ
GoogleSearch
được bật. - 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 Tìm kiếm có thể cải thiện câu trả lời hay không.
- Gửi câu hỏi đến Google Tìm kiếm: Nếu cần, mô hình sẽ tự động tạo một hoặc nhiều cụm từ tìm kiếm và thực hiện các cụm từ đó.
- Xử lý kết quả tìm kiếm: Mô hình xử lý kết quả trên Google Tìm kiếm và đưa ra câu trả lời cho câu lệnh ban đầu.
- Trả về "kết quả có căn cứ": Mô hình này trả về một câu trả lời cuối cùng, thân thiện với người dùng dựa trên kết quả trên Google Tìm kiếm. 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 và
groundingMetadata
cùng với các cụm từ tìm kiếm, kết quả trên web và trích dẫn.
Xin lưu ý rằng việc cung cấp Google Tìm kiếm dưới dạng một 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 Tìm kiếm để 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à "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ả trên Google Tìm kiếm để đư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à tạo trải nghiệm trích dẫn phong phú trong ứng dụng của bạn.
Đối tượng groundingMetadata
trong "kết quả có căn cứ" chứa thông tin sau:
webSearchQueries
: Một mảng gồm các cụm từ tìm kiếm được gửi đến Google Tìm kiếm. Thông tin này hữu ích cho việc gỡ lỗi và tìm hiểu quy trình suy luận của mô hình.searchEntryPoint
: Chứa HTML và CSS để hiển thị "Đề xuất của Google Tìm kiếm" bắt buộc. Bạn phải tuân thủ các yêu cầu về việc sử dụng "Cung cấp thông tin cơ bản bằng Google Tìm kiếm" đối với nhà cung cấp 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 cụ thể cho từng dịch vụ). Tìm hiểu cách sử dụng và hiển thị kết quả có căn cứ ở phần sau trên trang này.groundingChunks
: Một mảng các đối tượng chứa các nguồn trên web (uri
vàtitle
).groundingSupports
: Một mảng các đoạn để kết nối phản hồi của mô hìnhtext
với các nguồn tronggroundingChunks
. Mỗi đoạn liên kết một văn bảnsegment
(dostartIndex
vàendIndex
xác định) với một hoặc nhiềugroundingChunkIndices
. Trường này giúp bạn tạo trích dẫn nội dòng. Tìm hiểu cách sử dụng và hiển thị kết quả có căn cứ ở phần sau trên trang này.
Sau đây là một ví dụ về phản hồi bao gồm đối tượng groundingMetadata
:
{
"candidates": [
{
"content": {
"parts": [
{
"text": "Spain won Euro 2024, defeating England 2-1 in the final. This victory marks Spain's record fourth European Championship title."
}
],
"role": "model"
},
"groundingMetadata": {
"webSearchQueries": [
"UEFA Euro 2024 winner",
"who won euro 2024"
],
"searchEntryPoint": {
"renderedContent": "<!-- HTML and CSS for the search widget -->"
},
"groundingChunks": [
{"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "aljazeera.com"}},
{"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "uefa.com"}}
],
"groundingSupports": [
{
"segment": {"startIndex": 0, "endIndex": 85, "text": "Spain won Euro 2024, defeatin..."},
"groundingChunkIndices": [0]
},
{
"segment": {"startIndex": 86, "endIndex": 210, "text": "This victory marks Spain's..."},
"groundingChunkIndices": [0, 1]
}
]
}
}
]
}
Sử dụng và hiển thị kết quả có căn cứ
Nếu sử dụng công cụ Google Tìm kiếm để tạo câu trả lời, mô hình sẽ cung cấp một đối tượng groundingMetadata
trong câu trả lời.
Bạn bắt buộc phải hiển thị các đề xuất của Google Tìm kiếm và nên hiển thị các trích dẫn.
Ngoài việc tuân thủ các yêu cầu khi sử dụng công cụ Google Tìm kiếm, việc hiển thị thông tin này giúp bạn và người dùng cuối xác thực các câu trả lời và mở ra những hướng đi để học hỏi thêm.
(Bắt buộc) Hiển thị các đề xuất của Google Tìm kiếm
Nếu câu trả lời có chứa "Đề xuất của Google Tìm kiếm", thì bạn phải tuân thủ các yêu cầu sử dụng "Căn cứ vào Google Tìm kiếm", bao gồm cả cách bạn hiển thị đề xuất của Google Tìm kiếm.
Đối tượng groundingMetadata
chứa "Đề xuất của Google Tìm kiếm", cụ thể là trường searchEntryPoint
. Trường này có một trường renderedContent
cung cấp kiểu HTML và CSS tuân thủ. Bạn cần triển khai kiểu này để hiển thị Đề xuất của Tìm kiếm trong ứng dụng của mình.
Xem thông tin chi tiết về các yêu cầu về cách hiển thị và hành vi đối với đề xuất của Google Tìm kiếm trong tài liệu Google Cloud. Xin lưu ý rằng mặc dù hướng dẫn chi tiết này nằm trong tài liệu Vertex AI Gemini API, nhưng hướng dẫn này cũng áp dụng cho nhà cung cấp Gemini Developer API.
Hãy xem các mã mẫu ví dụ ở phần sau của phần này.
(Nên dùng) Hiển thị câu trích dẫn
Đối tượng groundingMetadata
chứa dữ liệu trích dẫn có cấu trúc, cụ thể là các trường groundingSupports
và groundingChunks
. Sử dụng thông tin này để liên kết trực tiếp các câu của mô hình với nguồn của chúng trong giao diện người dùng (nội tuyến và tổng hợp).
Hãy xem các mã mẫu ví dụ ở phần sau của phần này.
Mã mẫu ví dụ
Các mẫu mã này cung cấp các mẫu khái quát để sử dụng và hiển thị kết quả có căn cứ. Tuy nhiên, bạn có trách nhiệm đảm bảo rằng việc triển khai cụ thể của bạn phù hợp với các yêu cầu tuân thủ.
Swift
// ...
// Get the model's response
let text = response.text
// Get the grounding metadata
if let candidate = response.candidates.first,
let groundingMetadata = candidate.groundingMetadata {
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
if let renderedContent = groundingMetadata.searchEntryPoint?.renderedContent {
// TODO(developer): Display Google Search suggestions using a WebView
}
// RECOMMENDED - display citations
let groundingChunks = groundingMetadata.groundingChunks
for chunk in groundingMetadata.groundingChunks {
if let web = chunk.web {
let title = web.title // for example, "uefa.com"
let uri = web.uri // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
}
Kotlin
// ...
// Get the model's response
val text = response.text
// Get the grounding metadata
val groundingMetadata = response.candidates.firstOrNull()?.groundingMetadata
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
val renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent
if (renderedContent != null) {
// TODO(developer): Display Google Search suggestions using a WebView
}
// RECOMMENDED - display citations
val groundingChunks = groundingMetadata?.groundingChunks
groundingChunks?.let { chunks ->
for (chunk in chunks) {
val title = chunk.web?.title // for example, "uefa.com"
val uri = chunk.web?.uri // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
Java
// ...
Futures.addCallback(response, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse result) {
// Get the model's response
String text = result.getText();
// Get the grounding metadata
GroundingMetadata groundingMetadata =
result.getCandidates()[0].getGroundingMetadata();
if (groundingMetadata != null) {
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
String renderedContent =
groundingMetadata.getSearchEntryPoint().getRenderedContent();
if (renderedContent != null) {
// TODO(developer): Display Google Search suggestions using a WebView
}
// RECOMMENDED - display citations
List chunks = groundingMetadata.getGroundingChunks();
if (chunks != null) {
for(GroundingChunk chunk : chunks) {
WebGroundingChunk web = chunk.getWeb();
if (web != null) {
String title = web.getTitle(); // for example, "uefa.com"
String uri = web.getUri(); // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
}
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
// ...
// Get the model's text response
const text = result.response.text();
// Get the grounding metadata
const groundingMetadata = result.response.candidates?.[0]?.groundingMetadata;
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
const renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent;
if (renderedContent) {
// TODO(developer): render this HTML and CSS in the UI
}
// RECOMMENDED - display citations
const groundingChunks = groundingMetadata?.groundingChunks;
if (groundingChunks) {
for (const chunk of groundingChunks) {
const title = chunk.web?.title; // for example, "uefa.com"
const uri = chunk.web?.uri; // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
Dart
Chúng tôi sẽ hỗ trợ Flutter trong bản phát hành tiếp theo.
Unity
Unity sẽ được hỗ trợ trong bản phát hành tiếp theo.
Kết quả có căn cứ và hoạt động giám sát 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ó 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à giới hạn
Hãy nhớ xem xét mức giá, tình trạng cung cấp mô hình và các giới hạn để căn cứ vào Google Tìm kiếm 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.