این آموزش نحوه دسترسی به API Gemini را برای برنامه DART یا Flutter خود با استفاده از Google AI DART SDK نشان می دهد. اگر نمی خواهید مستقیماً با API های REST برای دسترسی به مدل های جمینی در برنامه خود کار کنید ، می توانید از این SDK استفاده کنید.
در این آموزش ، یاد می گیرید که چگونه موارد زیر را انجام دهید:
- پروژه خود را از جمله کلید API خود تنظیم کنید
- متن را از ورودی فقط متن ایجاد کنید
- ایجاد متن از ورودی متن و تصویر (مولتی مدال)
- ساخت مکالمات چند چرخش (گپ)
- برای تعامل سریعتر از جریان استفاده کنید
علاوه بر این ، این آموزش شامل بخش هایی در مورد موارد استفاده پیشرفته (مانند تعبیه و شمارش نشانه ) و همچنین گزینه هایی برای کنترل تولید محتوا است .
پیش نیازها
این آموزش فرض می کند که شما با برنامه های ساختمانی با DART آشنا هستید.
برای تکمیل این آموزش ، اطمینان حاصل کنید که محیط توسعه شما شرایط زیر را برآورده می کند:
- دارت 3.2.0+
پروژه خود را تنظیم کنید
قبل از تماس با API Gemini ، باید پروژه خود را تنظیم کنید ، که شامل تنظیم کلید API شما ، اضافه کردن SDK به وابستگی های میخانه خود و اولیه سازی مدل است.
کلید API خود را تنظیم کنید
برای استفاده از API Gemini ، به یک کلید API نیاز دارید. اگر قبلاً یکی از آنها را ندارید ، در استودیوی Google AI یک کلید ایجاد کنید.
کلید API خود را ایمن کنید
کلید API خود را ایمن نگه دارید. ما اکیداً توصیه می کنیم که کلید API را مستقیماً در کد خود قرار ندهید ، یا پرونده هایی را که حاوی کلید در سیستم های کنترل نسخه هستند ، بررسی کنید. در عوض ، شما باید از یک فروشگاه اسرار برای کلید API خود استفاده کنید.
تمام قطعه های موجود در این آموزش فرض می کنند که شما به عنوان یک متغیر محیط فرآیند به کلید API خود دسترسی پیدا می کنید. اگر در حال تهیه یک برنامه Flutter هستید ، می توانید از String.fromEnvironment
و عبور-- --dart-define=API_KEY=$API_KEY
برای flutter build
یا flutter run
با کلید API استفاده کنید زیرا محیط فرآیند هنگام اجرای برنامه متفاوت خواهد بود. .
بسته SDK را نصب کنید
برای استفاده از API Gemini در برنامه خود ، باید بسته google_generative_ai
را به برنامه DART یا Flutter خود add
:
دارت
dart pub add google_generative_ai
بال بال زدن
flutter pub add google_generative_ai
مدل تولیدی را اولیه کنید
قبل از اینکه بتوانید هرگونه تماس API را برقرار کنید ، باید مدل تولیدی را وارد و اولیه کنید.
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);
}
هنگام مشخص کردن یک مدل ، موارد زیر را یادداشت کنید:
از مدلی خاص برای مورد استفاده شما استفاده کنید (به عنوان مثال ،
gemini-1.5-flash
برای ورودی چندمودال است). در این راهنما ، دستورالعمل های مربوط به هر لیست اجرای مدل توصیه شده برای هر مورد استفاده.
موارد استفاده مشترک را اجرا کنید
اکنون که پروژه شما تنظیم شده است ، می توانید با استفاده از API Gemini برای اجرای موارد مختلف استفاده کنید:
- متن را از ورودی فقط متن ایجاد کنید
- ایجاد متن از ورودی متن و تصویر (مولتی مدال)
- ساخت مکالمات چند چرخش (گپ)
- برای تعامل سریعتر از جریان استفاده کنید
در بخش موارد استفاده پیشرفته ، می توانید اطلاعات مربوط به API و تعبیه Gemini را پیدا کنید.
متن را از ورودی فقط متن ایجاد کنید
هنگامی که ورودی سریع فقط متن را شامل می شود ، از یک مدل Gemini 1.5 یا مدل Gemini 1.0 Pro با generateContent
برای تولید خروجی متن استفاده کنید:
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);
}
ایجاد متن از ورودی متن و تصویر (مولتی مدال)
Gemini مدلهای مختلفی را ارائه می دهد که می توانند ورودی چندمودال (مدل های Gemini 1.5) را کنترل کنند تا بتوانید هم متن و هم تصاویر را وارد کنید. حتماً مورد نیاز تصویر را برای ارسال ها بررسی کنید.
هنگامی که ورودی سریع شامل متن و تصویر است ، از یک مدل Gemini 1.5 با روش generateContent
برای تولید خروجی متن استفاده کنید:
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);
}
ساخت مکالمات چند چرخش (گپ)
با استفاده از جمینی ، می توانید مکالمات Freeform را در چندین چرخش ایجاد کنید. SDK با مدیریت وضعیت گفتگو ، این روند را ساده می کند ، بنابراین بر خلاف generateContent
، لازم نیست خودتان تاریخ گفتگو را ذخیره کنید.
برای ایجاد یک مکالمه چند چرخش (مانند گپ) ، از یک مدل Gemini 1.5 یا مدل Gemini 1.0 Pro استفاده کنید و با فراخوانی startChat()
چت را آغاز کنید. سپس از sendMessage()
برای ارسال پیام کاربر جدید استفاده کنید ، که این پیام و پاسخ به تاریخچه گپ را نیز ضمیمه می کند.
دو گزینه ممکن برای role
مرتبط با محتوا در یک مکالمه وجود دارد:
user
: نقشی که ارائه می دهد. این مقدار پیش فرض برای تماس هایsendMessage
است و در صورت تصویب نقش متفاوت ، عملکرد استثنا خواهد شد.model
: نقشی که پاسخ ها را فراهم می کند. این نقش را می توان هنگام فراخوانیstartChat()
باhistory
موجود استفاده کرد.
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);
}
برای تعامل سریعتر از جریان استفاده کنید
به طور پیش فرض ، مدل پس از اتمام کل فرآیند تولید ، پاسخی را برمی گرداند. شما می توانید با انتظار برای کل نتیجه ، به تعامل سریعتر برسید و در عوض از جریان برای رسیدگی به نتایج جزئی استفاده کنید.
مثال زیر نحوه اجرای جریان با روش generateContentStream
را برای تولید متن از یک ارسال متن و تصویر نشان می دهد.
// ...
final response = model.generateContentStream([
Content.multi([prompt, ...imageParts])
]);
await for (final chunk in response) {
print(chunk.text);
}
// ...
می توانید از یک روش مشابه برای موارد ورودی فقط متن و موارد استفاده از چت استفاده کنید.
// Use streaming with text-only input
final response = model.generateContentStream(content);
// Use streaming with multi-turn conversations (like chat)
final response = chat.sendMessageStream(content);
موارد استفاده پیشرفته را اجرا کنید
موارد استفاده متداول که در بخش قبلی این آموزش شرح داده شده است به شما کمک می کند تا با استفاده از API Gemini راحت شوید. در این بخش مواردی از مواردی استفاده شده است که ممکن است پیشرفته تر تلقی شوند.
فراخوانی تابع
تماس با عملکرد ، دریافت خروجی داده های ساختاری از مدل های تولیدی را برای شما آسان تر می کند. سپس می توانید از این خروجی ها برای تماس با API های دیگر استفاده کرده و داده های پاسخ مربوطه را به مدل برگردانید. به عبارت دیگر ، تماس با عملکرد به شما کمک می کند تا مدل های تولیدی را به سیستم های خارجی متصل کنید تا محتوای تولید شده شامل به روزترین و دقیق ترین اطلاعات باشد. در آموزش فراخوانی عملکرد بیشتر بیاموزید.
از تعبیهات استفاده کنید
تعبیه تکنیکی است که برای نشان دادن اطلاعات به عنوان لیستی از شماره های نقطه شناور در یک آرایه استفاده می شود. با استفاده از جمینی ، می توانید متن (کلمات ، جملات و بلوک های متن) را به صورت بردار نشان دهید و مقایسه و تعبیه های کنتراست را آسان تر می کند. به عنوان مثال ، دو متنی که یک موضوع یا احساسات مشابه را به اشتراک می گذارند ، باید تعبیه مشابهی داشته باشند ، که می توانند از طریق تکنیک های مقایسه ریاضی مانند شباهت کسین شناسایی شوند.
برای تولید تعبیه از مدل embedding-001
با روش embedContent
(یا روش batchEmbedContent
) استفاده کنید. مثال زیر تعبیه یک رشته واحد ایجاد می کند:
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);
توکن ها را بشمارید
هنگام استفاده از اعلان های طولانی ، ممکن است قبل از ارسال هرگونه محتوا به مدل ، توکن ها را بشمارید. مثالهای زیر نحوه استفاده از countTokens()
برای موارد مختلف استفاده نشان می دهد:
// 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}');
گزینه هایی برای کنترل تولید محتوا
می توانید با پیکربندی پارامترهای مدل و با استفاده از تنظیمات ایمنی ، تولید محتوا را کنترل کنید.
توجه داشته باشید که عبور generationConfig
یا safetySettings
به یک روش درخواست مدل (مانند generateContent
) به طور کامل شیء پیکربندی را با همان نام منتقل شده در getGenerativeModel
غلبه می کند.
پارامترهای مدل را پیکربندی کنید
هر سریع که به مدل ارسال می کنید شامل مقادیر پارامتری است که نحوه تولید مدل پاسخ را کنترل می کند. این مدل می تواند برای مقادیر پارامتر مختلف نتایج مختلفی ایجاد کند. در مورد پارامترهای مدل بیشتر بدانید. پیکربندی برای طول عمر نمونه مدل شما حفظ می شود.
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,
);
از تنظیمات ایمنی استفاده کنید
شما می توانید از تنظیمات ایمنی برای تنظیم احتمال دریافت پاسخ هایی که ممکن است مضر تلقی شود ، استفاده کنید. به طور پیش فرض ، تنظیمات ایمنی محتوا را با احتمال متوسط و/یا زیاد از عدم امنیت محتوای در همه ابعاد مسدود می کند. در مورد تنظیمات ایمنی بیشتر بدانید.
در اینجا نحوه تنظیم یک تنظیم ایمنی آورده شده است:
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,
);
همچنین می توانید بیش از یک تنظیم ایمنی تنظیم کنید:
final safetySettings = [
SafetySetting(HarmCategory.harassment, HarmBlockThreshold.high),
SafetySetting(HarmCategory.hateSpeech, HarmBlockThreshold.high),
];
بعدش چی
طراحی سریع فرایند ایجاد مطالب است که پاسخ مطلوب را از مدل های زبان استخراج می کند. نوشتن مطالب ساخت یافته به خوبی بخش مهمی در اطمینان از پاسخ های دقیق و با کیفیت بالا از یک مدل زبان است. در مورد بهترین شیوه ها برای نوشتن سریع بیاموزید.
Gemini برای پاسخگویی به نیازهای موارد مختلف استفاده ، مانند انواع ورودی و پیچیدگی ، پیاده سازی برای گپ یا سایر کارهای زبان گفتگو و محدودیت های اندازه ، چندین مدل مدل ارائه می دهد. در مورد مدل های جمینی موجود بیاموزید.