Wywoływanie funkcji za pomocą interfejsu Gemini API


Modele generatywne są skuteczne w rozwiązywaniu wielu typów problemów. Są one jednak ograniczone przez takie czynniki jak:

  • Po trenowaniu są zamrażane, co prowadzi do nieaktualnej wiedzy.
  • Nie mogą wysyłać zapytań dotyczących danych zewnętrznych ani ich modyfikować.

Wywołanie funkcji może pomóc w pokonaniu niektórych z tych ograniczeń. Funkcja wywoływania jest czasami nazywana używaniem narzędzia, ponieważ pozwala modelowi korzystać z zewnętrznych narzędzi, takich jak interfejsy API i funkcje, do generowania ostatecznej odpowiedzi.

Więcej informacji o wywoływaniu funkcji znajdziesz w dokumentacji Google Cloud, w tym przydatną listę przypadków użycia wywołania funkcji.

Wywołania funkcji są obsługiwane przez Gemini 1.0 Pro, Gemini 1.5 Pro i Gemini 1.5 Flash.

Z tego przewodnika dowiesz się, jak wdrożyć konfigurację wywołania funkcji podobną do przykładu opisanego w następnej głównej sekcji tej strony. Ogólnie rzecz biorąc, aby skonfigurować wywoływanie funkcji w aplikacji:

  1. Napisz funkcję, która może dostarczyć modelowi informacji potrzebnych do wygenerowania ostatecznej odpowiedzi (funkcja może na przykład wywołać zewnętrzny interfejs API).

  2. Utwórz deklarację funkcji, która opisuje funkcję i jej parametry.

  3. Podaj deklarację funkcji podczas inicjalizacji modelu, aby model wiedział, jak w razie potrzeby z niej korzystać.

  4. Skonfiguruj aplikację tak, aby model mógł przesłać wymagane informacje, które pozwolą aplikacji wywołać funkcję.

  5. Przekaż odpowiedź funkcji z powrotem do modelu, aby mógł wygenerować ostateczną odpowiedź.

Przejdź do implementacji kodu

Omówienie przykładu wywołania funkcji

Wysyłając żądanie do modelu, możesz też przekazać mu zestaw „narzędzi” (np. funkcji), których może użyć do wygenerowania ostatecznej odpowiedzi. Aby korzystać z tych funkcji i je wywoływać (czyli „wywoływać funkcje”), model i aplikacja muszą wymieniać się informacjami. Dlatego zalecany sposób wywoływania funkcji to interfejs czatu wielostronnego.

Załóżmy, że masz aplikację, w której użytkownik może wpisać prompt, np.: What was the weather in Boston on October 17, 2024?.

Modele Gemini mogą nie znać tych informacji o pogodzie, ale wyobraź sobie, że znasz interfejs API zewnętrznej usługi pogodowej, który może je zapewnić. Możesz wywoływać funkcje, aby umożliwić modelowi Gemini dostęp do tego interfejsu API i jego informacji o pogodzie.

Najpierw napiszesz w aplikacji funkcję fetchWeather, która współpracuje z tym hipotetycznym zewnętrznym interfejsem API, który ma te dane wejściowe i wyjściowe:

Parametr Typ Wymagany Opis
Dane wejściowe
location Obiekt Tak Nazwa miasta i stanu, dla których ma być wyświetlana pogoda.
Obsługiwane są tylko miasta w Stanach Zjednoczonych. Musi być zawsze zagnieżdżonym obiektem typu city lub state.
date Ciąg znaków Tak Data, dla której ma być pobierana pogoda (musi być zawsze w formacie YYYY-MM-DD).
Wyniki
temperature Liczba całkowita Tak Temperatura (w stopniach Fahrenheita)
chancePrecipitation Ciąg znaków Tak Szanse na opady (wyrażone w procentach)
cloudConditions Ciąg znaków Tak Warunki Cloud (jeden z tych: clear, partlyCloudy, mostlyCloudy, cloudy)

Podczas inicjowania modelu informujesz go, że istnieje funkcja fetchWeather i jak można jej używać do przetwarzania przychodzących żądań (w razie potrzeby). Jest to tzw. „deklaracja funkcji”. Model nie wywołuje funkcji bezpośrednio. Gdy model przetwarza przychodzące żądanie, decyduje, czy funkcja fetchWeather może pomóc mu w odpowiedzi na to żądanie. Jeśli model uzna, że funkcja może być przydatna, wygeneruje uporządkowane dane, które pomogą Twojej aplikacji wywołać tę funkcję.

Ponownie spójrz na przychodzące żądanie: What was the weather in Boston on October 17, 2024?. Model prawdopodobnie zdecyduje, że funkcja fetchWeather może pomóc w wygenerowaniu odpowiedzi. Model sprawdziłby, jakie parametry wejściowe są potrzebne do funkcji fetchWeather, a następnie wygenerowałby uporządkowane dane wejściowe dla tej funkcji, które wyglądałyby mniej więcej tak:

{
  functionName: fetchWeather,
  location: {
    city: Boston,
    state: Massachusetts  // the model can infer the state from the prompt
  },
  date: 2024-10-17
}

