شروع به کار با Gemini API در برنامه‌های Android (SDK مشتری)

این آموزش نحوه دسترسی مستقیم به Gemini API را از برنامه Android خود با استفاده از Google AI Client SDK برای Android نشان می دهد. اگر نمی‌خواهید مستقیماً با REST API یا کدهای سمت سرور (مانند Python) برای دسترسی به مدل‌های Gemini در برنامه Android خود کار کنید، می‌توانید از این SDK کلاینت استفاده کنید.

در این آموزش، نحوه انجام کارهای زیر را خواهید آموخت:

علاوه بر این، این آموزش شامل بخش هایی در مورد موارد استفاده پیشرفته (مانند شمارش توکن ها ) و همچنین گزینه هایی برای کنترل تولید محتوا است .

دسترسی Gemini روی دستگاه را در نظر بگیرید

سرویس گیرنده SDK برای Android که در این آموزش توضیح داده شده است به شما امکان می دهد به مدل های Gemini Pro که در سرورهای Google اجرا می شوند دسترسی داشته باشید. برای موارد استفاده‌ای که شامل پردازش داده‌های حساس، در دسترس بودن آفلاین، یا صرفه‌جویی در هزینه برای جریان‌های کاربر اغلب استفاده می‌شود، ممکن است بخواهید به Gemini Nano که روی دستگاه اجرا می‌شود دسترسی داشته باشید. برای جزئیات بیشتر، به آموزش اندروید (روی دستگاه) مراجعه کنید.

پیش نیازها

این آموزش فرض می کند که شما با استفاده از Android Studio برای توسعه برنامه های اندروید آشنا هستید.

برای تکمیل این آموزش، مطمئن شوید که محیط توسعه و برنامه اندروید شما شرایط زیر را دارد:

  • اندروید استودیو (آخرین نسخه)
  • برنامه Android شما باید سطح API 21 یا بالاتر را هدف قرار دهد.

پروژه خود را تنظیم کنید

قبل از فراخوانی Gemini API، باید پروژه اندروید خود را راه‌اندازی کنید، که شامل تنظیم کلید API، افزودن وابستگی‌های SDK به پروژه اندروید و مقداردهی اولیه مدل است.

کلید API خود را تنظیم کنید

برای استفاده از Gemini API، به یک کلید API نیاز دارید. اگر قبلاً یکی ندارید، یک کلید در Google AI Studio ایجاد کنید.

یک کلید API دریافت کنید

کلید API خود را ایمن کنید

اکیداً توصیه می شود که یک کلید API را در سیستم کنترل نسخه خود بررسی نکنید . در عوض، باید آن را در یک فایل local.properties (که در فهرست اصلی پروژه شما قرار دارد، اما از کنترل نسخه حذف شده است) ذخیره کنید و سپس از افزونه Secrets Gradle برای اندروید برای خواندن کلید API خود به عنوان یک متغیر Build Configuration استفاده کنید.

کاتلین

// Access your API key as a Build Configuration variable
val apiKey = BuildConfig.apiKey

جاوا

// Access your API key as a Build Configuration variable
String apiKey = BuildConfig.apiKey;

تمام قطعه های این آموزش از این بهترین تمرین استفاده می کنند. همچنین اگر می‌خواهید اجرای پلاگین Secrets Gradle را مشاهده کنید، می‌توانید برنامه نمونه این SDK را بررسی کنید یا از آخرین پیش‌نمایش Android Studio Iguana استفاده کنید که دارای قالب Gemini API Starter است (که شامل فایل local.properties برای دریافت است. تو شروع کردی).

وابستگی SDK را به پروژه خود اضافه کنید

  1. در فایل پیکربندی Gradle ماژول (سطح برنامه) خود (مانند <project>/<app-module>/build.gradle.kts )، وابستگی را برای Google AI SDK برای Android اضافه کنید:

    کاتلین

    dependencies {
      // ... other androidx dependencies
    
      // add the dependency for the Google AI client SDK for Android
      implementation("com.google.ai.client.generativeai:generativeai:0.3.0")
    }
    

    جاوا

    برای جاوا، باید دو کتابخانه اضافی اضافه کنید.

    dependencies {
        // ... other androidx dependencies
    
        // add the dependency for the Google AI client SDK for Android
        implementation("com.google.ai.client.generativeai:generativeai:0.3.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")
    }
    
  2. پروژه اندروید خود را با فایل های Gradle همگام سازی کنید.

مدل مولد را راه اندازی کنید

قبل از اینکه بتوانید تماس API برقرار کنید، باید شی GenerativeModel مقداردهی اولیه کنید:

کاتلین

