Integrowanie podstawowych koncepcji AI w aplikacjach Google Chat

1. Zanim zaczniesz

Czym są aplikacje Google Chat z AI?

Aplikacje Google Chat z AI:

  • Wprowadź swoje usługi i zasoby do Google Chat, aby użytkownicy mogli uzyskiwać informacje i podejmować działania bez opuszczania rozmowy.
  • integrować się z modelami generatywnej AI, aby tworzyć, wyszukiwać i edytować dane, takie jak tekst czy obrazy;
  • Wspieranie interakcji z użyciem agentów przez stosowanie koncepcji konwersacyjnej AI w celu uzyskania bardziej praktycznych, naturalnych, zaawansowanych i przydatnych interakcji.

Dlaczego warto zintegrować aplikacje Google Chat z AI?

Typowe przypadki użycia należą do tych kategorii:

  • Tworzenie i edycja treści. generować teksty marketingowe, tworzyć posty w mediach społecznościowych, tworzyć realistyczne obrazy, komponować muzykę lub pomagać w tworzeniu treści wideo;
  • Wyszukiwanie i analizowanie danych Wyodrębniaj kluczowe informacje z nieuporządkowanej bazy wiedzy, podsumowuj długie teksty, klasyfikuj treści lub tłumacz języki z większą dokładnością i szybkością.
  • Rozmowa Prowadź naturalne, informatywne i skuteczne rozmowy, tak jak z asystentem.
  • Automatyzacja zadań wykonywać czynności w imieniu użytkownika, np. tworzyć nowe wydarzenie w kalendarzu, wysyłać dokument lub zarządzać zgłoszeniem w systemie zewnętrznym;

Możliwość zintegrowania tych funkcji bezpośrednio w znanym interfejsie Google Chat to ogromna szansa dla każdego, kto chce zwiększyć wygodę i produktywność użytkowników.

Wymagania wstępne

Co utworzysz

W tym module nauczysz się tworzyć 8 minimalistycznych aplikacji Google Chat, które wykorzystują podstawowe koncepcje AI, aby pokazać, jak można je stosować w rzeczywistych aplikacjach. Wszystkie są tworzone jako dodatki do Google Workspace i korzystają z architektury HTTP:

2f1e2c66f6e2e2f0.png

Działa to w ten sposób:

  1. Użytkownik wysyła wiadomość w Google Chat do aplikacji Google Chat w formie wiadomości na czacie lub w pokoju w Google Chat.
  2. Żądanie HTTP jest wysyłane do serwera WWW działającego jako funkcja Node.js Google Cloud Run, która zawiera logikę aplikacji do obsługi czatu.
  3. Opcjonalnie logika aplikacji Chat może być zintegrowana z usługami Google Workspace (takimi jak Kalendarz i Arkusze), innymi usługami Google (takimi jak Mapy, YouTube i Vertex AI) lub innymi usługami internetowymi (takimi jak system zarządzania projektami lub narzędzie do obsługi zgłoszeń).
  4. Serwer WWW wysyła odpowiedź HTTP z powrotem do usługi aplikacji Chat w Google Chat.
  5. Odpowiedź jest dostarczana do użytkownika.
  6. Opcjonalnie aplikacja Chat może wywoływać interfejs Chat API, aby asynchronicznie publikować wiadomości lub wykonywać inne operacje.

Każda funkcja Node.js Google Cloud Run aplikacji Google Chat zawiera własną wersję tych plików źródłowych, aby wykonać niezbędne działania w krokach 3 i 6 powyżej:

  • package.json: centralny plik manifestu, który służy jako plan projektu Node.js. Służy do definiowania metadanych, zależności i skryptów.
  • env.js: skrypt, który ustawia stałe wymagane do wykonania. Należy go edytować w zależności od środowiska i konfiguracji.
  • index.js: Główny skrypt, który obsługuje logikę zdarzeń interakcji w Google Chat. W tym samouczku zaimplementowano tylko typ zdarzenia wiadomości, ale w rzeczywistych aplikacjach zwykle obejmuje on inne typy, takie jak kliknięcie karty, polecenie ze znakiem ukośnika i okno.

Aplikacja Prompt

Ta aplikacja korzysta z modelu Gemini, aby rozmawiać z użytkownikami w ich językach naturalnych, używając zwięzłych i prostych odpowiedzi tekstowych.

5975b36968ab597a.gif

Formatowanie aplikacji

Ta aplikacja rozszerza Prompt app o obsługę odpowiedzi w formacie RTF zgodnym z określonym formatem tekstu wiadomości w Google Chat.

bc49e0acf0838f28.gif

Aplikacja na ziemi

Ta aplikacja jest oparta na Format app i obsługuje narzędzie wyszukiwarki Google oraz zwraca źródła w odpowiedziach na wiadomości z kartami.

3cf232bf153f6abc.gif

Aplikacja MCP

Ta aplikacja jest oparta na Format app i dodaje obsługę protokołu kontekstowego modelu pomocy dla programistów Google Workspace (MCP).

8219c29366e9120e.gif

Aplikacja wieloetapowa

Ta aplikacja jest oparta na Format app i dodaje obsługę pamięci konwersacyjnej za pomocą bazy danych Google Cloud Firestore.

a819c274ce586451.gif

Aplikacja z narzędziem niestandardowym

Ta aplikacja jest oparta na Multi-turn app i dodaje obsługę niestandardowego narzędzia do wywoływania funkcji, które wywołuje interfejs Google Workspace Calendar API na podstawie informacji podanych przez użytkownika.

a1c4f586b7ab2e24.gif

Strumieniowanie aplikacji

Ta aplikacja korzysta z modelu Gemini do generowania krótkich opowiadań na podstawie tematów podanych przez użytkowników. Interfejs Google Chat API służy do wysyłania wyników i stanów w wiadomościach w miarę postępów.

fd347ba03fe86e22.gif

Aplikacja multimodalna

Ta aplikacja korzysta z modelu Gemini, aby edytować obrazy na podstawie instrukcji tekstowych użytkowników. Interfejsy Google Chat API służą do pobierania i przesyłania obrazów jako załączników do wiadomości.