Model przekazuje te uporządkowane dane wejściowe do aplikacji, aby mogła ona wywołać funkcję fetchWeather. Gdy aplikacja otrzyma warunki pogodowe z interfejsu API, przekaże te informacje do modelu. Te informacje o pogodzie umożliwiają modelowi dokończenie końcowego przetwarzania i wygenerowanie odpowiedzi na początkowe żądanie.What was the weather in Boston on October 17, 2024?

Model może podać ostateczną odpowiedź w języku naturalnym, np.: On October 17, 2024, in Boston, it was 38 degrees Fahrenheit with partly cloudy skies.

Diagram pokazujący, jak wywoływanie funkcji wiąże się z modelem, który wchodzi w interakcję z funkcją w aplikacji 

Implementacja wywoływania funkcji

Zanim zaczniesz

Jeśli jeszcze tego nie zrobisz, zapoznaj się z przewodnikiem po pakietach SDK Vertex AI in Firebase. Upewnij się, że masz wykonane wszystkie te czynności:

  1. Skonfiguruj nowy lub istniejący projekt Firebase, w tym używając abonamentu Blaze i włącz wymagane interfejsy API.

  2. Połącz aplikację z Firebase, w tym zarejestruj ją i dodaj do niej konfigurację Firebase.

  3. Dodaj pakiet SDK i zainicjuj usługę Vertex AI oraz model generatywny w swojej aplikacji.

Po połączeniu aplikacji z Firebase, dodaniu pakietu SDK i inicjalizacji usługi Vertex AI oraz modelu generatywnego możesz wywołać funkcję Gemini API.

Pozostałe kroki w tym przewodniku pokazują, jak zaimplementować konfigurację wywołania funkcji podobną do omówionej w sekcji Omówienie przykładu wywołania funkcji (patrz górna część tej strony).

Pełny fragment kodu dla tego przykładu wywołania funkcji znajdziesz dalej na tej stronie.

Krok 1. Napisz funkcję

Wyobraź sobie, że masz aplikację, w której użytkownik może wpisać prośbę o dostęp do danych:What was the weather in Boston on October 17, 2024?. Modele Gemini mogą nie znać tych informacji o pogodzie. Załóżmy jednak, że znasz zewnętrzny interfejs API usługi pogodowej, który może je udostępnić. Przykłady w tym przewodniku opierają się na tym hipotetycznym zewnętrznym interfejsie API.

W aplikacji napisz funkcję, która będzie współpracować z hipotetycznym zewnętrznym interfejsem API, i przekaż modelowi informacje potrzebne do wygenerowania ostatecznego żądania. W tym przykładzie pogody będzie to funkcja fetchWeather, która wykonuje wywołanie do tego hipotetycznego zewnętrznego interfejsu API.

Krok 2. Utwórz deklarację funkcji

Utwórz deklarację funkcji, którą później przekażesz modelowi (następny krok w tym przewodniku).

W deklaracji podaj jak najwięcej szczegółów w opisach funkcji i jej parametrów.

Model korzysta z informacji w deklaracji funkcji, aby określić, którą funkcję wybrać i jak podać wartości parametrów w przypadku rzeczywistego wywołania funkcji. W dalszej części tej strony znajdziesz sekcję Dodatkowe zachowania i opcje, w której model może wybierać funkcje, a także jak kontrolować ten wybór.

Pamiętaj o tych kwestiach dotyczących przesłanego schematu:

  • Deklaracje funkcji muszą być podane w formacie schematu zgodnym z schematem OpenAPI. Vertex AI obsługuje schemat OpenAPI w ograniczonym zakresie.

    • Obsługiwane są te atrybuty: type, nullable, required, format, description, properties, items, enum.

    • Te atrybuty nie są obsługiwane: default, optional, maximum, oneOf.

  • Domyślnie w przypadku pakietów SDK Vertex AI in Firebase wszystkie pola są uważane za wymagane, chyba że w tablicy optionalProperties zostaną określone jako opcjonalne. W przypadku tych pól opcjonalnych model może wypełnić pola lub je pominąć. Zwróć uwagę, że jest to działanie domyślne w przypadku Vertex AI Gemini API.

Sprawdzone metody dotyczące deklaracji funkcji, w tym wskazówki dotyczące nazw i opisów, znajdziesz w sekcji Sprawdzone metody w dokumentacji Google Cloud.

Aby utworzyć deklarację funkcji:

Krok 3. Podaj deklarację funkcji podczas inicjalizacji modelu

Maksymalna liczba deklaracji funkcji, które możesz podać w prośbie, to 128. Więcej informacji o tym, jak model może wybierać funkcje, oraz o tym, jak możesz kontrolować ten wybór (za pomocą toolConfig do ustawienia trybu wywoływania funkcji), znajdziesz w sekcji Dodatkowe zachowania i opcje dalej na tej stronie.

Dowiedz się, jak wybrać model Gemini i opcjonalnie lokalizacjęodpowiednią do Twojego przypadku użycia i aplikacji.

