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:
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).
Utwórz deklarację funkcji, która opisuje funkcję i jej parametry.
Podaj deklarację funkcji podczas inicjalizacji modelu, aby model wiedział, jak w razie potrzeby z niej korzystać.
Skonfiguruj aplikację tak, aby model mógł przesłać wymagane informacje, które pozwolą aplikacji wywołać funkcję.
Przekaż odpowiedź funkcji z powrotem do modelu, aby mógł wygenerować ostateczną odpowiedź.
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 udostępnić. 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ż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 mu 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.
Implementacja wywoływania funkcji
Zanim zaczniesz
Jeśli jeszcze tego nie zrobiłeś/nie zrobiłaś, zapoznaj się z przewodnikiem korzystania z pakietów SDK Vertex AI in Firebase. Najpierw wykonaj te czynności:
Skonfiguruj nowy lub istniejący projekt Firebase, w tym użyj abonamentu Blaze i włącz wymagane interfejsy API.
Połącz aplikację z Firebase, w tym zarejestruj ją i dodaj do niej konfigurację Firebase.
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ć taki komunikat:
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 korzystają z tego hipotetycznego zewnętrznego interfejsu 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 zachowania 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 związane z deklaracjami funkcji, w tym wskazówki dotyczące nazw i opisów, znajdziesz w dokumentacji Google Cloud w sekcji 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 mu 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
, state
i date
).
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 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ć, 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
- tworzyć rozmowy wieloetapowe (czat);
- generować tekst na podstawie promptów tekstowych.
- generować tekst na podstawie promptów multimodalnych (w tym tekstu, obrazów, plików PDF, filmów i plików audio);
Dowiedz się, jak kontrolować generowanie treści
- Zrozumieć projektowanie promptów, w tym sprawdzone metody, strategie i przykładowe prompty.
- Skonfiguruj parametry modelu, takie jak temperatura i maksymalna liczba tokenów wyjściowych.
- Używaj ustawień bezpieczeństwa, aby dostosować prawdopodobieństwo otrzymywania odpowiedzi, które mogą być uważane za szkodliwe.
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