57574be33474bbc.gif

Czego się nauczysz

  • Podstawowe pojęcia związane z AI mają znaczenie w przypadku aplikacji Google Chat i sposobu ich stosowania.
  • Aby uzyskać dostęp do Vertex AI za pomocą pakietu Google Gen AI SDK.
  • Korzystać z interfejsów Google Workspace API do tworzenia przydatnych i zaawansowanych funkcji.
  • korzystać z Cloud Run do tworzenia skalowalnych aplikacji Google Chat;

Co będzie potrzebne

  • Ukończenie krótkiego wprowadzenia Tworzenie aplikacji HTTP w Google Chat w Node.js. Ten moduł praktyczny opiera się na projekcie Google Cloud, aplikacji Google Chat i funkcji Google Cloud Run.

2. Konfiguracja

Inicjowanie zasobów i uzyskiwanie do nich dostępu

W tej sekcji uzyskasz dostęp do tych zasobów i skonfigurujesz je w preferowanej przeglądarce.

Konfiguracja interfejsu Google Chat API

Otwórz konsolę Google Cloud na nowej karcie, a następnie wykonaj te czynności:

  1. Wybierz projekt.
  2. W polu wyszukiwania Google Cloud wyszukaj „Google Chat API”, a następnie kliknij Google Chat API, Zarządzaj i Konfiguracja.

  1. Ustaw Nazwę aplikacjiOpis na Gen AI App.
  2. Kliknij Zapisz.

9a06649cf9285b99.png

Pokój w Google Chat

Otwórz Google Chat w nowej karcie, a następnie wykonaj te czynności:

  1. Jeśli jeszcze tego nie zrobiono, otwórz pokój czatu z aplikacją Chat.
  2. Wpisz Hello i naciśnij enter. Aplikacja Chat powinna odpowiedzieć, podając Twoje imię i nazwisko oraz zdjęcie profilowe.

e3b195c7b7b8e2af.png

Usługa funkcji Google Cloud Run

Otwórz konsolę Google Cloud na nowej karcie, a następnie wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Menu ☰ > Cloud Run > Usługi.

  1. Na liście usług kliknij addonchatapp, a następnie otwórz kartę Źródło.

b69df34ea0dc48a5.png

Pobieranie kodu źródłowego i zasobów lokalnie

  1. Pobierz to repozytorium GitHub.

  1. W wybranym lokalnym środowisku programistycznym otwórz katalog node/chat/gen-ai-apps.

3c57c15db4ebfddb.png

3. Prompt aplikacji

Ta aplikacja używa Gemini w Vertex AI, aby prowadzić rozmowy z użytkownikami w ich językach naturalnych, używając zwięzłych i prostych odpowiedzi tekstowych. Implementacja opiera się na pakiecie Google Gen AI SDK dla Node.js.

Sprawdź pojęcia

Naturalny język

Każdy język, którym ludzie posługują się w mowie lub piśmie w codziennej komunikacji, w przeciwieństwie do języków sztucznych lub komputerowych.

Funkcje Cloud Run

Funkcje Cloud Run doskonale nadają się do tworzenia bezserwerowych backendów, przetwarzania danych w czasie rzeczywistym i tworzenia inteligentnych aplikacji. Nie ma serwerów, które trzeba by udostępniać, zarządzać nimi, instalować na nich poprawki ani je aktualizować. Automatycznie się skalują, a także charakteryzują się wysoką dostępnością i odpornością na awarie.

Promptowanie

Promptowanie to technika tworzenia danych wejściowych (promptów), które kierują modelem generatywnej AI w celu uzyskania pożądanych wyników. Zwykle polega to na starannym formułowaniu pytań, podawaniu kontekstu, udzielaniu instrukcji lub podawaniu przykładów, aby uzyskać od modelu konkretne i trafne odpowiedzi.

Vertex AI

Vertex AI oferuje wszystko, czego potrzebujesz do tworzenia i używania generatywnej AI, w tym rozwiązania AI, wyszukiwanie i rozmowy, ponad 130 modeli podstawowych i zintegrowaną platformę AI.

c9e9c7a1945b22ac.png

Gemini

Gemini to multimodalny model LLM od Google dostępny w Vertex AI. Pomaga ludziom w pełnym wykorzystaniu ich potencjału, rozwijaniu wyobraźni i ciekawości oraz zwiększaniu produktywności.

Google Gen AI SDK

Google Gen AI SDK to pakiet SDK przeznaczony dla deweloperów do tworzenia aplikacji opartych na Gemini. Zapewnia on ujednolicony interfejs zgodny zarówno z Gemini Developer API, jak i z Vertex AI. Usługa ta jest dostarczana z bibliotekami klienta w językach Python, Go, Node.jsJava.

Proces sprawdzania

c625fdcc8b4a27f4.png

Sprawdzanie kodu źródłowego

env.js

...
// Replace with your GCP project ID.
projectID: process.env.PROJECT_ID || 'your-google-cloud-project-id',

// Replace with your GCP project location.
location: process.env.LOCATION || 'your-google-cloud-project-location',

// Replace with the Gemini model to use.
model: process.env.MODEL || 'gemini-2.5-flash-lite',
...

index.js

// Import the Google Gen AI SDK.
import { GoogleGenAI } from '@google/genai';
...
// Use Vertex AI.
const genAI = new GoogleGenAI({vertexai: true, project: env.projectID, location: env.location});

http('gen-ai-app', async (req, res) => {
 // Send a new Chat message with the generated answer
 return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
   text: await generateAnswer(req.body.chat.messagePayload.message.text)
 }}}}});
});

async function generateAnswer(message) {
 // The prompt is made of the user's message and specific instructions for the model.
 const prompt = 'In a consice and with plain text only (no formatting), '
                 + 'answer the following message in the same language: ' + message;
 const aiResponse = await genAI.models.generateContent({model: env.model, contents: prompt});
 return aiResponse.candidates[0].content.parts[0].text;
};
...

package.json

...
"main": "index.js",
"type": "module",
"scripts": {
  "start": "node index.js"
},
"dependencies": {
  "@google-cloud/functions-framework": "^4.0.0",
  "@google/genai": "1.15.0"
},
...