Krok 4. Wywołaj funkcję, aby wywołać zewnętrzny interfejs API.

Jeśli model uzna, że funkcja fetchWeather może pomóc w wygenerowaniu ostatecznej odpowiedzi, aplikacja musi wywołać tę funkcję, korzystając ze strukturyzowanych danych wejściowych dostarczonych przez model.

Informacje muszą być przekazywane między modelem a aplikacją, dlatego zalecany sposób wywoływania funkcji to interfejs czatu wieloetapowego.

Ten fragment kodu pokazuje, jak aplikacja jest informowana, że model chce użyć funkcji fetchWeather. Widać też, że model dostarczył niezbędne wartości parametrów wejściowych dla wywołania funkcji (i jego bazowego zewnętrznego interfejsu API).

W tym przykładzie żądanie przychodzące zawierało prompt What was the weather in Boston on October 17, 2024?. Na podstawie tego promptu model wywnioskował parametry wejściowe wymagane przez funkcję fetchWeather (czyli city, state i date).

Krok 5. Przekaż dane wyjściowe funkcji modelowi, aby wygenerować końcową odpowiedź

Gdy funkcja fetchWeather zwróci informacje o pogodzie, aplikacja musi przekazać je do modelu.

Następnie model wykonuje ostatnie przetwarzanie i generuje ostateczną odpowiedź w języku naturalnym, np.: On October 17, 2024 in Boston, it was 38 degrees Fahrenheit with partly cloudy skies.

Dodatkowe zachowania i opcje

Oto kilka dodatkowych zachowań wywoływania funkcji, które musisz uwzględnić w kodzie, oraz opcje, którymi możesz zarządzać.

Model może poprosić o ponowne wywołanie funkcji lub innej funkcji.

Jeśli odpowiedź z jednego wywołania funkcji jest niewystarczająca do wygenerowania ostatecznej odpowiedzi, model może poprosić o dodatkowe wywołanie funkcji lub o wywołanie zupełnie innej funkcji. Może się to zdarzyć tylko wtedy, gdy w deklaracji funkcji w liście funkcji podasz więcej niż jedną funkcję.

Aplikacja musi uwzględniać fakt, że model może poprosić o dodatkowe funkcje.

Model może wywołać wiele funkcji jednocześnie.

Na liście deklaracji funkcji, którą przekazujesz modelowi, możesz podać maksymalnie 128 funkcji. W związku z tym model może uznać, że do wygenerowania ostatecznej odpowiedzi potrzebne są różne funkcje. Może też zdecydować się wywołać niektóre z nich jednocześnie – nazywa się to wywoływaniem funkcji równolegle.

Aplikacja musi uwzględniać fakt, że model może jednocześnie wykonywać wiele funkcji, a także przekazywać modelowi wszystkie odpowiedzi z tych funkcji.

Wywoływanie funkcji równolegle jest obsługiwane przez Gemini 1.5 Pro i Gemini 1.5 Flash.

Możesz kontrolować, jak i czy model może prosić o wywoływanie funkcji.

Możesz nałożyć pewne ograniczenia dotyczące tego, jak i czy model powinien używać podanych deklaracji funkcji. Jest to tzw. ustawienie trybu wywoływania funkcji. Oto przykłady:

  • Zamiast pozwalać modelowi na wybór między natychmiastową odpowiedzią w naturalnym języku a wywołaniem funkcji, możesz zmusić go do zawsze używania wywołań funkcji. Nazywamy to wymuszonym wywołaniem funkcji.

  • Jeśli podasz kilka deklaracji funkcji, możesz ograniczyć model do korzystania tylko z podzbioru podanych funkcji.

Te ograniczenia (czyli tryby) możesz zaimplementować, dodając konfigurację narzędzia (toolConfig) wraz z promptem i deklaracjami funkcji. W konfiguracji narzędzia możesz wybrać jeden z tych trybów. Najbardziej przydatny tryb to ANY.

Tryb Opis
AUTO Domyślne zachowanie modelu. Model decyduje, czy użyć wywołania funkcji czy odpowiedzi w języku naturalnym.
ANY Model musi używać wywołań funkcji („wymuszone wywoływanie funkcji”). Aby ograniczyć model do podzbioru funkcji, w polu allowedFunctionNames podaj dozwolone nazwy funkcji.
NONE Model nie może używać wywołań funkcji. Takie działanie jest równoważne żądaniu modelu bez żadnych powiązanych deklaracji funkcji.

Tryb wywoływania funkcji jest obsługiwany przez Gemini 1.5 Pro i Gemini 1.5 Flash.

Co jeszcze możesz zrobić?

Wypróbuj inne funkcje usługi Gemini API

Dowiedz się, jak kontrolować generowanie treści

Możesz też eksperymentować z promptami i konfiguracjami modeli za pomocą Vertex AI Studio.

Więcej informacji o modelach Gemini

Dowiedz się więcej o modelach dostępnych w różnych przypadkach użycia oraz ich limitach i cenach.


Prześlij opinię o tym, jak oceniasz korzystanie z usługi Vertex AI in Firebase