Bu eğiticide, Dart veya Google AI Dart SDK'sı kullanan Flutter uygulaması. Şu durumlarda bu SDK'yı kullanabilirsiniz: Gemini modellerine erişmek için doğrudan REST API'lerle çalışmak istemiyorsanız uygulamasını indirin.
Bu eğitimde aşağıdakileri nasıl yapacağınızı öğreneceksiniz:
- API anahtarınız dahil projenizi ayarlama
- Yalnızca metin girişinden metin oluşturma
- Metin ve resim girişlerinden metin oluşturma (çok modlu)
- Farklı noktaları içeren görüşmeler (sohbet) oluşturma
- Daha hızlı etkileşimler için akışı kullanma
Ek olarak, bu eğitimde gelişmiş kullanım alanlarıyla ilgili bölümler (ör. embeddings ve sayma jetonları) ve içerik oluşturmayı kontrol etme.
Ön koşullar
Bu eğiticide Dart ile uygulama oluşturma konusunda bilgi sahibi olduğunuz varsayılır.
Bu eğiticiyi tamamlamak için geliştirme ortamınızın gereksinimleri karşıladığından emin olun şu koşulları karşılamanız gerekir:
- Dart 3.2.0+
Projenizi oluşturun
Gemini API'yi çağırmadan önce, aşağıdakileri içeren projenizi ayarlamanız gerekir: API anahtarınızı oluşturma, SDK'yı yayıncı bağımlılıklarınıza ekleme ve modeli başlatıyor.
API anahtarınızı oluşturma
Gemini API'yi kullanmak için API anahtarına ihtiyacınız vardır. Henüz bir hesabınız yoksa Google AI Studio'da bir anahtar oluşturun.
API anahtarınızın güvenliğini sağlayın
API anahtarınızı güvende tutun. Şunu aramamanızı kesinlikle öneririz: API anahtarını doğrudan kodunuza ekleyin veya anahtarı içeren dosyaları kontrol sistemleri. Bunun yerine, API anahtarınız için bir gizli anahtar deposu kullanmanız gerekir.
Bu eğitimdeki tüm snippet'ler, API anahtarınıza
olması gerekir. Bir Flutter uygulaması geliştiriyorsanız
String.fromEnvironment
ve --dart-define=API_KEY=$API_KEY
geçen yeri:
İşlemden itibaren API anahtarıyla derlemek için flutter build
veya flutter run
ortamın farklı olması gerekir.
SDK paketini yükleyin
Gemini API'yi kendi uygulamanızda kullanmak için add
Dart veya Flutter uygulamanıza google_generative_ai
paketi ekleyin:
Dart
dart pub add google_generative_ai
Flutter
flutter pub add google_generative_ai
Üretken modeli başlatma
API çağrısı yapabilmeniz için önce üretken modelimizdir.
import 'dart:io';
import 'package:google_generative_ai/google_generative_ai.dart';
void main() async {
// Access your API key as an environment variable (see "Set up your API key" above)
final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}
// The Gemini 1.5 models are versatile and work with most use cases
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
}
Bir model belirtirken aşağıdakilere dikkat edin:
Kullanım alanınıza özel bir model kullanın (örneğin,
gemini-1.5-flash
çok modlu giriş içindir). Bu kılavuzda, her bir her kullanım alanı için önerilen modelleri listeleyin.
Yaygın kullanım alanlarını hayata geçirin
Artık projeniz hazır olduğuna göre Gemini API'yi kullanarak farklı kullanım alanları vardır:
- Yalnızca metin girişinden metin oluşturma
- Metin ve resim girişlerinden metin oluşturma (çok modlu)
- Farklı noktaları içeren görüşmeler (sohbet) oluşturma
- Daha hızlı etkileşimler için akışı kullanma
Gelişmiş kullanım alanları bölümünde, Gemini API hakkında bilgi edinebilirsiniz. ve yerleştirmeler.
Yalnızca metin girişinden metin oluştur
İstem girişi yalnızca metin içeriyorsa Gemini 1.5 modelini veya
Metin çıkışı oluşturmak için generateContent
kullanan Gemini 1.0 Pro modeli:
import 'dart:io';
import 'package:google_generative_ai/google_generative_ai.dart';
void main() async {
// Access your API key as an environment variable (see "Set up your API key" above)
final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final content = [Content.text('Write a story about a magic backpack.')];
final response = await model.generateContent(content);
print(response.text);
}
Metin ve resim girişlerinden metin oluşturma (çok modlu)
Gemini, çok modlu girişleri işleyebilecek çeşitli modeller sunar. (Gemini 1.5 modelleri) kullanarak her iki metni de girebilirsiniz ve görseller. Şurayı incelemeyi unutmayın: istemler için resim gereksinimleri.
İstem girişi hem metin hem de resim içeriyorsa Gemini 1.5 modelini kullanın
metin çıkışı oluşturmak için generateContent
yöntemini kullanın:
import 'dart:io';
import 'package:google_generative_ai/google_generative_ai.dart';
void main() async {
// Access your API key as an environment variable (see "Set up your API key" above)
final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final (firstImage, secondImage) = await (
File('image0.jpg').readAsBytes(),
File('image1.jpg').readAsBytes()
).wait;
final prompt = TextPart("What's different between these pictures?");
final imageParts = [
DataPart('image/jpeg', firstImage),
DataPart('image/jpeg', secondImage),
];
final response = await model.generateContent([
Content.multi([prompt, ...imageParts])
]);
print(response.text);
}
Çok dönüşlü görüşmeler (sohbet) oluşturun
Gemini'ı kullanarak birden fazla turne arasında serbest biçimli sohbetler gerçekleştirebilirsiniz. İlgili içeriği oluşturmak için kullanılan
SDK, konuşmanın durumunu yöneterek süreci basitleştirir. Yani,
generateContent
ile görüşme geçmişini saklamanız gerekmez
kendiniz.
Sohbet gibi çok yönlü bir sohbet başlatmak için Gemini 1.5 modelini veya
Gemini 1.0 Pro modelini deneyin ve startChat()
numaralı telefonu arayarak sohbeti başlatın.
Ardından, yeni bir kullanıcı mesajı göndermek için sendMessage()
öğesini kullanın. Bu mesaj
mesajı ve sohbet geçmişindeki yanıtı gösterir.
Birrole
sohbet:
user
: İstemleri sağlayan roldür. Bu değer,sendMessage
çağrısında bulunur ve farklı bir rolü başarıyla geçirildi.model
: yanıtları sağlayan rol. Bu rol, şu durumlarda kullanılabilir: Mevcuthistory
ilestartChat()
aranıyor.
import 'dart:io';
import 'package:google_generative_ai/google_generative_ai.dart';
Future<void> main() async {
// Access your API key as an environment variable (see "Set up your API key" above)
final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}
// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
final model = GenerativeModel(
model: 'gemini-1.5-flash',
apiKey: apiKey,
generationConfig: GenerationConfig(maxOutputTokens: 100));
// Initialize the chat
final chat = model.startChat(history: [
Content.text('Hello, I have 2 dogs in my house.'),
Content.model([TextPart('Great to meet you. What would you like to know?')])
]);
var content = Content.text('How many paws are in my house?');
var response = await chat.sendMessage(content);
print(response.text);
}
Daha hızlı etkileşimler için akışı kullanın
Varsayılan olarak model, oluşturma işleminin tamamını tamamladıktan sonra bir yanıt döndürür. bahsedeceğim. Tüm sürecin tamamını beklemeden, daha hızlı işlevi görür ve bunun yerine kısmi sonuçları işlemek için akış kullanılır.
Aşağıdaki örnekte,
Metin ve resim girişinden metin oluşturmak için generateContentStream
yöntemi
tıklayın.
// ...
final response = model.generateContentStream([
Content.multi([prompt, ...imageParts])
]);
await for (final chunk in response) {
print(chunk.text);
}
// ...
Yalnızca metin girişi ve sohbet kullanım alanları için de benzer bir yaklaşım kullanabilirsiniz.
// Use streaming with text-only input
final response = model.generateContentStream(content);
// Use streaming with multi-turn conversations (like chat)
final response = chat.sendMessageStream(content);
Gelişmiş kullanım alanları uygulayın
Bu eğiticinin önceki bölümünde açıklanan yaygın kullanım alanları, rahatlıkla kullanabilirsiniz. Bu bölümde, yaygın olarak kullanılan alanlardır.
İşlev çağırma
İşlev çağrısı, üretken modeller. Ardından bu çıkışları kullanarak diğer API'leri çağırabilir ve yanıt verilerini modele uygun hale getirmemize yardımcı olur. Başka bir deyişle, işlev çağrısı üretken modelleri harici sistemlere bağlarsınız. Böylece, en güncel ve doğru bilgileri içerir. Daha fazla bilgi: işlev çağrısı eğiticisi.
Yerleştirmeleri kullanma
Yerleştirme, bilgileri temsil etmek için kullanılan bir tekniktir bir dizideki kayan nokta sayısının listesi olarak gösterir. Gemini ile kendinizi Vektörelleştirilmiş biçimdeki metin (kelimeler, cümleler ve metin blokları) ve ayırt etmek için daha kolay bir yöntem sunabilir. Örneğin, aynı bilgileri paylaşan iki benzer konuların veya duyguların benzer yerleştirmelere sahip olması gerekir. kosinüs benzerliği gibi matematiksel karşılaştırma teknikleriyle belirlenir.
embedding-001
modelini embedContent
yöntemiyle kullanın (veya
batchEmbedContent
yöntemi). Aşağıdaki örnek
tek bir dize için bir yerleştirme oluşturur:
final model = GenerativeModel(model: 'embedding-001', apiKey: apiKey);
final content = Content.text('The quick brown fox jumps over the lazy dog.');
final result = await model.embedContent(content);
print(result.embedding.values);
Jetonları say
Uzun istemler kullanırken jetonları göndermeden önce jetonları saymak faydalı olabilir.
olabileceğini unutmayın. Aşağıdaki örneklerde countTokens()
özelliğinin nasıl kullanılacağı gösterilmektedir
örnek olarak verelim:
// For text-only input
final tokenCount = await model.countTokens(Content.text(prompt));
print('Token count: ${tokenCount.totalTokens}');
// For text-and-image input (multimodal)
final tokenCount = await model.countTokens([
Content.multi([prompt, ...imageParts])
]);
print('Token count: ${tokenCount.totalTokens}');
// For multi-turn conversations (like chat)
final prompt = Content.text(message);
final allContent = [...chat.history, prompt];
final tokenCount = await model.countTokens(allContent);
print('Token count: ${tokenCount.totalTokens}');
İçerik oluşturmayı kontrol etme seçenekleri
İçerik oluşturma sürecini, model parametrelerini yapılandırarak ve aşağıdakileri kullanarak kontrol edebilirsiniz. güvenlik ayarlarına gidin.
Bir model isteğine generationConfig
veya safetySettings
iletilmenin gerektiğini unutmayın
yöntemi (generateContent
gibi), yapılandırma nesnesini tamamen geçersiz kılar
getGenerativeModel
içinde geçen aynı adla.
Model parametrelerini yapılandırma
Modele gönderdiğiniz her istem, model bir yanıt oluşturur. Model, arama sonuçları sayfası için farklı parametre değerleri. Daha fazla bilgi: Model parametreleri. Yapılandırma, model örneğinizin kullanım ömrü boyunca korunur.
final generationConfig = GenerationConfig(
stopSequences: ["red"],
maxOutputTokens: 200,
temperature: 0.9,
topP: 0.1,
topK: 16,
);
final model = GenerativeModel(
// The Gemini 1.5 models are versatile and work with most use cases
model: 'gemini-1.5-flash',
apiKey: apiKey,
generationConfig: generationConfig,
);
Güvenlik ayarlarını kullan
Böyle yanıtlar alma olasılığını ayarlamak için güvenlik ayarlarını kullanabilirsiniz: zararlı olarak kabul edilebilir. Varsayılan olarak güvenlik ayarları, orta uzunluktaki içerikleri engeller ve/veya tüm boyutlarda güvenli olmayan içerik olma ihtimalinin yüksek olması. Öğren Güvenlik ayarları hakkında daha fazla bilgi edinin.
Aşağıda, bir güvenlik ayarını nasıl yapacağınız açıklanmaktadır:
final safetySettings = [
SafetySetting(HarmCategory.harassment, HarmBlockThreshold.high)
];
final model = GenerativeModel(
// The Gemini 1.5 models are versatile and work with most use cases
model: 'gemini-1.5-flash',
apiKey: apiKey,
safetySettings: safetySettings,
);
Ayrıca, birden fazla güvenlik ayarı da belirleyebilirsiniz:
final safetySettings = [
SafetySetting(HarmCategory.harassment, HarmBlockThreshold.high),
SafetySetting(HarmCategory.hateSpeech, HarmBlockThreshold.high),
];
Sırada ne var?
İstem tasarımı, istenen sonuca ulaştıran istemler oluşturma sürecidir. temel yanıtları oluşturuyor. İyi yapılandırılmış istemler yazmak, dil modelinden doğru ve yüksek kaliteli yanıtlar vermenin bir parçasıdır. İstem yazmayla ilgili en iyi uygulamalar hakkında bilgi edinin.
Gemini, farklı kullanım ihtiyaçlarını karşılamak için çeşitli model varyasyonları sunar. (ör. giriş türleri ve karmaşıklık, sohbet ya da diğer iletişim ve boyut kısıtlamalarına sahip olabilirsiniz. Mevcut Gemini modelleri hakkında bilgi edinin.