Włączanie interfejsu Vertex AI API

  1. W konsoli Google Cloud włącz interfejs Vertex AI API:

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy na liście znajduje się Vertex AI API.

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/1-prompt. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz plik env.js w edytorze i ustaw te wartości:
  3. projectID: identyfikator Twojego projektu Google Cloud. Możesz go znaleźć na stronie powitalnej konsoli Google Cloud.

  1. location: region usługi funkcji Cloud Run w Google Cloud. Możesz go pobrać ze strony szczegółów usługi funkcji Google Cloud Run.

  1. model: model, którego chcesz użyć. Wszystkie dostępne modele znajdziesz w dokumentacji Vertex AI. Domyślnie ustawiony jest model Flash, który zapewnia szybkie i tanie wykonywanie.

6c2fb9f554f53a4a.png

  1. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Ustaw Punkt wejścia funkcji na gen-ai-app.
  3. Kliknij , wpisz env.js i kliknij ✔️, aby utworzyć brakujący plik źródłowy.
  4. Zastąp całą zawartość plików index.js, env.jspackage.json zawartością z lokalnego środowiska programistycznego.
  5. Kliknij Zapisz i wdroż ponownie.
  6. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

  1. Na czacie z aplikacją w Google Chat wpisz Hello, how are you? i naciśnij enter. Aplikacja powinna odpowiadać zwięźle w formie zwykłego tekstu zgodnie z instrukcjami w prompcie.

3cc1fd1de2a9e239.png

  1. Na czacie z aplikacją w Google Chat wpisz Bonjour comment allez-vous? i naciśnij enter. Aplikacja powinna odpowiedzieć po francusku zgodnie z instrukcjami w prompcie.

77010f4ad0bde5da.png

4. Formatowanie aplikacji

Ta aplikacja rozszerza Prompt app o obsługę odpowiedzi w formacie tekstu sformatowanego zgodnym z formatem wiadomości tekstowych Google Chat. Instrukcje w prompcie są aktualizowane o wyczerpujący opis różnych opcji, z których może korzystać model.

Sprawdź pojęcia

Wiadomości tekstowe w Google Chat

Wiadomości tekstowe w Google Chat obsługują różne opcje formatowania, które umożliwiają tworzenie bardziej przejrzystych i wyrazistych wiadomości bezpośrednio w interfejsie Google Chat. Opierają się one na konkretnych regułach Markdown, które umożliwiają stosowanie pogrubienia, kursywy, przekreślenia, tworzenie hiperlinków itp.

Proces sprawdzania

c625fdcc8b4a27f4.png

Sprawdź kod źródłowy

index.js

...
async function generateAnswer(message) {
 // Specify formatting options that are compatible with Google Chat messages
 // https://developers.google.com/workspace/chat/format-messages#format-texts
 const prompt = `Use simple text for concise answers. The only formatting options you can use is to
(1) surround some text with a single star for bold such as *text* for strong emphasis
(2) surround some text with a single underscore for italic such as _text_ for gentle emphasis
(3) surround some text with a single tild for strikethrough such as ~text~ for removal
(4) use a less than before followed by a URL followed by a pipe followed by a link text followed
    by a more than for a hyperlink such as <https://example.com|link text> for resource referencing
(5) use a backslash followed by the letter n for a new line such as \n for readibility
(6) surround some text with a single backquote such as \`text\` for quoting code
(7) surround an entire paragraph with three backquotes in dedicated lines such as
    \`\`\`\nparagraph\n\`\`\` for quoting code
(8) prepend lines with list items with a single star or hyphen followed by a single space
    such as * list item or - list item for bulleting ;
DO NOT USE ANY OTHER FORMATTING OTHER THAN THOSE.
Answer the following message in the same language: ${message}`;
...
};
...

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/2-format. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Zastąp całą zawartość pliku index.js zawartością z lokalnego środowiska programistycznego.
  3. Kliknij Zapisz i wdroż ponownie.
  4. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

  1. Na czacie z aplikacją w Google Chat wpisz Showcase all formatting options you have with one paragraph each i naciśnij enter. Aplikacja powinna odpowiedzieć, podając przykłady formatowania na podstawie naszych instrukcji w prompcie.

cc7f7101d9f7c10.png

  1. Na czacie z aplikacją w Google Chat wpisz What are Google Chat apps? What's great about them? i naciśnij enter. Gdy to przydatne, aplikacja powinna odpowiadać z formatowaniem.

83557d4c7071aac8.png

5. Aplikacja naziemna

Ta aplikacja jest oparta na Format app i dodaje obsługę uzasadniania oraz zwracania źródeł. Uruchamia narzędzie wyszukiwarki Google i dołącza karty z linkami do odpowiedzi.

Przejrzyj pojęcia

Grounding

Grounding to technika łączenia modeli ze źródłami informacji. Jest często stosowany w praktycznych zastosowaniach, aby zwiększyć dokładność i trafność generowanych treści poprzez odwoływanie się do danych ze świata rzeczywistego. Zapobiega to halucynacjom modelu i generowaniu nieprawdziwych informacji.

Narzędzie wyszukiwarki Google

Narzędzie wyszukiwarki Google ulepsza grounding, umożliwiając modelom wyszukiwanie w internecie informacji w czasie rzeczywistym, co zapewnia dokładność i aktualność odpowiedzi.

Platforma kart Google Workspace

Framework kart w Google Workspace umożliwia deweloperom tworzenie rozbudowanych, interaktywnych interfejsów użytkownika. Umożliwia tworzenie uporządkowanych i atrakcyjnych wizualnie kart, które mogą zawierać tekst, obrazy, przyciski i inne widżety. Karty te zwiększają wygodę użytkowników, ponieważ zawierają uporządkowane informacje i umożliwiają szybkie wykonywanie działań bezpośrednio w ramach rozmowy.

Przepływ weryfikacji

b72d69a6e79858d6.png

Sprawdź kod źródłowy

index.js