val generativeModel = GenerativeModel(
    // Use a model that's applicable for your use case (see "Implement basic use cases" below)
    modelName = "MODEL_NAME",
    // Access your API key as a Build Configuration variable (see "Set up your API key" above)
    apiKey = BuildConfig.apiKey
)

جاوا

برای جاوا، شما همچنین باید شی GenerativeModelFutures را مقداردهی اولیه کنید.

// Use a model that's applicable for your use case (see "Implement basic use cases" below)
GenerativeModel gm = new GenerativeModel(/* modelName */ "MODEL_NAME",
// 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);

هنگام تعیین یک مدل به موارد زیر توجه کنید:

  • از مدلی استفاده کنید که مخصوص مورد استفاده شما باشد (مثلاً gemini-pro-vision برای ورودی چندوجهی است). در این راهنما، دستورالعمل‌های هر پیاده‌سازی، مدل پیشنهادی را برای هر مورد استفاده فهرست می‌کند.

موارد استفاده رایج را اجرا کنید

اکنون که پروژه شما راه اندازی شده است، می توانید با استفاده از Gemini API برای پیاده سازی موارد استفاده مختلف، کاوش کنید:

متن را از ورودی فقط متنی تولید کنید

وقتی ورودی سریع فقط متن را شامل می شود، از مدل gemini-pro با generateContent برای تولید خروجی متن استفاده کنید:

کاتلین

توجه داشته باشید که generateContent() یک تابع suspend است و باید از محدوده Coroutine فراخوانی شود. اگر با Coroutines آشنا نیستید، Kotlin Coroutines را در Android بخوانید.

val generativeModel = GenerativeModel(
    // For text-only input, use the gemini-pro model
    modelName = "gemini-pro",
    // 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)

جاوا

توجه داشته باشید که generateContent() یک ListenableFuture برمی گرداند. اگر با این API آشنا نیستید، به مستندات Android درباره استفاده از ListenableFuture مراجعه کنید.

// For text-only input, use the gemini-pro model
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-pro",
// 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);

تولید متن از ورودی متن و تصویر (چند وجهی)

Gemini یک مدل چندوجهی ( gemini-pro-vision ) ارائه می‌کند، بنابراین می‌توانید هم متن و هم تصاویر را وارد کنید. حتماً شرایط مورد نیاز تصویر را برای درخواست‌ها مرور کنید.

هنگامی که ورودی سریع شامل متن و تصاویر است، از مدل gemini-pro-vision با generateContent برای تولید خروجی متن استفاده کنید:

کاتلین

توجه داشته باشید که generateContent() یک تابع suspend است و باید از محدوده Coroutine فراخوانی شود. اگر با Coroutines آشنا نیستید، Kotlin Coroutines را در Android بخوانید.

val generativeModel = GenerativeModel(
    // For text-and-images input (multimodal), use the gemini-pro-vision model
    modelName = "gemini-pro-vision",
    // 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)

جاوا

توجه داشته باشید که generateContent() یک ListenableFuture برمی گرداند. اگر با این API آشنا نیستید، به مستندات Android درباره استفاده از ListenableFuture مراجعه کنید.

// For text-and-images input (multimodal), use the gemini-pro-vision model
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-pro-vision",
// 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);

ساخت مکالمات چند نوبتی (چت)

با استفاده از Gemini، می توانید مکالمات آزاد را در چندین نوبت ایجاد کنید. SDK با مدیریت وضعیت مکالمه، فرآیند را ساده می‌کند، بنابراین برخلاف generateContent ، مجبور نیستید تاریخچه مکالمه را خودتان ذخیره کنید.

برای ایجاد یک مکالمه چند نوبتی (مانند چت)، از مدل gemini-pro استفاده کنید و با فراخوانی startChat() چت را مقداردهی اولیه کنید. سپس از sendMessage() برای ارسال یک پیام کاربر جدید استفاده کنید که پیام و پاسخ را نیز به تاریخچه چت اضافه می کند.

دو گزینه ممکن برای role مرتبط با محتوا در یک مکالمه وجود دارد:

  • user : نقشی که دستورات را ارائه می دهد. این مقدار پیش فرض برای تماس های sendMessage است.

  • model : نقشی که پاسخ ها را ارائه می دهد. این نقش هنگام فراخوانی startChat() با history موجود قابل استفاده است.

کاتلین

توجه داشته باشید که generateContent() یک تابع suspend است و باید از محدوده Coroutine فراخوانی شود. اگر با Coroutines آشنا نیستید، Kotlin Coroutines را در Android بخوانید.

val generativeModel = GenerativeModel(
    // For text-only input, use the gemini-pro model
    modelName = "gemini-pro",
    // 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?")

جاوا

توجه داشته باشید که generateContent() یک ListenableFuture برمی گرداند. اگر با این API آشنا نیستید، به مستندات Android درباره استفاده از ListenableFuture مراجعه کنید.

// For text-only input, use the gemini-pro model
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-pro",
// 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 userMessage = new Content.Builder()
    .setRole("user")
    .addText("How many paws are in my house?")
    .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);

از پخش جریانی برای تعاملات سریعتر استفاده کنید

به‌طور پیش‌فرض، مدل پس از تکمیل کل فرآیند تولید، پاسخی را برمی‌گرداند. شما می توانید با منتظر ماندن برای کل نتیجه به تعاملات سریع تری برسید و در عوض از استریم برای مدیریت نتایج جزئی استفاده کنید.

مثال زیر نشان می دهد که چگونه می توان جریان را با generateContentStream برای تولید متن از یک اعلان ورودی متن و تصویر پیاده سازی کرد.

کاتلین

توجه داشته باشید که generateContentStream() یک تابع suspend است و باید از یک محدوده Coroutine فراخوانی شود. اگر با Coroutines آشنا نیستید، Kotlin Coroutines را در Android بخوانید.

val generativeModel = GenerativeModel(
    // For text-and-image input (multimodal), use the gemini-pro-vision model
    modelName = "gemini-pro-vision",
    // 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
}

جاوا

روش‌های جریان جاوا در این SDK یک نوع Publisher را از کتابخانه Reactive Streams برمی‌گرداند.

// For text-and-images input (multimodal), use the gemini-pro-vision model
GenerativeModel gm = new GenerativeModel(/* modelName */ "gemini-pro-vision",
// 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);

final String[] fullResponse = {""};

streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
    @Override
    public void onNext(GenerateContentResponse generateContentResponse) {
        String chunk = generateContentResponse.getText();
        fullResponse[0] += chunk;
    }

    @Override
    public void onComplete() {
        System.out.println(fullResponse[0]);
    }

    @Override
    public void onError(Throwable t) {
        t.printStackTrace();
    }

    @Override
    public void onSubscribe(Subscription s) { }
});

می‌توانید از یک رویکرد مشابه برای موارد استفاده از چت و ورودی متنی استفاده کنید:

کاتلین

توجه داشته باشید که generateContentStream() یک تابع suspend است و باید از یک محدوده Coroutine فراخوانی شود. اگر با Coroutines آشنا نیستید، Kotlin Coroutines را در Android بخوانید.

// 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)
}

جاوا

روش‌های جریان جاوا در این SDK یک نوع Publisher را از کتابخانه Reactive Streams برمی‌گرداند.

// Use streaming with text-only input
Publisher<GenerateContentResponse> streamingResponse =
    model.generateContentStream(inputContent);

final String[] fullResponse = {""};

streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
    @Override
    public void onNext(GenerateContentResponse generateContentResponse) {
        String chunk = generateContentResponse.getText();
        fullResponse[0] += chunk;
    }

    @Override
    public void onComplete() {
        System.out.println(fullResponse[0]);
    }

    // ... other methods omitted for brevity
});
// Use streaming with multi-turn conversations (like chat)
ChatFutures chat = model.startChat(history);

