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:
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.
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.
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:
Skonfiguruj nowy lub istniejący projekt Firebase, w tym używając 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ć 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
- 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
- Poznaj 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żyj 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 tym, jak oceniasz korzystanie z usługi Vertex AI in Firebase