...
const aiResponse = await genAI.models.generateContent({
 model: env.model,
 contents: prompt,
 // Google Search tool is enabled
 config: { tools: [{ googleSearch: {}}]}
});

let groundingCardsV2 = undefined;
const grounding = aiResponse.candidates[0].groundingMetadata;
// Go through the grounding metadata if any
if (grounding && grounding.groundingChunks && grounding.groundingChunks.length > 0) {
 let linkButtons = [];
 grounding.groundingChunks.forEach(groundingChunk => {
   if (groundingChunk.web) {
     // Create one link button per web URL returned
     linkButtons.push({
       text: groundingChunk.web.domain,
       onClick: { openLink: { url: groundingChunk.web.uri}}
     });
   }
 });
 // Create a card with link buttons
 groundingCardsV2 = [{
   cardId: "sourcesCard",
   card: { sections: [{
     header: "Sources",
     widgets: [{ buttonList: { buttons: linkButtons}}]
   }]}
 }];
}

// Send a Chat message with the generated answer
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
 text: aiResponse.candidates[0].content.parts[0].text,
 // The sources are referenced in the card
 cardsV2: groundingCardsV2
}}}}});
...

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/3-ground. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Zastąp całą zawartość pliku index.js zawartością z lokalnego środowiska programistycznego.
  3. Kliknij Zapisz i wdroż ponownie.
  4. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

Na czacie z aplikacją w Google Chat wpisz What's the world population? i naciśnij enter. Aplikacja powinna odpowiedzieć, dołączając linki do źródeł na karcie.

cff461da29c05873.png

6. Aplikacja MCP

Ta aplikacja jest rozszerzeniem Format app, ponieważ obsługuje narzędzia udostępniane przez serwer protokołu kontekstu modelu (MCP) hostowany zdalnie. Łączy się z platformą Google Workspace Developer Assist MCP, która udostępnia narzędzia do uzyskiwania dostępu do dokumentacji dla programistów Google Workspace i wyszukiwania w niej informacji.

Sprawdź pojęcia

Model Context Protocol (MCP)

Model Context Protocol to platforma open source, która integruje modele z usługami zewnętrznymi w ustandaryzowany sposób. Modele mogą programowo wykrywać, rozumieć i wykorzystywać różne narzędzia, co zwiększa ich możliwości, pozwala wykonywać działania w świecie rzeczywistym i uzyskiwać dostęp do aktualnych informacji.

MCP TypeScript SDK

Pakiet SDK TypeScript implementuje pełną specyfikację MCP, co upraszcza tworzenie klientów MCP, którzy łączą się z dowolnym serwerem MCP. Umożliwia też tworzenie serwerów MCP, które zapewniają dostęp do zasobów, promptów i narzędzi.

Proces sprawdzania

e0b324e2cca21915.png

Sprawdź kod źródłowy

index.js

// Import the MCP TypeScript SDK.
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
...
// Create and connect the MCP client from the URL.
const mcpServerUrl = new URL("https://workspace-developer.goog/mcp");
const client = new Client({ name: "gen-ai-app-mcp", version: "1.0.0" });
// Try Streamable HTTP first (new) and SSE (old) as fallback for transport
try {
 await client.connect(new StreamableHTTPClientTransport(mcpServerUrl));
} catch (error) {
 await client.connect(new SSEClientTransport(mcpServerUrl));
}

http('gen-ai-app', async (req, res) => {
 ...
 const aiResponse = await genAI.models.generateContent({
   model: env.model,
   contents: prompt,
   // MCP tools are enabled
   config: { tools: [mcpToTool(client)]}
 });
 ...
}
...

package.json

...
"dependencies": {
  ...
  "@modelcontextprotocol/sdk": "^1.18.1"
},
...

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/4-mcp. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Zastąp całą zawartość plików index.jspackage.json zawartością plików w lokalnym środowisku programistycznym.
  3. Kliknij Zapisz i wdroż ponownie.
  4. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

  1. Na czacie z aplikacją w Google Chat wpisz What can you do for me? i naciśnij enter. Aplikacja powinna opisywać, co potrafi (narzędzia MCP).

13535bfd31d85a50.png

  1. Na czacie z aplikacją w Google Chat wpisz I would like to get the latest official documentation for the Google Sheets API append values i naciśnij enter. Aplikacja powinna odpowiedzieć, podając żądaną dokumentację (przy użyciu narzędzi MCP).

8a6f4ac5b7d5fa4a.png

7. Aplikacja wieloetapowa

Ta aplikacja jest oparta na Format app i dodaje obsługę pamięci konwersacyjnej przez śledzenie historii interakcji na czacie. Umożliwia to bardziej naturalne, inteligentne i spersonalizowane korzystanie z usługi. Aplikacja używa do przechowywania domyślnej bazy danych Google Cloud Firestore powiązanej z projektem Google Cloud.

Przejrzyj pojęcia

Wielokrotne

Pojęcie wieloetapowości odnosi się do zdolności modelu do utrzymywania kontekstu i ciągłości w wielu wymianach zdań i rozmowach. Jest to niezbędna funkcja do obsługi złożonych rozmów, zaawansowanych funkcji opartych na AI i naturalnej obsługi.

Google Cloud Firestore

Google Cloud Firestore to elastyczna i skalowalna baza danych NoSQL w chmurze do tworzenia aplikacji mobilnych, internetowych i serwerowych. Przechowuje dane w dokumentach pogrupowanych w kolekcje i umożliwia synchronizację w czasie rzeczywistym oraz obsługę offline.

Proces sprawdzania

52920a2227467218.png

Sprawdź kod źródłowy

index.js

// Import the Google Cloud Firestore client library.
import { Firestore } from '@google-cloud/firestore';
...
// Configure DB
const USERS_PREFIX = 'users/';
const CHATS_COLLECTION = 'chats';
const db = new Firestore();
...
// Create or update data for a given user
async function createOrUpdateChatHistory(userId, data) {
 await db.collection(CHATS_COLLECTION).doc(userId.replace(USERS_PREFIX, '')).set(data);
};

// Retrieve data snapshot for a given user
async function getChatHistory(userId) {
 return await db.collection(CHATS_COLLECTION).doc(userId.replace(USERS_PREFIX, '')).get();
};
...
...
http('gen-ai-app', async (req, res) => {
 // Retrieve the chat history of the user
 const chatHistory = await getChatHistory(userId);
 const chat = genAI.chats.create({
   model: env.model,
   // Initiate the model with chat history for context
   history: chatHistory.exists ? chatHistory.data().contents : []
 });
 // If no history, send a first message to the model with instructions on how to behave
 if(!chatHistory.exists) {
   const preambule = 'The only formatting options you can use is to '
                   + ...
                   + 'DO NOT USE ANY OTHER FORMATTING OTHER THAN THOSE. '
                   + 'Answer in the same language that I use.';
   // The answer to this message is ignored
   await chat.sendMessage({message: preambule});
 }

 // Send the user's message to the model to generate the answer
 const aiResponse = await chat.sendMessage({message: userMessage});

 // Persist the updated chat history of the user
 await createOrUpdateChatHistory(userId, {contents: chat.getHistory({curated: true})});

 // Send a Chat message with the generated answer
 return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
   text: aiResponse.candidates[0].content.parts[0].text
 }}}}});
});
...

