1. 總覽
在健身與健康應用程式領域,提供豐富且引人入勝的體驗至關重要。以瑜珈應用程式為例,除了提供簡單的體位文字說明,還應提供完整資訊、多媒體內容和智慧搜尋功能。在本篇文章中,我們將探討如何使用 Google Cloud 的 Firestore 建立健全的瑜珈姿勢資料庫、運用 Vector Search 擴充功能進行內容比對,以及整合 Gemini 2.0 Flash (實驗功能) 的強大功能,以便處理多模態內容。
為什麼要使用 Firestore?
Firestore 是 Google Cloud 的無伺服器 NoSQL 文件資料庫,是建構可擴充且具動態功能的應用程式時的絕佳選擇。以下是 Yoga 應用程式適合使用這項功能的原因:
- 擴充性和效能:Firestore 會自動擴充,以便處理數百萬名使用者和龐大資料集,確保應用程式即使在成長過程中也能保持回應速度。
- 即時更新:內建即時同步處理功能可讓所有已連結的用戶端保持資料一致,非常適合用於即時課程或協作練習等功能。
- 彈性資料模型:Firestore 以文件為基礎的結構可讓您儲存各種資料類型,包括文字、圖片,甚至是嵌入內容,非常適合用於呈現複雜的瑜珈姿勢資訊。
- 強大的查詢功能:Firestore 支援複雜查詢,包括相等、不相等,現在還支援向量相似度搜尋這項全新擴充功能。
- 離線支援:Firestore 會在本機快取資料,讓應用程式在使用者離線時也能運作。
使用 Firestore Vector Search Extension 提升搜尋功能
傳統的關鍵字搜尋在處理瑜珈姿勢等複雜概念時,可能會受到限制。使用者可能會搜尋「打開臀部」或「改善平衡」的姿勢,但不知道具體的姿勢名稱。這時就需要向量搜尋的協助。
搭配使用 Firestore 的 Vector Search 可讓您:
- 產生嵌入:將文字說明 (未來可能會是圖片和音訊) 轉換為數值向量表示法 (嵌入),藉由 Vertex AI 或自訂模型等模型擷取其語意意義。
- 儲存嵌入:直接將這些嵌入儲存在 Firestore 文件中。
- 執行相似度搜尋:查詢資料庫,找出與指定查詢向量語意相似的文件,以便進行內容比對。
整合 Gemini 2.0 Flash (實驗功能)
Gemini 2.0 Flash 是 Google 最先進的多模態 AI 模型。雖然這項技術仍處於實驗階段,但它為豐富 Yoga 應用程式帶來了令人期待的可能性:
- 文字產生:使用 Gemini 2.0 Flash 產生瑜珈姿勢的詳細說明,包括益處、調整方式和禁忌。
- 圖像生成 (模擬):雖然 Gemini 尚未提供直接生成圖像的功能,但我已使用 Google 的 Imagen 模擬這項功能,生成可視覺化呈現姿勢的圖像。
- 音訊產生 (模仿):同樣地,我們可以使用文字轉語音 (TTS) 服務,為每個姿勢建立音訊指示,引導使用者練習。
我認為,建議整合這項功能,可讓應用程式使用模型的下列功能:
- Multimodal Live API:這個新的 API 可協助您使用工具,建立即時視覺和音訊串流應用程式。
- 速度和效能:Gemini 2.0 Flash 的首次符號回應時間 (TTFT) 大幅改善,優於 Gemini 1.5 Flash。
- 改善代理體驗:Gemini 2.0 改善了多模態理解、程式設計、遵循複雜指令和呼叫函式的功能。這些改善措施可相互搭配,提供更優質的代理人體驗。
詳情請參閱這份說明文件的頁面%20over%20Gemini%201.5%20Flash)。
以 Google 搜尋建立基準
為提升可信度並提供更多資源,我們可以整合 Google 搜尋,以此建立應用程式提供資訊的基準。這表示:
- 內容比對搜尋:當管理員使用者輸入姿勢詳細資料時,我們可以使用姿勢名稱執行 Google 搜尋。
- 網址擷取:我們可以從搜尋結果中擷取相關網址,例如文章、影片或信譽良好的瑜珈網站,並在應用程式中顯示這些網址。
建構項目
本實驗室的學習內容如下:
- 建立 Firestore 集合並載入 Yoga 文件
- 瞭解如何使用 Firestore 建立 CRUD 應用程式
- 使用 Gemini 2.0 Flash 產生瑜珈姿勢說明
- 啟用 Firebase Vector Search 與 Firestore 整合
- 根據瑜珈說明產生嵌入
- 針對使用者搜尋文字執行相似度搜尋
需求條件
2. 事前準備
建立專案
- 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
- 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境,並預先載入 bq。按一下 Google Cloud 控制台頂端的「啟用 Cloud Shell」。
- 連線至 Cloud Shell 後,請使用下列指令確認您已通過驗證,且專案已設為您的專案 ID:
gcloud auth list
- 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
- 如果未設定專案,請使用下列指令進行設定:
gcloud config set project <YOUR_PROJECT_ID>
- 啟用必要的 API。
gcloud services enable firestore.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com \
storage.googleapis.com \
secretmanager.googleapis.com \
texttospeech.googleapis.com
您可以透過主控台搜尋每項產品,或使用這個連結,來取代 gcloud 指令。
如果遺漏任何 API,您隨時可以在實作期間啟用。
如要瞭解 gcloud 指令和用法,請參閱說明文件。
3. 資料庫設定
說明文件提供更完整的步驟,說明如何設定 Firestore 執行個體。大致來說,我會按照以下步驟開始:
1 前往 Firestore 檢視器,然後在「選取資料庫服務」畫面中,選擇原生模式的 Firestore
- 選取 Firestore 的位置
- 按一下「Create Database」(建立資料庫) (如果是首次建立,請將資料庫設為「(預設)」)
建立 Firestore 專案時,也會在 Cloud API Manager 中啟用 API
- 重要事項:請選擇「測試」(而非「正式版」) 版本的安全性規則,以便存取資料
- 設定完成後,您應該會在 Native 模式中看到 Firestore 資料庫、集合和文件檢視畫面,如下圖所示:
- 請先不要執行這個步驟,但為了方便您瞭解操作方式,您可以按一下「開始收集」並建立新的集合。將集合 ID 設為「poses」。按一下「儲存」按鈕。
實際應用的專家訣竅:
- 定案後,您可以透過 Firebase 介面建立、編輯及監控安全性規則,並指定哪些使用者可以存取不同類型的文件。您可以透過以下連結存取安全性規則:https://console.firebase.google.com/u/0/project/<<your_project_id>>/firestore/rules
- 請務必在從開發階段部署 / 推出專案前,編輯、監控及測試安全性規則,因為這通常是導致應用程式運作方式不同的隱藏原因 :)
在本示範中,我們會在測試模式下使用它。
4. Firestore REST API
- REST API 可用於下列用途:在資源受限的環境中存取 Firestore,因為無法執行完整的用戶端程式庫。自動化資料庫管理或擷取詳細資料庫中繼資料
- 使用 Firestore 最簡單的方法是使用其中一個原生用戶端程式庫,在某些情況下,直接呼叫 REST API 會很有幫助
- 在本部落格文章中,您將看到 Firestore REST API 的用法和示範,而非原生用戶端程式庫
- 針對驗證,Firestore REST API 會接受 Firebase 驗證 ID 權杖或 Google Identity OAuth 2.0 權杖。如要進一步瞭解驗證和授權主題,請參閱說明文件。
- 所有 REST API 端點都位於 https://firestore.googleapis.com/v1/ 這個基礎網址底下。
Spring Boot 和 Firestore API
這個 Spring Boot 架構中的解決方案,是為了展示使用者互動體驗的用戶端應用程式,該應用程式會使用 Firestore API 收集及修改瑜珈姿勢和呼吸詳細資料。
如要進一步瞭解瑜珈姿勢應用程式的 Firestore CRUD 解決方案,請參閱這篇部落格文章,瞭解詳細的逐步說明。
如要專注於目前的解決方案,並隨時瞭解 CRUD 部分,請從 Cloud Shell 終端機中複製本部落格文章所關注的整個解決方案,並取得程式碼集的副本。
git clone https://github.com/AbiramiSukumaran/firestore-poserecommender
注意事項:
- 複製這個存放區後,您只需針對專案 ID、API 等進行一些變更,即可啟動應用程式。後續章節將說明應用程式的各個元件。以下列出變更項目:
- 在
src/main/java/com/example/demo/GenerateImageSample.java
檔案中,將「<<YOUR_PROJECT_ID>>」替換為您的專案 ID - 在
src/main/java/com/example/demo/GenerateEmbeddings.java
檔案中,將「<<YOUR_PROJECT_ID>>」替換為您的專案 ID - 在
src/main/java/com/example/demo/PoseController.java
中,將所有「<<YOUR_PROJECT_ID>>"
」和資料庫名稱,
(在本例中為"(default)",
) 的所有例項,替換為設定中的適當值: - 在
src/main/java/com/example/demo/PoseController.java
中,將「[YOUR_API_KEY]
」替換為 Gemini 2.0 Flash 的 API 金鑰。您可以從 AI Studio 取得這項資訊。 - 如要本機測試,請在 Cloud Shell 終端機的專案資料夾中執行下列指令:
mvn package
mvn spring-boot:run
目前,您可以按一下 Cloud Shell 終端機中的「網頁預覽」選項,查看應用程式執行狀況。我們尚未準備好執行測試及嘗試應用程式。
- 選用步驟:如果您想在 Cloud Run 中部署應用程式,必須透過 Cloud Shell 編輯器從頭開始啟動全新的 Java Cloud Run 應用程式,並將 repo 中的來源檔案和範本檔案新增至相應資料夾中的新專案 (因為目前的 GitHub 存放區專案並未預設為 Cloud Run 部署設定)。在這種情況下,請按照下列步驟操作 (而非複製現有存放區):
- 前往 Cloud Shell 編輯器 (請務必開啟編輯器,而非終端機),按一下狀態列左側的 Google Cloud 專案名稱圖示 (下圖中遮蓋的部分)
- 從選項清單中依序選取「New application」(新應用程式) ->「Cloud Run Application」(Cloud Run 應用程式) ->「Java: Cloud Run」(Java:Cloud Run),並將其命名為「firestore-poserecommender」。
- 您現在應該會看到 Java Cloud Run 應用程式的完整堆疊範本,並已預先設定好,隨時可以開始使用
- 移除現有的 Controller 類別,並將下列檔案複製到專案結構中的相應資料夾:
firestore-poserecommender/src/main/java/com/example/demo/
- FirestoreSampleApplication.java
- GenerateEmbeddings.java
- GenerateImageSample.java
- Pose.java
- PoseController.java
- ServletInitializer.java
firestore-poserecommender/src/main/resources/static/
- Index.html
firestore-poserecommender/src/main/resources/templates/
- contextsearch.html
- createpose.html
- errmessage.html
- pose.html
- ryoq.html
- searchpose.html
- showmessage.html
firestore-poserecommender/
- Dockerfile
- 您需要在對應的檔案中進行變更,將專案 ID 和 API 金鑰分別替換為對應的值。(上述步驟 1 的 a、b、c 和 d)。
5. 資料擷取
應用程式的資料可在以下檔案 data.json 中取得:https://github.com/AbiramiSukumaran/firestore-poserecommender/blob/main/data.json
如果您想從一些預先定義的資料開始,可以複製 JSON,並將所有「<<YOUR_PROJECT_ID>>」替換為您的值
- 前往 Firestore Studio
- 請確認您已建立名為「poses」的集合
- 手動逐一新增上述來源檔案中的文件
您也可以執行下列步驟,從我們為您建立的預先定義集合一次匯入資料:
- 前往 Cloud Shell 終端機,確認您已設定有效的 Google Cloud 專案,並確認您已獲得授權。使用下方的 gsutil 指令,在專案中建立值區。將下方指令中的 <PROJECT_ID> 變數替換為您的 Google Cloud 專案 ID:
gsutil mb -l us gs://<PROJECT_ID>-yoga-poses-bucket
- 值區建立完成後,我們需要將準備好的資料庫匯出內容複製到這個值區,才能將資料匯入 Firebase 資料庫。請使用下列指令:
gsutil cp -r gs://demo-bq-gemini-public/yoga_poses gs://<PROJECT_ID>-yoga-poses-bucket
有了要匯入的資料,我們可以進行最後一個步驟,將資料匯入已建立的 Firebase 資料庫 (預設)。
選取「匯入」,然後選擇剛剛建立的 Cloud Storage 路徑,並瀏覽檔案,直到您可以選取「yoga_poses.overall_export_metadata」檔案為止:
- 按一下 [匯入]。
匯入作業需要幾秒鐘的時間,完成後,您可以前往 https://console.cloud.google.com/firestore/databases 選取「預設」資料庫和「姿勢」集合,如以下所示:
- 另一種方法是,您也可以在使用「Create a New Pose」動作部署後,透過應用程式手動建立記錄。
6. Vector Search
啟用 Firestore Vector Search 擴充功能
使用這個擴充功能,即可透過新的向量搜尋功能自動嵌入及查詢 Firestore 文件!系統會將您導向 Firebase Extensions Hub。
安裝向量搜尋擴充功能時,請指定集合和文件欄位名稱。使用這個欄位新增或更新文件時,這個擴充功能會觸發計算文件的向量嵌入。向量嵌入會寫回相同的文件,並在向量儲存庫中建立索引,以便進行查詢。
我們來看看具體步驟:
安裝擴充功能:
按一下「在 Firebase 主控台中安裝」,從 Firebase 擴充功能市集安裝「Vector Search with Firestore」擴充功能。
重要事項:
首次前往這個擴充功能頁面時,請選取 Firebase 控制台列出的 Google Cloud 控制台中,您正在使用的專案。
如果清單中沒有您的專案,請在 Firebase 中新增專案 (在清單中選擇現有的 Google Cloud 專案)。
設定擴充功能:
指定集合 (「姿勢」)、包含要嵌入文字的欄位 (「姿勢」),以及其他參數,例如嵌入維度。
如果這個步驟列出需要啟用的 API,設定頁面會讓您啟用這些 API,請按照步驟操作。
如果啟用 API 一段時間後,頁面仍未回應,請重新整理頁面,即可看到已啟用的 API。
在下列步驟之一中,您可以使用所選 LLM 產生嵌入資料。選擇「Vertex AI」。
接下來幾項設定與您的集合和要嵌入的欄位有關:
LLM:Vertex AI
集合路徑:poses
預設查詢限制:3
距離度量:餘弦
輸入欄位名稱:posture
輸出欄位名稱:embedding
狀態欄位名稱:status
嵌入現有文件:是
更新現有的嵌入:是
Cloud Functions 位置:us-central1
Enable Events (啟用事件):未勾選
完成所有設定後,請按一下「Install Extension」按鈕。這項作業需要 3 到 5 分鐘。
產生嵌入:
當您在「姿勢」集合中新增或更新文件時,擴充功能會透過 API 端點,使用預先訓練的模型或您選擇的模型自動產生嵌入資料。在本例中,我們在擴充功能設定中選擇了 Vertex AI。
建立索引
在應用程式中使用嵌入功能時,系統會強制建立嵌入欄位的索引。
Firestore 會自動為基本查詢建立索引,不過,您可以執行沒有索引的查詢,讓 Firestore 產生索引語法,系統會在應用程式端的錯誤訊息中提供產生索引的連結。以下是建立向量索引的步驟清單:
- 前往 Cloud Shell 終端機
- 執行下列指令:
gcloud firestore indexes composite create --collection-group="poses" --query-scope=COLLECTION --database="(default)" --field-config vector-config='{"dimension":"768", "flat": "{}"}',field-path="embedding"
詳情請參閱這篇文章。
建立向量索引後,您就能使用向量嵌入執行最鄰近搜尋。
重要注意事項:
從這裡開始,您不必對來源進行任何變更。只要按照步驟操作,即可瞭解應用程式執行的作業。
執行向量搜尋
讓我們來看看新建應用程式如何處理向量搜尋。儲存嵌入項目後,您可以使用 Firestore Java SDK 的 VectorQuery 類別執行 Vector Search,並取得最鄰近搜尋結果:
CollectionReference coll = firestore.collection("poses");
VectorQuery vectorQuery = coll.findNearest(
"embedding",
userSearchTextEmbedding,
/* limit */ 3,
VectorQuery.DistanceMeasure.EUCLIDEAN,
VectorQueryOptions.newBuilder().setDistanceResultField("vector_distance")
.setDistanceThreshold(2.0)
.build());
ApiFuture<VectorQuerySnapshot> future = vectorQuery.get();
VectorQuerySnapshot vectorQuerySnapshot = future.get();
List<Pose> posesList = new ArrayList<Pose>();
// Get the ID of the closest document (assuming results are sorted by distance)
String closestDocumentId = vectorQuerySnapshot.getDocuments().get(0).getId();
這個程式碼片段會比較使用者搜尋文字的嵌入內容,以及 Firestore 中文件的嵌入內容,並擷取最接近的內容。
7. Gemini 2.0 Flash
整合 Gemini 2.0 Flash (用於產生說明)
讓我們來看看新建應用程式如何處理 Gemini 2.0 Flash 整合,以便產生說明。
假設管理員使用者 / 瑜珈老師想透過 Gemini 2.0 Flash 輸入姿勢詳細資料,然後執行搜尋,查看最相符的結果。這會擷取相符姿勢的詳細資料,以及支援結果的多模態物件。
String apiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent?key=[YOUR_API_KEY]";
Map<String, Object> requestBody = new HashMap<>();
List<Map<String, Object>> contents = new ArrayList<>();
List<Map<String, Object>> tools = new ArrayList<>();
Map<String, Object> content = new HashMap<>();
List<Map<String, Object>> parts = new ArrayList<>();
Map<String, Object> part = new HashMap<>();
part.put("text", prompt);
parts.add(part);
content.put("parts", parts);
contents.add(content);
requestBody.put("contents", contents);
/**Setting up Grounding*/
Map<String, Object> googleSearchTool = new HashMap<>();
googleSearchTool.put("googleSearch", new HashMap<>());
tools.add(googleSearchTool);
requestBody.put("tools", tools);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.POST, requestEntity, String.class);
System.out.println("Generated response: " + response);
String responseBody = response.getBody();
JSONObject jsonObject = new JSONObject(responseBody);
JSONArray candidates = jsonObject.getJSONArray("candidates");
JSONObject candidate = candidates.getJSONObject(0);
JSONObject contentResponse = candidate.getJSONObject("content");
JSONArray partsResponse = contentResponse.getJSONArray("parts");
JSONObject partResponse = partsResponse.getJSONObject(0);
String generatedText = partResponse.getString("text");
System.out.println("Generated Text: " + generatedText);
a. 模擬圖像和音訊產生功能
Gemini 2.0 Flash Experimental 可產生多模態結果,但我尚未註冊早期測試資格,因此我分別使用 Imagen 和 TTS API 模擬圖像和音訊輸出內容。只要透過一個 API 呼叫 Gemini 2.0 Flash,就能產生所有這些內容,真是太棒了!
try (PredictionServiceClient predictionServiceClient =
PredictionServiceClient.create(predictionServiceSettings)) {
final EndpointName endpointName =
EndpointName.ofProjectLocationPublisherModelName(
projectId, location, "google", "imagen-3.0-generate-001");
Map<String, Object> instancesMap = new HashMap<>();
instancesMap.put("prompt", prompt);
Value instances = mapToValue(instancesMap);
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("sampleCount", 1);
paramsMap.put("aspectRatio", "1:1");
paramsMap.put("safetyFilterLevel", "block_few");
paramsMap.put("personGeneration", "allow_adult");
Value parameters = mapToValue(paramsMap);
PredictResponse predictResponse =
predictionServiceClient.predict(
endpointName, Collections.singletonList(instances), parameters);
for (Value prediction : predictResponse.getPredictionsList()) {
Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
if (fieldsMap.containsKey("bytesBase64Encoded")) {
bytesBase64Encoded = fieldsMap.get("bytesBase64Encoded").getStringValue();
}
}
return bytesBase64Encoded;
}
try {
// Create a Text-to-Speech client
try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
// Set the text input to be synthesized
SynthesisInput input = SynthesisInput.newBuilder().setText(postureString).build();
// Build the voice request, select the language code ("en-US") and the ssml
// voice gender
// ("neutral")
VoiceSelectionParams voice =
VoiceSelectionParams.newBuilder()
.setLanguageCode("en-US")
.setSsmlGender(SsmlVoiceGender.NEUTRAL)
.build();
// Select the type of audio file you want returned
AudioConfig audioConfig =
AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build();
// Perform the text-to-speech request on the text input with the selected voice
// parameters and audio file type
SynthesizeSpeechResponse response =
textToSpeechClient.synthesizeSpeech(input, voice, audioConfig);
// Get the audio contents from the response
ByteString audioContents = response.getAudioContent();
// Convert to Base64 string
String base64Audio = Base64.getEncoder().encodeToString(audioContents.toByteArray());
// Add the Base64 encoded audio to the Pose object
return base64Audio;
}
} catch (Exception e) {
e.printStackTrace(); // Handle exceptions appropriately. For a real app, log and provide user feedback.
return "Error in Audio Generation";
}
}
b. 以 Google 搜尋建立基準:
如果您在步驟 6 中查看 Gemini 叫用程式碼,就會發現下列程式碼片段,可為 LLM 回應啟用 Google 搜尋的「建立基準」功能:
/**Setting up Grounding*/
Map<String, Object> googleSearchTool = new HashMap<>();
googleSearchTool.put("googleSearch", new HashMap<>());
tools.add(googleSearchTool);
requestBody.put("tools", tools);
這麼做是為了確保我們:
- 將模型與實際搜尋結果連結
- 擷取搜尋內容中提及的相關網址
8. 執行應用程式
讓我們透過簡單的 Thymeleaf 網頁介面,瞭解新建 Java Spring Boot 應用程式的所有功能:
- Firestore CRUD 作業 (建立、讀取、更新、刪除)
- 關鍵字搜尋
- 以生成式 AI 為基礎的內容建立
- 內容比對搜尋 (向量搜尋)
- 與搜尋相關的多模態輸出內容
- 執行自己的查詢 (以結構化查詢格式輸入的查詢)
示例:{"structuredQuery":{"select":{"fields":[{"fieldPath":"name"}]},"from":[{"collectionId":"fitness_poses"}]}}
到目前為止,我們討論的所有功能都是您剛剛從存放區建立的應用程式一部分:https://github.com/AbiramiSukumaran/firestore-poserecommender
如要建構、執行及部署,請在 Cloud Shell 終端機中執行下列指令:
mvn package
mvn spring-boot:run
您應該會看到結果,並能試用應用程式功能。請觀看以下影片,瞭解輸出內容的示範:
結合 Pose Recommender、Firestore、Vector Search 和 Gemini 2.0 Flash
選用步驟:
如要在 Cloud Run 上部署 (假設您已使用 Dockerfile 啟動全新應用程式,並視需要複製檔案),請在專案目錄中透過 Cloud Shell 終端機執行下列指令:
gcloud run deploy --source .
提供應用程式名稱和區域代碼 (請選擇 us-central1 的代碼),然後依照提示選擇未經驗證的叫用「Y」。部署成功後,您應該會在終端機中看到應用程式端點。
9. 清理
如要避免系統向您的 Google Cloud 帳戶收取這篇文章中所用資源的費用,請按照下列步驟操作:
10. 恭喜
恭喜!您已成功使用 Firestore 建立健全且智慧的瑜珈姿勢管理應用程式。我們結合了 Firestore、向量搜尋擴充功能和 Gemini 2.0 Flash (可模擬圖像和音訊產生) 的強大功能,打造出真正引人入勝且富含資訊的 Yoga 應用程式,用於執行 CRUD 作業、執行以關鍵字為基礎的搜尋、內容向量搜尋,以及產生多媒體內容。
這項做法不限於瑜珈應用程式。隨著 Gemini 等 AI 模型持續進化,我們將有更多機會打造更沉浸式且個人化的使用者體驗。請務必隨時掌握 Google Cloud 和 Firebase 的最新進展和說明文件,充分發揮這些技術的潛力。
如果要擴充這個應用程式,我會嘗試使用 Gemini 2.0 Flash 執行以下兩項操作:
- 為使用情境建立即時視訊和音訊串流,以便使用 Multimodal Live API。
- 啟用思考模式,為回覆內容產生背後的想法,以便與即時資料互動,打造更逼真的體驗。
歡迎試試看,並提交合併要求 :>D!!!