Publisher<GenerateContentResponse> streamingResponse =
    chat.sendMessageStream(inputContent);

final String[] fullResponse = {""};

streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
    @Override
    public void onNext(GenerateContentResponse generateContentResponse) {
        String chunk = generateContentResponse.getText();
        fullResponse[0] += chunk;
    }

    @Override
    public void onComplete() {
        System.out.println(fullResponse[0]);
    }

    // ... other methods omitted for brevity
});

موارد استفاده پیشرفته را اجرا کنید

موارد استفاده متداول شرح داده شده در بخش قبلی این آموزش به شما کمک می کند تا با استفاده از Gemini API راحت باشید. این بخش برخی از موارد استفاده را که ممکن است پیشرفته‌تر در نظر گرفته شوند، توضیح می‌دهد.

توکن ها را بشمار

هنگام استفاده از اعلان های طولانی، ممکن است شمارش نشانه ها قبل از ارسال هر محتوایی به مدل مفید باشد. مثال های زیر نحوه استفاده از countTokens() برای موارد استفاده مختلف نشان می دهد:

کاتلین

توجه داشته باشید که countTokens() یک تابع suspend است و باید از یک محدوده Coroutine فراخوانی شود. اگر با Coroutines آشنا نیستید، Kotlin Coroutines را در Android بخوانید.

// 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)

جاوا

توجه داشته باشید که countTokens() یک ListenableFuture برمی گرداند. اگر با این API آشنا نیستید، به مستندات Android درباره استفاده از 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]));

گزینه هایی برای کنترل تولید محتوا