package.json

...
"dependencies": {
  ...
  "@google-cloud/firestore": "^7.11.5"
},
...

Włączanie interfejsu Google Cloud Firestore API

  1. W konsoli Google Cloud włącz interfejs Google Cloud Firestore API:

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy na liście znajduje się Cloud Firestore API.

Tworzenie bazy danych Cloud Firestore

  1. W konsoli Google Cloud kliknij Menu ☰ > Firestore.

  1. Kliknij Utwórz bazę danych Firestore.
  2. Pozostaw domyślną konfigurację i kliknij Utwórz bazę danych.

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/5-multi-turn. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Zastąp całą zawartość plików index.jspackage.json zawartością plików w lokalnym środowisku programistycznym.
  3. Kliknij Zapisz i wdroż ponownie.
  4. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

  1. Na czacie z aplikacją w Google Chat wpisz Can you speak with the English from the 80's for now on? i naciśnij enter. Aplikacja powinna odpowiedzieć pozytywnie.

b273beda7e203b23.png

  1. Na czacie z aplikacją w Google Chat wpisz Define what Google Chat apps are in one sentence i naciśnij enter. Aplikacja powinna nadal odpowiadać w języku angielskim z lat 80.

9156f563c369f186.png

8. Aplikacja z niestandardowym narzędziem

Ta aplikacja korzysta z Multi-turn app, dodając obsługę niestandardowego narzędzia do wywoływania funkcji, które używa interfejsu Google Workspace Calendar API do pobierania następnego wydarzenia z kalendarza publicznego. Model zarządza wszystkimi interakcjami użytkownika, w tym odbieraniem danych wejściowych i dostarczaniem danych wyjściowych z narzędzia. Aplikacja jest jednak nadal odpowiedzialna za wykonywanie niezbędnych wywołań interfejsu API i dostarczanie wyników do modelu na żądanie. Aplikacja używa klucza interfejsu API Google, ponieważ do pobierania publicznych danych kalendarza nie są potrzebne dane logowania użytkownika.

Sprawdź pojęcia

Wywoływanie funkcji

Wywoływanie funkcji umożliwia modelowi wykrywanie, kiedy żądanie użytkownika może zostać zrealizowane przez zewnętrzne narzędzie lub interfejs API. Następnie model podaje parametry potrzebne do wywołania tego narzędzia, integrując w ten sposób funkcje zewnętrzne w swoich odpowiedziach.

Interfejsy Google Workspace API

Interfejsy Google Workspace API umożliwiają programistom integrowanie aplikacji z różnymi usługami Google Workspace. Te interfejsy API zapewniają programowy dostęp do funkcji różnych usług, takich jak Gmail, Google Chat, Kalendarz, Dysk, Dokumenty, Arkusze i inne, umożliwiając automatyzację, synchronizację danych i tworzenie niestandardowych procesów.

Proces sprawdzania

ed866ca369a4512f.png

Sprawdź kod źródłowy

env.js

...
// Replace with your Google API key.
googleApiKey: process.env.GOOGLE_API_KEY || 'your-google-api-key',
...

index.js

// Import parameter type definitions from Google Gen AI SDK.
import { GoogleGenAI, Type } from '@google/genai';
// Import Google APIs that include the Google Calendar API.
import { google } from 'googleapis';
...
// Create a Google Calendar API client using a Google API key.
const calendar = google.calendar({version: 'v3', auth: env.googleApiKey});
...
// Define the tool used for function calling
const getNextPublicCalendarEventTitleFunctionDeclaration = {
 name: 'getNextPublicCalendarEventTitle',
 parameters: {
   type: Type.OBJECT,
   description: 'Get the title of the next event of a public calendar.',
   properties: {
     calendarId: {
       type: Type.STRING,
       description: 'ID of the public calendar to get the next event title.',
     }
   },
   required: ['calendarId']
 }
};

// The function referenced in the tool definition
async function getNextPublicCalendarEventTitle(calendarId) {
 // Use Calendar API to retrieve the next event in the given calendar
 const response = await calendar.events.list({
   calendarId: calendarId,
   timeMin: new Date().toISOString(),
   maxResults: 1,
   singleEvents: true,
   orderBy: 'startTime',
 });
 const events = response.data.items;
 if (!events || events.length === 0) {
   return null;
 }
 return `${events[0].summary}`;
};
...
...
http('gen-ai-app', async (req, res) => {
 ...
 // Send the user's message to the model to generate the answer
 let aiResponse = await chat.sendMessage({
   message: userMessage,
   // The tool used for function calling is enabled
   config: { tools: [{ functionDeclarations: [getNextPublicCalendarEventTitleFunctionDeclaration]}]}
 });

 // Handle the function calling turn with the model if any
 const functionCall = aiResponse.candidates[0].content.parts[0].functionCall;
 if (functionCall) {
   let functionResult = null;
   switch(functionCall.name) {
     case 'getNextPublicCalendarEventTitle':
       // Make the function call as per model request
       functionResult = await getNextPublicCalendarEventTitle(functionCall.args['calendarId']);
       break;
     default:
   }
   // Finish the function calling turn by sending the execution result to the model
   aiResponse = await chat.sendMessage({ message: { functionResponse: {
     name: functionCall.name,
     response: { output: functionResult }
   }}});
 }
 ...
 // Send a Chat message with the generated answer
 return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
   text: aiResponse.candidates[0].content.parts[0].text
 }}}}});
});
...

