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ń do danych zewnętrznych ani ich modyfikować.

Wywołania funkcji mogą pomóc w pokonywaniu 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 zaimplementować ustawienie wywołania funkcji podobne 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 z niej korzystać w razie potrzeby.

  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.

Wyobraź sobie, że masz aplikację, w której użytkownik może wpisać taki komunikat: What was the weather in Boston on October 17, 2024?.

Modele Gemini mogą nie znać tych informacji o pogodzie. Wyobraź sobie jednak, że znasz zewnętrzny interfejs API usługi pogodowej, który może je dostarczyć. Możesz użyć wywołania funkcji, aby umożliwić modelowi Gemini dostęp do tego interfejsu API i jego informacji o pogodzie.

Najpierw w aplikacji piszesz funkcję fetchWeather, która współpracuje z tym hipotetycznym zewnętrznym interfejsem API i 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 Prawdopodobieństwo opadów (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 oraz jak można jej użyć do przetwarzania przychodzących żądań (jeśli to konieczne). 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 uzna, ż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 wykonałeś/wykonałaś te czynności:

  1. Skonfiguruj nowy lub istniejący projekt Firebase, w tym użyj 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 dla rzeczywistego wywołania funkcji. Aby dowiedzieć się, jak model może wybierać funkcje i jak możesz kontrolować ten wybór, przeczytaj dodatkowe informacje i opcje dalej na tej stronie.

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ąć. Pamiętaj, że jest to przeciwieństwo domyślnego zachowania funkcji Vertex AI Gemini API.

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

Oto jak napisać 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 zalecamy używanie wywoływania funkcji za pomocą interfejsu czatu wieloetapowego.

Ten fragment kodu pokazuje, jak aplikacja jest informowana, że model chce użyć funkcji fetchWeather. Pokazuje też, że model dostarczył niezbędne wartości parametrów wejściowych do wywołania funkcji (i powiązanego z nim 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 prompta model wywnioskował parametry wejściowe wymagane przez funkcję fetchWeather (czyli city, statedate).

Krok 5. Przekaż wyjście funkcji do modelu, aby wygenerować ostateczną odpowiedź

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

Następnie model przeprowadza ostateczne 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 kodze, 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 równoległym wywoływaniem funkcji.

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ć, czy i w jaki sposób model może prosić o wywołanie funkcji.

Możesz określić, czy i w jaki sposób model ma 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 swoich wrażeniach z korzystania z usługi Vertex AI in Firebase