شما می توانید تولید محتوا را با پیکربندی پارامترهای مدل و با استفاده از تنظیمات ایمنی کنترل کنید.

پیکربندی پارامترهای مدل

هر اعلانی که به مدل ارسال می کنید شامل مقادیر پارامتری است که نحوه تولید پاسخ مدل را کنترل می کند. مدل می تواند نتایج متفاوتی را برای مقادیر پارامترهای مختلف ایجاد کند. درباره پارامترهای مدل بیشتر بدانید.

کاتلین

val config = generationConfig {
    temperature = 0.9f
    topK = 16
    topP = 0.1f
    maxOutputTokens = 200
    stopSequences = listOf("red")
}

val generativeModel = GenerativeModel(
    modelName = "MODEL_NAME",
    apiKey = BuildConfig.apiKey,
    generationConfig = config
)

جاوا

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();

GenerativeModel gm = new GenerativeModel(
    "MODEL_NAME",
    BuildConfig.apiKey,
    generationConfig
);

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

از تنظیمات ایمنی استفاده کنید

می توانید از تنظیمات ایمنی برای تنظیم احتمال دریافت پاسخ هایی که ممکن است مضر تلقی شوند استفاده کنید. به‌طور پیش‌فرض، تنظیمات ایمنی محتوایی را با احتمال متوسط ​​و/یا زیاد ناامن بودن محتوا در همه ابعاد مسدود می‌کند. درباره تنظیمات ایمنی بیشتر بیاموزید.

در اینجا نحوه تنظیم یک تنظیم ایمنی آورده شده است:

کاتلین

val generativeModel = GenerativeModel(
    modelName = "MODEL_NAME",
    apiKey = BuildConfig.apiKey,
    safetySettings = listOf(
        SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.ONLY_HIGH)
    )
)

جاوا

SafetySetting harassmentSafety = new SafetySetting(HarmCategory.HARASSMENT,
    BlockThreshold.ONLY_HIGH);

GenerativeModel gm = new GenerativeModel(
    "MODEL_NAME",
    BuildConfig.apiKey,
    null, // generation config is optional
    Collections.singletonList(harassmentSafety)
);

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

همچنین می توانید بیش از یک تنظیم ایمنی را تنظیم کنید:

کاتلین

val harassmentSafety = SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.ONLY_HIGH)

val hateSpeechSafety = SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE)

val generativeModel = GenerativeModel(
    modelName = "MODEL_NAME",
    apiKey = BuildConfig.apiKey,
    safetySettings = listOf(harassmentSafety, hateSpeechSafety)
)

جاوا

SafetySetting harassmentSafety = new SafetySetting(HarmCategory.HARASSMENT,
    BlockThreshold.ONLY_HIGH);

SafetySetting hateSpeechSafety = new SafetySetting(HarmCategory.HATE_SPEECH,
    BlockThreshold.MEDIUM_AND_ABOVE);

GenerativeModel gm = new GenerativeModel(
    "MODEL_NAME",
    BuildConfig.apiKey,
    null, // generation config is optional
    Arrays.asList(harassmentSafety, hateSpeechSafety)
);

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

بعدش چی

  • طراحی سریع فرآیند ایجاد اعلان‌هایی است که پاسخ دلخواه را از مدل‌های زبانی به دست می‌آورد. نوشتن اعلان‌های ساختاریافته بخش ضروری برای اطمینان از پاسخ‌های دقیق و با کیفیت بالا از یک مدل زبان است. درباره بهترین شیوه ها برای نوشتن سریع بیاموزید.

  • Gemini چندین مدل مختلف را برای برآوردن نیازهای موارد استفاده مختلف، مانند انواع ورودی و پیچیدگی، پیاده سازی برای چت یا سایر وظایف زبان گفتگو و محدودیت های اندازه ارائه می دهد. با مدل های موجود Gemini آشنا شوید.

  • Gemini گزینه هایی را برای درخواست افزایش محدودیت نرخ ارائه می دهد. محدودیت نرخ برای مدل های Gemini Pro 60 درخواست در دقیقه (RPM) است.

  • سرویس گیرنده SDK برای Android که در این آموزش توضیح داده شده است به شما امکان می دهد به مدل های Gemini Pro که در سرورهای Google اجرا می شوند دسترسی داشته باشید. برای موارد استفاده‌ای که شامل پردازش داده‌های حساس، در دسترس بودن آفلاین، یا صرفه‌جویی در هزینه برای جریان‌های کاربر اغلب استفاده می‌شود، ممکن است بخواهید به Gemini Nano که روی دستگاه اجرا می‌شود دسترسی داشته باشید. برای جزئیات بیشتر، به آموزش اندروید (روی دستگاه) مراجعه کنید.