package.json

...
"dependencies": {
  ...
   "googleapis": "^160.0.0"
},
...

Włączanie interfejsu Calendar API

  1. W konsoli Google Cloud włącz interfejs Google Calendar API:

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a następnie sprawdź, czy na liście znajduje się Interfejs Google Calendar API.

Tworzenie klucza interfejsu API Google

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Dane logowania.

  1. Kliknij + Utwórz dane logowania, a potem wybierz Klucz interfejsu API.
  2. Poczekaj na zakończenie operacji.
  3. W oknie potwierdzenia znajdź pole tekstowe Twój klucz API i kliknij Skopiuj do schowka.

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/6-custom-tool. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Zastąp całą zawartość plików index.jspackage.json zawartością plików w lokalnym środowisku programistycznym.
  3. Otwórz plik env.js i wykonaj te czynności:
  4. Dodaj do wyeksportowanych pól parametr googleApiKey.
export const env = {
 ...
 googleApiKey: 'your-google-api-key',
};
  1. Zastąp your-google-api-key kluczem interfejsu Google API skopiowanym w poprzednim kroku. Możesz go pobrać ze strony danych logowania Google Cloud, klikając Pokaż klucz.

  1. Kliknij Zapisz i wdroż ponownie.
  2. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

  1. W Kalendarzu Google wykonaj te czynności:
  2. W sekcji Inne kalendarze kliknij +, a następnie Utwórz nowy kalendarz.
  3. Ustaw Name na My Public Calendar
  4. Kliknij Utwórz kalendarz.
  5. Poczekaj na zakończenie operacji.
  6. W sekcji Ustawienia moich kalendarzy wybierz nowo utworzony kalendarz Mój kalendarz publiczny.
  7. W sekcji Uprawnienia dostępu do wydarzeń wybierz Udostępnij publicznie, a następnie w oknie Ostrzeżenie kliknij OK.
  8. W sekcji Uprawnienia dostępu do wydarzeń w menu obok opcji Udostępnij publicznie wybierz Wyświetlanie wszystkich szczegółów wydarzeń.
  9. W sekcji Integrowanie kalendarza skopiuj do schowka wartość pola Identyfikator kalendarza.
  10. Aby zamknąć Ustawienia, kliknij strzałkę w lewo w lewym górnym rogu.
  11. Kliknij kalendarz, aby utworzyć nowe wydarzenie na jutro, wpisz Important meeting, w menu wybierz Mój kalendarz publiczny, a następnie kliknij Zapisz.
  12. Na czacie z aplikacją w Google Chat wpisz When is the next meeting? i naciśnij enter. Aplikacja powinna poprosić o precyzyjną datę, ponieważ nie wiadomo, o który kalendarz chodzi.

40383099311b0813.png

  1. W pokoju wiadomości na czacie w aplikacji Chat w Google Chat wklej skopiowany wcześniej do schowka identyfikator kalendarza i naciśnij enter. Aplikacja powinna odpowiedzieć, podając szczegóły utworzonego wcześniej wydarzenia.

4c614c7e444e3b45.png

9. Aplikacja do odtwarzania strumieniowego

Ta aplikacja korzysta z modelu Gemini, aby generować 2-minutowe opowiadania na podstawie tematów podanych przez użytkowników. Generowanie pełnych odpowiedzi zajmuje trochę czasu, dlatego aplikacja wywołuje model w trybie przesyłania strumieniowego i korzysta z interfejsu Google Chat API, aby wysyłać treści i stany w wiadomościach w miarę postępów.

Sprawdź pojęcia

Google Chat API

Google Chat API umożliwia programistom interakcję z Google Chat, dzięki czemu mogą oni wysyłać wiadomości, tworzyć pokoje, zarządzać uczestnikami rozmów i wykonywać inne czynności, aby tworzyć niestandardowe integracje i boty.

Strumieniując

Strumieniowanie to proces odbierania danych w ciągłym strumieniu, a nie czekania na wygenerowanie całej odpowiedzi. W przypadku wywołań modeli AI przesyłanie strumieniowe umożliwia aplikacjom wyświetlanie użytkownikom częściowych wyników od razu po ich udostępnieniu, co poprawia postrzeganą wydajność i wygodę użytkowników, zwłaszcza w przypadku dłuższych zadań generowania. Jest to szczególnie istotne w przypadku modeli generatywnej AI, które mogą potrzebować dużo czasu na wygenerowanie pełnych danych wyjściowych.

Proces sprawdzania

25f9036eecd9a48b.png

Sprawdzanie kodu źródłowego

index.js

