Gemini API może generować dane wyjściowe w postaci tekstu, gdy jako dane wejściowe zostaną mu przekazane tekst, obrazy, filmy i dźwięk.
Z tego przewodnika dowiesz się, jak generować tekst za pomocą metod generateContent
i streamGenerateContent
. Więcej informacji o możliwościach Gemini w zakresie przetwarzania obrazu i dźwięku znajdziesz w instrukcjach dotyczących Vision i dźwięku.
Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst
Najprostszym sposobem generowania tekstu za pomocą interfejsu Gemini API jest przekazanie modelowi pojedynczego tekstu wejściowego, jak w tym przykładzie:
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[{"text": "Write a story about a magic backpack."}]
}]
}' 2> /dev/null
W tym przypadku prompt („Explain how AI works”) nie zawiera żadnych przykładów wyjścia, instrukcji systemu ani informacji o formatowaniu. Jest to podejście zero-shot. W niektórych przypadkach prompt jednokrotny lub kilkukrotny może generować wyniki lepiej dopasowane do oczekiwań użytkowników. W niektórych przypadkach warto też podać instrukcje systemu, aby pomóc modelowi zrozumieć zadanie lub przestrzegać określonych wytycznych.
Generowanie tekstu na podstawie tekstu i obrazu
Interfejs Gemini API obsługuje dane multimodalne, które łączą tekst z plikami multimedialnymi. Ten przykład pokazuje, jak wygenerować tekst na podstawie tekstu i obrazu:
# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"
# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT
cat > "$TEMP_JSON" << EOF
{
"contents": [{
"parts":[
{"text": "Tell me about this instrument"},
{
"inline_data": {
"mime_type":"image/jpeg",
"data": "$(cat "$TEMP_B64")"
}
}
]
}]
}
EOF
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d "@$TEMP_JSON" 2> /dev/null
Podobnie jak w przypadku promptów tekstowych, prompty multimodalne mogą wykorzystywać różne podejścia i ulepszenia. W zależności od wyniku uzyskanego w tym przykładzie możesz dodać do promptu instrukcje lub bardziej szczegółowo opisać czynności. Więcej informacji znajdziesz w artykule Strategie dotyczące wyświetlania promptów.
Generowanie strumienia tekstowego
Domyślnie model zwraca odpowiedź po zakończeniu całego procesu generowania tekstu. Możesz uzyskać szybsze interakcje, nie czekając na cały wynik, a zamiast tego używać przesyłania strumieniowego do obsługi wyników częściowych.
Poniższy przykład pokazuje, jak stosować strumieniowanie za pomocą metody streamGenerateContent
do generowania tekstu z promptu tekstowego.
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${GOOGLE_API_KEY}" \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'
Tworzenie interaktywnego czatu
Gemini SDK umożliwia zbieranie wielu serii pytań i odpowiedzi, dzięki czemu użytkownicy mogą stopniowo uzyskiwać odpowiedzi lub pomoc w rozwiązywaniu problemów wieloetapowych. Ta funkcja pakietu SDK udostępnia interfejs do śledzenia historii rozmów, ale w tle używa tej samej metody generateContent
do tworzenia odpowiedzi.
Ten przykładowy kod pokazuje podstawową implementację czatu:
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
Włączanie strumieniowego przesyłania czatu
Możesz też prowadzić transmisję strumieniową z czatem, jak w tym przykładzie:
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
Konfigurowanie generowania tekstu
Każdy prompt wysyłany do modelu zawiera parametry, które określają, jak model wygeneruje odpowiedzi. Aby skonfigurować te parametry, możesz użyć GenerationConfig
. Jeśli nie skonfigurujesz parametrów, model użyje opcji domyślnych, które mogą się różnić w zależności od modelu.
W tym przykładzie pokazujemy, jak skonfigurować kilka dostępnych opcji.
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "Write a story about a magic backpack."}
]
}],
"safetySettings": [
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_ONLY_HIGH"
}
],
"generationConfig": {
"stopSequences": [
"Title"
],
"temperature": 1.0,
"maxOutputTokens": 800,
"topP": 0.8,
"topK": 10
}
}' 2> /dev/null | grep "text"
stopSequences
określa zbiór sekwencji znaków (do 5), które powodują zatrzymanie generowania danych wyjściowych. Jeśli zostanie to określone, interfejs API zatrzyma się przy pierwszym wystąpieniu stop_sequence
. Sekwencja zatrzymania nie będzie częścią odpowiedzi.
temperature
określa losowość danych wyjściowych. Jeśli chcesz uzyskać więcej kreatywnych odpowiedzi, użyj wyższych wartości, a jeśli bardziej ścisłych – niższych. Wartości mogą się mieścić w zakresie [0,0, 2,0].
maxOutputTokens
określa maksymalną liczbę tokenów, które mają być uwzględnione w kandydacie.
Parametr topP
zmienia sposób, w jaki model wybiera tokeny w celu wygenerowania odpowiedzi. Tokeny są wybierane od najbardziej do najmniej prawdopodobnego do momentu, aż suma ich prawdopodobieństw będzie równa wartości topP
. Wartością domyślną parametru topP
jest 0,95.
topK
zmienia sposób, w jaki model wybiera tokeny w celu wygenerowania odpowiedzi. Wartość topK
= 1 oznacza, że wybrany token jest najbardziej prawdopodobny spośród wszystkich tokenów w słowniku modelu, natomiast wartość topK
= 3 oznacza, że następny token jest wybierany z użyciem temperatury spośród 3 najbardziej prawdopodobnych. Tokeny są następnie filtrowane na podstawie parametru topP
, a ostateczny wybór tokena dokonywany jest przy pomocy próbkowania z użyciem temperatury.
Dodawanie instrukcji systemowych
Instrukcje systemu umożliwiają kierowanie zachowaniem modelu na podstawie konkretnych potrzeb i przypadków użycia.
Podając instrukcje systemowe, dajesz modelowi dodatkowy kontekst ułatwiający zrozumienie zadania, generowanie bardziej dostosowanych odpowiedzi i stosowanie się do konkretnych wytycznych dotyczących pełnej interakcji użytkownika z modelem. Możesz też określić działanie na poziomie usługi, ustawiając instrukcje systemowe, które są odrębne od promptów wyświetlanych użytkownikom.
Instrukcje systemowe możesz ustawić podczas inicjowania modelu:
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
"parts":
{ "text": "You are a cat. Your name is Neko."}},
"contents": {
"parts": {
"text": "Hello there"}}}'
Przykład kompleksowego korzystania z instrukcji systemowych znajdziesz w instrukcjach systemowych Colab.
Co dalej?
Teraz, gdy znasz już podstawy interfejsu Gemini API, możesz spróbować:
- Interpretacja obrazu: dowiedz się, jak korzystać z natywnej interpretacji obrazu w Gemini do przetwarzania obrazów i filmów.
- Rozumienie mowy: dowiedz się, jak używać natywnej funkcji Gemini do przetwarzania plików audio.