W tym samouczku pokazujemy, jak uzyskać dostęp do interfejsu Gemini API bezpośrednio z Aplikacja na Androida korzystająca z pakietu SDK klienta AI od Google na Androida. Możesz użyć tej SDK klienta, jeśli nie chcesz współpracować bezpośrednio z interfejsami API typu REST lub kodem po stronie serwera (np. Pythona) za dostęp do modeli Gemini w aplikacji na Androida.
Z tego samouczka dowiesz się, jak:
- Konfigurowanie projektu, w tym klucza interfejsu API
- Generowanie tekstu na podstawie samego tekstu
- Generowanie tekstu na podstawie danych wejściowych z tekstem i obrazem (multimodalne)
- Tworzenie rozmów wieloetapowych (czat)
- Jak korzystać ze strumieniowania, aby przyspieszyć interakcje
Ponadto w tym samouczku znajdują się sekcje dotyczące zaawansowanych przypadków użycia (takich jak tokeny liczenia) oraz opcje kontrolowania generowania treści.
Rozważ uzyskanie dostępu do Gemini na urządzeniu
Pakiet SDK klienta na Androida opisany w tym samouczku umożliwia dostęp do Modele Gemini Pro, które działają na serwerach Google. W przypadkach, w których przetwarzania danych wrażliwych, dostępności w trybie offline lub w celu obniżenia kosztów często używane schematy działań, może warto rozważyć skorzystanie z Gemini Nano który działa na urządzeniu. Aby dowiedzieć się więcej, zapoznaj się z Samouczek Androida (na urządzeniu).
Wymagania wstępne
W tym samouczku zakładamy, że wiesz już, jak używać Android Studio, tworzyć aplikacje na Androida.
Aby ukończyć ten samouczek, upewnij się, że Twoje środowisko programistyczne Aplikacja na Androida spełnia te wymagania:
- Android Studio (najnowsza wersja)
- Aplikacja na Androida musi być kierowana na interfejs API na poziomie 21 lub wyższym.
Konfigurowanie projektu
Zanim wywołasz Gemini API, musisz skonfigurować projekt na Androida, który obejmuje skonfigurowanie klucza interfejsu API, dodanie zależności SDK w Androidzie i zainicjowanie modelu.
Konfigurowanie klucza interfejsu API
Aby korzystać z Gemini API, potrzebujesz klucza interfejsu API. Jeśli jeszcze nie masz konta Google, utworzyć klucz w Google AI Studio.
Uzyskiwanie klucza interfejsu API
Zabezpiecz klucz interfejsu API
Zdecydowanie zalecamy, aby nie sprawdzać klucza interfejsu API w wersji
systemu sterowania. Przechowuj je w pliku local.properties
(który znajduje się w katalogu głównym projektu, ale jest wykluczony z wersji
), a następnie użyj
Wtyczka Gradle obiektów tajnych na Androida
odczytuje klucz interfejsu API jako zmienną konfiguracji kompilacji.
Kotlin
// Access your API key as a Build Configuration variable
val apiKey = BuildConfig.apiKey
Java
// Access your API key as a Build Configuration variable
String apiKey = BuildConfig.apiKey;
Wszystkie fragmenty kodu w tym samouczku korzystają z tej sprawdzonej metody. Ponadto, jeśli
Jeśli chcesz zobaczyć implementację wtyczki Gradle obiektów tajnych, możesz przejrzeć
przykładowa aplikacja
dla tego pakietu SDK lub użyj najnowszej wersji testowej Androida Studio Iguana, która ma
Szablon Gemini API Starter
(wraz z local.properties
plikiem na początek).
Dodaj zależność pakietu SDK do projektu
W pliku konfiguracji Gradle modułu (na poziomie aplikacji) (np.
<project>/<app-module>/build.gradle.kts
), dodaj zależność dla parametru Pakiet SDK AI od Google na Androida:Kotlin
dependencies { // ... other androidx dependencies // add the dependency for the Google AI client SDK for Android implementation("com.google.ai.client.generativeai:generativeai:0.9.0") }
Java
W przypadku języka Java musisz dodać 2 dodatkowe biblioteki.
dependencies { // ... other androidx dependencies // add the dependency for the Google AI client SDK for Android implementation("com.google.ai.client.generativeai:generativeai:0.9.0") // Required for one-shot operations (to use `ListenableFuture` from Guava Android) implementation("com.google.guava:guava:31.0.1-android") // Required for streaming operations (to use `Publisher` from Reactive Streams) implementation("org.reactivestreams:reactive-streams:1.0.4") }
Zsynchronizuj swój projekt na Androida z plikami Gradle.
Zainicjuj model generatywny
Zanim będzie można wykonywać wywołania interfejsu API, musisz zainicjować model generatywny:
Kotlin
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with most use cases
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
apiKey = BuildConfig.apiKey
)
Java
W przypadku Javy musisz również zainicjować obiekt GenerativeModelFutures
.
// Use a model that's applicable for your use case
// The Gemini 1.5 models are versatile and work with most use cases
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
/* apiKey */ BuildConfig.apiKey);
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Podczas określania modelu pamiętaj o tych kwestiach:
Użyj modelu dopasowanego do Twojego przypadku użycia (np.
gemini-1.5-flash
służy do wprowadzania danych multimodalnych). Instrukcje w tym przewodniku dla poszczególnych elementów dla każdego z nich z listą zalecanych modeli.
Wdrażanie typowych przypadków użycia
Po skonfigurowaniu projektu możesz zacząć korzystać z Gemini API, aby: implementuj różne przypadki użycia:
- Generowanie tekstu na podstawie samego tekstu
- Generowanie tekstu na podstawie danych wejściowych z tekstem i obrazem (multimodalne)
- Tworzenie rozmów wieloetapowych (czat)
- Jak korzystać ze strumieniowania, aby przyspieszyć interakcje
Generuj tekst na podstawie samego tekstu
Jeśli prompt zawiera tylko tekst, użyj modelu Gemini 1.5 lub
Model Gemini 1.0 Pro z funkcją generateContent
do generowania tekstu:
Kotlin
Pamiętaj, że generateContent()
to funkcja zawieszenia i musi być
wywołano z zakresu Coroutine. Jeśli nie znasz jeszcze Coroutines, przeczytaj
Kotlin Coroutines na Androidzie.
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
apiKey = BuildConfig.apiKey
)
val prompt = "Write a story about a magic backpack."
val response = generativeModel.generateContent(prompt)
print(response.text)
Java
Pamiętaj, że generateContent()
zwraca wartość ListenableFuture
. Jeśli
jeśli nie znasz tego interfejsu API, zapoznaj się z dokumentacją Androida na temat
Korzystanie z ListenableFuture
.
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
/* apiKey */ BuildConfig.apiKey);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Content content = new Content.Builder()
.addText("Write a story about a magic backpack.")
.build();
Executor executor = // ...
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Generuj tekst na podstawie danych wejściowych z tekstem i obrazem (multimodalny)
Gemini udostępnia różne modele, które obsługują dane wejściowe multimodalne (modele Gemini 1.5), dzięki czemu możesz wpisywać zarówno tekst, jak i obrazy. Upewnij się, że: zapoznaj się z wymaganiami dotyczącymi obrazów w promptach.
Jeśli prompt zawiera zarówno tekst, jak i obrazy, użyj modelu Gemini 1.5 z
generateContent
, aby wygenerować tekstowe dane wyjściowe:
Kotlin
Pamiętaj, że generateContent()
to funkcja zawieszenia i musi być
wywołano z zakresu Coroutine. Jeśli nie znasz jeszcze Coroutines, przeczytaj
Kotlin Coroutines na Androidzie.
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
apiKey = BuildConfig.apiKey
)
val image1: Bitmap = // ...
val image2: Bitmap = // ...
val inputContent = content {
image(image1)
image(image2)
text("What's different between these pictures?")
}
val response = generativeModel.generateContent(inputContent)
print(response.text)
Java
Pamiętaj, że generateContent()
zwraca wartość ListenableFuture
. Jeśli
jeśli nie znasz tego interfejsu API, zapoznaj się z dokumentacją Androida na temat
Korzystanie z ListenableFuture
.
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
/* apiKey */ BuildConfig.apiKey);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Bitmap image1 = // ...
Bitmap image2 = // ...
Content content = new Content.Builder()
.addText("What's different between these pictures?")
.addImage(image1)
.addImage(image2)
.build();
Executor executor = // ...
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Tworzenie rozmów wieloetapowych (czat)
Za pomocą Gemini możesz prowadzić swobodne rozmowy na różnych etapach.
Pakiet SDK upraszcza ten proces, zarządzając stanem rozmowy, dlatego w przeciwieństwie do
dzięki generateContent
nie musisz zapisywać historii rozmów
siebie.
Aby utworzyć rozmowę wieloetapową (np. czat), użyj modelu Gemini 1.5 lub
Gemini 1.0 Pro i zainicjuj czat, dzwoniąc pod numer startChat()
.
Następnie użyj sendMessage()
, aby wysłać nową wiadomość dla użytkownika, która będzie też dołączać tag
wiadomości oraz odpowiedź na nie.
Istnieją 2 opcje dla elementu role
związane z treścią w
rozmowa:
user
: rola, która dostarcza prompty. Jest to wartość domyślna dla opcjisendMessage
połączeń.model
: rola, która dostarcza odpowiedzi. Tej roli można używać, gdy Dzwonię pod numerstartChat()
w istniejącej siecihistory
.
Kotlin
Pamiętaj, że generateContent()
to funkcja zawieszenia i musi być
wywołano z zakresu Coroutine. Jeśli nie znasz jeszcze Coroutines, przeczytaj
Kotlin Coroutines na Androidzie.
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
apiKey = BuildConfig.apiKey
)
val chat = generativeModel.startChat(
history = listOf(
content(role = "user") { text("Hello, I have 2 dogs in my house.") },
content(role = "model") { text("Great to meet you. What would you like to know?") }
)
)
chat.sendMessage("How many paws are in my house?")
Java
Pamiętaj, że generateContent()
zwraca wartość ListenableFuture
. Jeśli
jeśli nie znasz tego interfejsu API, zapoznaj się z dokumentacją Androida na temat
Korzystanie z ListenableFuture
.
// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
/* apiKey */ BuildConfig.apiKey);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
// (optional) Create previous chat history for context
Content.Builder userContentBuilder = new Content.Builder();
userContentBuilder.setRole("user");
userContentBuilder.addText("Hello, I have 2 dogs in my house.");
Content userContent = userContentBuilder.build();
Content.Builder modelContentBuilder = new Content.Builder();
modelContentBuilder.setRole("model");
modelContentBuilder.addText("Great to meet you. What would you like to know?");
Content modelContent = userContentBuilder.build();
List<Content> history = Arrays.asList(userContent, modelContent);
// Initialize the chat
ChatFutures chat = model.startChat(history);
// Create a new user message
Content.Builder userMessageBuilder = new Content.Builder();
userMessageBuilder.setRole("user");
userMessageBuilder.addText("How many paws are in my house?");
Content userMessage = userMessageBuilder.build();
Executor executor = // ...
// Send the message
ListenableFuture<GenerateContentResponse> response = chat.sendMessage(userMessage);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Używaj strumieniowania, aby przyspieszyć interakcje
Domyślnie model zwraca odpowiedź po zakończeniu całego generowania proces tworzenia konta. Możesz przyspieszyć interakcje, nie czekając do końca i używać strumieniowania do obsługi wyników częściowych.
Poniższy przykład pokazuje, jak wdrożyć strumieniowanie za pomocą
generateContentStream
, aby wygenerować tekst na podstawie promptu wpisywania tekstu i obrazu.
Kotlin
Pamiętaj, że generateContentStream()
to funkcja zawieszenia i musi być
wywołano z zakresu Coroutine. Jeśli nie znasz jeszcze Coroutines, przeczytaj
Kotlin Coroutines na Androidzie.
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
apiKey = BuildConfig.apiKey
)
val image1: Bitmap = // ...
val image2: Bitmap = // ...
val inputContent = content {
image(image1)
image(image2)
text("What's the difference between these pictures?")
}
var fullResponse = ""
generativeModel.generateContentStream(inputContent).collect { chunk ->
print(chunk.text)
fullResponse += chunk.text
}
Java
Metody strumieniowego przesyłania danych w języku Java w tym pakiecie SDK zwracają typ Publisher
z strumień reaktywnych
bibliotece.
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-1.5-flash",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
/* apiKey */ BuildConfig.apiKey);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Bitmap image1 = // ...
Bitmap image2 = // ...
Content content = new Content.Builder()
.addText("What's different between these pictures?")
.addImage(image1)
.addImage(image2)
.build();
Publisher<GenerateContentResponse> streamingResponse =
model.generateContentStream(content);
StringBuilder outputContent = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onNext(GenerateContentResponse generateContentResponse) {
String chunk = generateContentResponse.getText();
outputContent.append(chunk);
}
@Override
public void onComplete() {
System.out.println(outputContent);
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
});
Podobną metodę możesz zastosować w przypadkach użycia samego tekstu i czatu:
Kotlin
Pamiętaj, że generateContentStream()
to funkcja zawieszenia i musi być
wywołano z zakresu Coroutine. Jeśli nie znasz jeszcze Coroutines, przeczytaj
Kotlin Coroutines na Androidzie.
// Use streaming with text-only input
generativeModel.generateContentStream(inputContent).collect { chunk ->
print(chunk.text)
}
// Use streaming with multi-turn conversations (like chat)
val chat = generativeModel.startChat()
chat.sendMessageStream(inputContent).collect { chunk ->
print(chunk.text)
}
Java
Metody strumieniowego przesyłania danych w języku Java w tym pakiecie SDK zwracają typ Publisher
z strumień reaktywnych
bibliotece.
// Use streaming with text-only input
Publisher<GenerateContentResponse> streamingResponse =
model.generateContentStream(inputContent);
StringBuilder outputContent = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onNext(GenerateContentResponse generateContentResponse) {
String chunk = generateContentResponse.getText();
outputContent.append(chunk);
}
@Override
public void onComplete() {
System.out.println(outputContent);
}
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
// ... other methods omitted for brevity
});
// Use streaming with multi-turn conversations (like chat)
ChatFutures chat = model.startChat(history);
Publisher<GenerateContentResponse> streamingResponse =
chat.sendMessageStream(inputContent);
StringBuilder outputContent = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onNext(GenerateContentResponse generateContentResponse) {
String chunk = generateContentResponse.getText();
outputContent.append(chunk);
}
@Override
public void onComplete() {
System.out.println(outputContent);
}
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
// ... other methods omitted for brevity
});
Wdrażanie zaawansowanych przypadków użycia
Typowe przypadki użycia opisane w poprzedniej sekcji tego samouczka są pomocne znasz już interfejs Gemini API. W tej sekcji opisano niektóre przypadków użycia, które można uznać za bardziej zaawansowane.
Wywoływanie funkcji
Wywołanie funkcji ułatwia pobieranie danych wyjściowych z uporządkowanych danych modeli generatywnych. Następnie możesz użyć tych danych wyjściowych do wywołania innych interfejsów API i zwrócenia odpowiednich danych odpowiedzi dla modelu. Innymi słowy, wywołanie funkcji pomaga Łączysz modele generatywne z systemami zewnętrznymi, aby wygenerowane treści zawiera najbardziej aktualne i dokładne informacje. Więcej informacji: samouczek wywoływania funkcji.
Policz tokeny
Jeśli używasz długich promptów, warto policzyć tokeny przed wysłaniem
do modelu. Poniższe przykłady pokazują, jak używać atrybutu countTokens()
do różnych celów:
Kotlin
Pamiętaj, że countTokens()
to funkcja zawieszenia i musi być
wywołano z zakresu Coroutine. Jeśli nie znasz jeszcze Coroutines, przeczytaj
Kotlin Coroutines na Androidzie.
// For text-only input
val (totalTokens) = generativeModel.countTokens("Write a story about a magic backpack.")
// For text-and-image input (multi-modal)
val multiModalContent = content {
image(image1)
image(image2)
text("What's the difference between these pictures?")
}
val (totalTokens) = generativeModel.countTokens(multiModalContent)
// For multi-turn conversations (like chat)
val history = chat.history
val messageContent = content { text("This is the message I intend to send")}
val (totalTokens) = generativeModel.countTokens(*history.toTypedArray(), messageContent)
Java
Pamiętaj, że countTokens()
zwraca wartość ListenableFuture
. Jeśli
jeśli nie znasz tego interfejsu API, zapoznaj się z dokumentacją Androida na temat
Korzystanie z ListenableFuture
.
Content text = new Content.Builder()
.addText("Write a story about a magic backpack.")
.build();
Executor executor = // ...
// For text-only input
ListenableFuture<CountTokensResponse> countTokensResponse = model.countTokens(text);
Futures.addCallback(countTokensResponse, new FutureCallback<CountTokensResponse>() {
@Override
public void onSuccess(CountTokensResponse result) {
int totalTokens = result.getTotalTokens();
System.out.println("TotalTokens = " + totalTokens);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
// For text-and-image input
Bitmap image1 = // ...
Bitmap image2 = // ...
Content multiModalContent = new Content.Builder()
.addImage(image1)
.addImage(image2)
.addText("What's different between these pictures?")
.build();
ListenableFuture<CountTokensResponse> countTokensResponse = model.countTokens(multiModalContent);
// For multi-turn conversations (like chat)
List<Content> history = chat.getChat().getHistory();
Content messageContent = new Content.Builder()
.addText("This is the message I intend to send")
.build();
Collections.addAll(history, messageContent);
ListenableFuture<CountTokensResponse> countTokensResponse = model.countTokens(history.toArray(new Content[0]));
Opcje kontrolowania generowania treści
Generowanie treści możesz kontrolować, konfigurując parametry modelu i za pomocą funkcji ustawieniach bezpieczeństwa.
Skonfiguruj parametry modelu
Każdy prompt wysyłany do modelu zawiera wartości parametrów, które określają, model wygeneruje odpowiedź. Model może generować różne wyniki dla: różne wartości parametrów. Więcej informacji o Parametry modelu.
Kotlin
val config = generationConfig {
temperature = 0.9f
topK = 16
topP = 0.1f
maxOutputTokens = 200
stopSequences = listOf("red")
}
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with most use cases
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey,
generationConfig = config
)
Java
GenerationConfig.Builder configBuilder = new GenerationConfig.Builder();
configBuilder.temperature = 0.9f;
configBuilder.topK = 16;
configBuilder.topP = 0.1f;
configBuilder.maxOutputTokens = 200;
configBuilder.stopSequences = Arrays.asList("red");
GenerationConfig generationConfig = configBuilder.build();
// The Gemini 1.5 models are versatile and work with most use cases
GenerativeModel gm = new GenerativeModel(
"gemini-1.5-flash",
BuildConfig.apiKey,
generationConfig
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Korzystanie z ustawień bezpieczeństwa
W ustawieniach bezpieczeństwa możesz dostosować prawdopodobieństwo otrzymania odpowiedzi, mogą zostać uznane za szkodliwe. Domyślnie ustawienia bezpieczeństwa blokują treści zawierające medium lub wysokie prawdopodobieństwo, że treści te mogą być niebezpieczne we wszystkich wymiarach. Ucz się Dowiedz się więcej o Ustawieniach bezpieczeństwa.
Aby skonfigurować jedno ustawienie bezpieczeństwa:
Kotlin
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with most use cases
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey,
safetySettings = listOf(
SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.ONLY_HIGH)
)
)
Java
SafetySetting harassmentSafety = new SafetySetting(HarmCategory.HARASSMENT,
BlockThreshold.ONLY_HIGH);
// The Gemini 1.5 models are versatile and work with most use cases
GenerativeModel gm = new GenerativeModel(
"gemini-1.5-flash",
BuildConfig.apiKey,
null, // generation config is optional
Collections.singletonList(harassmentSafety)
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Możesz też skonfigurować więcej niż jedno ustawienie bezpieczeństwa:
Kotlin
val harassmentSafety = SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.ONLY_HIGH)
val hateSpeechSafety = SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE)
val generativeModel = GenerativeModel(
// The Gemini 1.5 models are versatile and work with most use cases
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey,
safetySettings = listOf(harassmentSafety, hateSpeechSafety)
)
Java
SafetySetting harassmentSafety = new SafetySetting(HarmCategory.HARASSMENT,
BlockThreshold.ONLY_HIGH);
SafetySetting hateSpeechSafety = new SafetySetting(HarmCategory.HATE_SPEECH,
BlockThreshold.MEDIUM_AND_ABOVE);
// The Gemini 1.5 models are versatile and work with most use cases
GenerativeModel gm = new GenerativeModel(
"gemini-1.5-flash",
BuildConfig.apiKey,
null, // generation config is optional
Arrays.asList(harassmentSafety, hateSpeechSafety)
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Co dalej?
Projektowanie promptów to proces tworzenia promptów, które wywołują oczekiwane działanie odpowiedzi modelowych. Tworzenie dobrze ustrukturyzowanych promptów to podstawa jest częścią zapewniania dokładnych i wysokiej jakości odpowiedzi z modelu językowego. Poznaj sprawdzone metody pisania promptów.
Gemini oferuje kilka wersji modelu, które można dopasować do różnych zastosowań takie jak typy danych wejściowych i złożoność, wdrożenia czatu zadania związane z językiem okien dialogowych i ograniczeniami rozmiaru. Dowiedz się więcej o dostępnych modelach Gemini.
Pakiet SDK klienta na Androida opisany w tym samouczku umożliwia dostęp do Modele Gemini Pro, które działają na serwerach Google. W przypadkach, w których przetwarzania danych wrażliwych, dostępności w trybie offline lub w celu obniżenia kosztów często używane schematy działań, może warto rozważyć skorzystanie z Gemini Nano który działa na urządzeniu. Aby dowiedzieć się więcej, zapoznaj się z Samouczek Androida (na urządzeniu).