// Import Google Auth library used to create Google Chat API client
import { GoogleAuth } from 'google-auth-library';
...
http('gen-ai-app', async (req, res) => {
 // Use app authentication.
 // Application Default Credentials (ADC) will use the Cloud Run function's
 // default service account, we just need to specify the Chat API app auth scopes.
 const auth = new GoogleAuth({
   // Chat API app authentication scopes
   scopes: ['https://www.googleapis.com/auth/chat.bot']
 });

 // Create Chat service client with application credentials
 const chatClient = google.chat({
   version: 'v1',
   auth: await auth.getClient()
 });

 // Send a server streaming request to generate the answer
 const aiResponse = await genAI.models.generateContentStream({
   model: env.model,
   contents: `Generate a story about a ${userMessage}. `
               + `It should take 2 minutes to read it out loud.`
 });

 // Send a first Chat message to summarize what will be done
 await chatClient.spaces.messages.create({
   parent: spaceName,
   requestBody: { text: `Sure, let me work on generating a short story `
                           + `about a ${userMessage} like you requested.`}
 });

 // Go through the response chunks received from the stream
 let messageName = undefined;
 let answer = "";
 for await (const chunk of aiResponse) {
   const text = chunk.text;
   if (text) {
     // Update the answer by concatenating the response chunks
     answer += text;
     // The Chat message request body is the same for message creation and update
     const responseBody = {
       text: answer,
       accessoryWidgets: [getStatusAccessoryWidget('Generating story...', 'progress_activity')]
     }
     if (!messageName) {
       // Create a Chat message dedicated to the generated content
       const messageResponse = await chatClient.spaces.messages.create({
         parent: spaceName,
         requestBody: responseBody
       });
       messageName = messageResponse.data.name;
     } else {
       // Update the Chat message dedicated to the generated content
       await chatClient.spaces.messages.patch({
         name: messageName,
         updateMask: 'text,accessory_widgets',
         requestBody: responseBody
       });
     }
   }
 }

 // Update the accessory widget with final progress status
 await chatClient.spaces.messages.patch({
   name: messageName,
   updateMask: 'accessory_widgets',
   requestBody: {
     accessoryWidgets: [getStatusAccessoryWidget('Story is fully generated', 'check')]
   }
 });

 // Send a last Chat message to confirm it's done
 return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
   text: 'All done, I hope you like it!'
 }}}}});
});

// Create an accessory widget with progress status
function getStatusAccessoryWidget(text, icon) {
 return { buttonList: { buttons: [{
   text: text,
   icon: { materialIcon: { name: icon}},
   // This is a workaround to have the icon shown, it's not clickable
   onClick: { openLink: { url: "https://google.com"}},
   disabled: true
 }]}};
}

package.json

...
"dependencies": {
  ...
   "google-auth-library": "^10.3.0"
},
...

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/7-stream. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Zastąp całą zawartość plików index.jspackage.json zawartością plików w lokalnym środowisku programistycznym.
  3. Kliknij Zapisz i wdroż ponownie.
  4. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

Na czacie z aplikacją w Google Chat wpisz turtle i naciśnij enter. Aplikacja powinna odpowiedzieć komunikatem potwierdzającym, wygenerowaną historią z informacją o postępach oraz komunikatem potwierdzającym zakończenie.

17600cd1490972c7.png

26af4b3d442712a5.png

10. Aplikacja multimodalna

Ta aplikacja korzysta z modelu do edytowania obrazów na podstawie instrukcji tekstowych użytkowników. Zarówno użytkownicy, jak i aplikacja dodają swoje obrazy jako załączniki do wiadomości w Google Chat, aby je wymieniać. Aplikacja korzysta z interfejsów Google Chat API, aby programowo pobierać i przesyłać obrazy.

Sprawdź pojęcia

Załącznik do wiadomości w Google Chat

Załączniki do wiadomości w Google Chat to pliki, takie jak obrazy lub filmy, które są przesyłane do wiadomości w Google Chat. Tymi załącznikami można zarządzać programowo, co umożliwia aplikacjom interakcję z multimediami bezpośrednio w rozmowach.

Przekazywanie dostępu w całej domenie (DWD)

Przekazywanie dostępu w całej domenie umożliwia kontu usługi podszywanie się pod użytkowników w domenie Google Workspace, dzięki czemu aplikacje mogą wykonywać działania w imieniu tych użytkowników bez bezpośredniej autoryzacji. Jest to przydatne w przypadku aplikacji, które muszą uzyskiwać dostęp do danych użytkownika lub wykonywać działania (np. przesyłać załączniki do Google Chat) w kontekście użytkownika, nawet gdy nie jest on aktywnie obecny, poprzez przyznanie kontu usługi szerokiego dostępu w całej domenie.

Proces sprawdzania

74295b25761f1682.png

Sprawdź kod źródłowy

env.js

...
// Replace with the Gemini model to use.
model: process.env.MODEL || 'gemini-2.0-flash-preview-image-generation',
...

index.js

...
// Import byte stream management libraries.
import { Buffer } from 'buffer';
import { Readable } from 'stream';
...
// Download a Google Chat attachment as base 64 string.
async function downloadFile(appChatClient, attachmentName) {
 const response = await appChatClient.media.download({
     resourceName: attachmentName,
     alt: 'media'
   }, {
     responseType: 'stream'
 });
 const chunks = [];
 return new Promise((resolve) => {
   response.data.on('data', (chunk) => {
     chunks.push(chunk);
   });
   response.data.on('end', () => {
     const fileBuffer = Buffer.concat(chunks);
     const base64String = fileBuffer.toString('base64');
     resolve(base64String);
   });
 });
}

// Upload a base 64 string as Google Chat attachment of a space.
async function uploadFile(useChatClient, spaceName, data) {
 const filename = 'generated_image.png';
 return await userChatClient.media.upload({
   parent: spaceName,
   requestBody: { filename: filename },
   media: {
     mimeType: 'image/png',
     body: Readable.from(Buffer.from(data, 'base64'))
   }
 });
}
...
...
http('gen-ai-app', async (req, res) => {
 const userEmail = req.body.chat.user.email;
 const spaceName = req.body.chat.messagePayload.space.name;
 const userMessage = req.body.chat.messagePayload.message.text;
 const attachmentName = req.body.chat.messagePayload.message.attachment[0].attachmentDataRef.resourceName;
 const attachmentContentType = req.body.chat.messagePayload.message.attachment[0].contentType;

 // Set up app authentication used to download the attachment input
 // Application Default Credentials (ADC) will use the Cloud Run function's
 // default service account.
 const appAuth = new GoogleAuth({
   // Specify the Chat API app authentication scopes
   scopes: ['https://www.googleapis.com/auth/chat.bot']
 });
 // Create Chat service client with application credentials
 const appChatClient = google.chat({
   version: 'v1',
   auth: await appAuth.getClient()
 });

 // Send a request to generate the answer with both text and image contents
 const aiResponse = await genAI.models.generateContent({
   model: env.model,
   contents: [{
     role: 'USER',
     parts: [
       // The text content of the message
       { text: userMessage },
       // The attachment of the message is downloaded and added inline
       { inlineData: {
         data: await downloadFile(appChatClient, attachmentName),
         mimeType: attachmentContentType
       }}
     ]
   }],
   config: { responseModalities: ['TEXT', 'IMAGE']}
 });

 // Set up user impersonation authentication used to upload the attachment output
 // and send the response.
 const impersonatedUserAuth = new GoogleAuth({
   // Specify the Chat API user authentication scopes
   scopes: ['https://www.googleapis.com/auth/chat.messages'],
   keyFile: './credentials.json',
   clientOptions: {
     // Impersonate the user who sent the original message
     subject: userEmail
   }
 });
 // Create Chat service client with impersonated user credentials
 const userChatClient = google.chat({
   version: 'v1',
   auth: await impersonatedUserAuth.getClient()
 });

 let responseText = undefined;
 let responseAttachment = undefined;
 // Go through the response parts received
 for (const part of aiResponse.candidates[0].content.parts) {
   if (part.inlineData) {
     // The resulting image is retrieved inline and uploaded
     const mediaResponse = await uploadFile(userChatClient, spaceName, part.inlineData.data);
     responseAttachment = mediaResponse.data;
   } else {
     responseText = part.text;
   }
 }

 // Create a Chat message dedicated to the generated content
 await userChatClient.spaces.messages.create({
   parent: spaceName,
   requestBody: {
     text: responseText ? responseText : 'Here it is!',
     // The uploaded image is referenced as attachment
     attachment: responseAttachment ? [responseAttachment] : undefined
   }
 });

 // Send a last Chat message to confirm it's done
 return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
   text: 'Done, feel free to let me know if you need anything else!'
 }}}}});
});
...

Konfigurowanie konta usługi i eksportowanie prywatnego klucza

  1. Delegowanie domyślnego konta usługi Cloud Run do zarządzania wiadomościami w Google Chat użytkowników. Postępuj zgodnie z instrukcjami, używając zakresu https://www.googleapis.com/auth/chat.messages. Aby pobrać identyfikator klienta domyślnego konta usługi Cloud Run, wykonaj te czynności:
  2. Kliknij Menu ☰ > Administracja > Konta usługi.

  1. Kliknij konto usługi o nazwie Domyślne konto usługi Compute.
  2. Rozwiń sekcję Ustawienia zaawansowane.
  3. Skopiuj Identyfikator klienta do schowka.
  4. Tworzenie i pobieranie nowego klucza prywatnego dla domyślnego konta usługi Cloud Run
  5. Kliknij Menu ☰ > Administracja > Konta usługi.

  1. Kliknij konto usługi o nazwie Domyślne konto usługi Compute.
  2. Kliknij kartę Klucze, a potem Dodaj kluczUtwórz nowy klucz.
  3. Wybierz JSON, a potem kliknij Utwórz.
  4. Nowa para kluczy publicznych/prywatnych zostanie wygenerowana i pobrana na Twoje urządzenie jako nowy plik. Zapisz pobrany plik JSON i skopiuj jego zawartość do schowka. Jest to jedyna kopia tego klucza. Informacje o tym, jak bezpiecznie przechowywać klucz, znajdziesz w artykule Zarządzanie kluczami konta usługi.

Aktualizowanie funkcji Node.js w Google Cloud Run

  1. W lokalnym środowisku programistycznym zmień bieżący katalog na node/chat/gen-ai-apps/8-multimodal. Zawiera cały kod źródłowy i wszystkie zasoby.
  2. Otwórz kartę Źródło na stronie szczegółów usługi funkcji Google Cloud Run.

  1. Kliknij Edytuj źródło.
  2. Kliknij , wpisz credentials.json i kliknij ✔️, aby utworzyć brakujący plik zasobu.
  3. Wklej zawartość pliku JSON pobranego w poprzednim kroku do nowo utworzonego pliku credentials.json.
  4. Zastąp całą zawartość pliku index.js zawartością pliku w lokalnym środowisku programistycznym.
  5. Otwórz plik env.js i ustaw wartość model na gemini-2.0-flash-preview-image-generation.
...
model: 'gemini-2.0-flash-preview-image-generation',
...
  1. Kliknij Zapisz i wdroż ponownie.
  2. Poczekaj na zakończenie wdrażania wersji.

487b64f2d3b1a104.png

Wypróbuj

W pokoju na czacie z aplikacją Chat w Google Chat prześlij swoje zdjęcie portretowe w formacie PNG, wpisz Change the background color to blue i naciśnij enter. Aplikacja powinna odpowiedzieć, wyświetlając wersję zdjęcia z niebieskim tłem i wiadomość z potwierdzeniem zakończenia.

270547e7a83c1841.png

11. Czyszczenie danych

Usuwanie projektu Google Cloud

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym ćwiczeniu, zalecamy usunięcie projektu Google Cloud.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu ☰ > Administracja > Ustawienia.

  1. Kliknij Wyłącz.
  2. Wpisz identyfikator projektu.
  3. Kliknij Wyłącz mimo to.

407699a4e03afea6.png

12. Gratulacje

Gratulacje! Utworzyliście aplikacje Google Chat jako dodatki do Google Workspace, które integrują podstawowe koncepcje AI.

Co dalej?

W tym laboratorium kodu prezentujemy tylko minimalistyczne przypadki użycia, ale istnieje wiele obszarów, które możesz rozwinąć w swoich aplikacjach Google Chat, np.:

  • obsługiwać inne typy multimediów, takie jak dźwięk i wideo;
  • Integracja z innymi modelami AI, w tym modelami niestandardowymi, hostowanymi na dedykowanych platformach, takich jak Vertex AI.
  • Integracja z agentami, w tym z agentami niestandardowymi, hostowanymi na dedykowanych platformach, takich jak Agentspace i Dialogflow CX.
  • Korzystaj z pętli opinii i klasyfikacji, aby monitorować i zwiększać wydajność.
  • Publikuj na platformie, aby ułatwić pracę zespołom, organizacjom i użytkownikom publicznym.

Więcej informacji

Deweloperzy mają do dyspozycji wiele materiałów, takich jak filmy w YouTube, strony z dokumentacją, przykłady kodu i samouczki: