Vertex AI در Firebase

برای دسترسی مستقیم به Gemini API و مدل های خانواده Gemini به طور مستقیم از برنامه خود، توصیه می کنیم از Vertex AI در Firebase SDK برای Android استفاده کنید. این SDK بخشی از پلتفرم بزرگتر Firebase است که به شما در ساخت و اجرای برنامه های فول استک کمک می کند.

Vertex AI در معماری ادغام Firebase
شکل 1. Vertex AI در معماری یکپارچه سازی Firebase.

مهاجرت از Google AI Client SDK

Vertex AI در Firebase SDK شبیه به Google AI Client SDK است، اما Vertex AI در Firebase SDK گزینه‌های امنیتی حیاتی و سایر ویژگی‌ها را برای موارد استفاده تولیدی ارائه می‌دهد . به عنوان مثال، هنگام استفاده از Vertex AI در Firebase، می توانید از موارد زیر نیز استفاده کنید:

  • برای محافظت از Gemini API در برابر سوء استفاده توسط مشتریان غیرمجاز، برنامه Firebase را بررسی کنید .

  • Firebase Remote Config برای تنظیم و تغییر مقادیر پویا برای برنامه شما در فضای ابری (مثلاً نام مدل ها) بدون نیاز به انتشار نسخه جدیدی از برنامه شما.

  • Cloud Storage برای Firebase برای گنجاندن فایل های رسانه ای بزرگ در درخواست شما به Gemini API.

اگر قبلاً Google AI Client SDK را در برنامه خود ادغام کرده اید، می توانید به Vertex AI در Firebase مهاجرت کنید .

شروع کردن

قبل از اینکه مستقیماً از برنامه خود با Gemini API تعامل داشته باشید، ابتدا باید چند کار را انجام دهید، از جمله آشنایی با درخواست ها و همچنین راه اندازی Firebase و برنامه خود برای استفاده از SDK.

با دستورات آزمایش کنید

می‌توانید با دستورات در Vertex AI Studio آزمایش کنید. Vertex AI Studio یک IDE برای طراحی سریع و نمونه سازی است. این به شما امکان می‌دهد فایل‌ها را برای آزمایش اعلان‌ها با متن و عکس آپلود کنید و درخواستی را ذخیره کنید تا بعداً دوباره آن را ببینید.

ایجاد دستور مناسب برای مورد استفاده شما بیشتر هنر است تا علم، که آزمایش را حیاتی می کند. می‌توانید در مستندات Firebase درباره درخواست بیشتر بیاموزید.

یک پروژه Firebase راه اندازی کنید و برنامه خود را به Firebase متصل کنید

هنگامی که آماده تماس با Gemini API از برنامه خود شدید، دستورالعمل های راهنمای شروع به کار Vertex AI در Firebase را برای راه اندازی Firebase و SDK در برنامه خود دنبال کنید. راهنمای شروع به شما کمک می کند تا تمام کارهای زیر را در این راهنما انجام دهید.

  1. یک پروژه Firebase جدید یا موجود را راه‌اندازی کنید، از جمله استفاده از طرح قیمت‌گذاری Blaze و فعال کردن APIهای مورد نیاز.

  2. برنامه خود را به Firebase وصل کنید، از جمله ثبت برنامه خود و افزودن فایل پیکربندی Firebase ( google-services.json ) به برنامه خود.

وابستگی Gradle را اضافه کنید

وابستگی Gradle زیر را به ماژول برنامه خود اضافه کنید:

کاتلین

dependencies {
  ...
  implementation("com.google.firebase:firebase-vertexai:16.0.2")
}

جاوا

dependencies {

   [...]

   implementation("com.google.firebase:firebase-vertexai:16.0.2")

   // Required to use `ListenableFuture` from Guava Android for one-shot generation
   implementation("com.google.guava:guava:31.0.1-android")

   // Required to use `Publisher` from Reactive Streams for streaming operations
   implementation("org.reactivestreams:reactive-streams:1.0.4")
}

سرویس Vertex AI و مدل مولد را راه اندازی کنید

با نمونه سازی یک GenerativeModel و مشخص کردن نام مدل شروع کنید:

کاتلین

val generativeModel = Firebase.vertexAI.generativeModel("gemini-1.5-flash")

جاوا

GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-1.5-flash");

در مستندات Firebase، می‌توانید درباره مدل‌های موجود برای استفاده با Vertex AI در Firebase اطلاعات بیشتری کسب کنید. همچنین می توانید با پیکربندی پارامترهای مدل آشنا شوید.

با Gemini API از برنامه خود تعامل داشته باشید

اکنون که Firebase و برنامه خود را برای استفاده از SDK تنظیم کرده اید، آماده تعامل با Gemini API از برنامه خود هستید.

تولید متن

برای ایجاد یک پاسخ متنی، با دستور شما generateContent() فراخوانی کنید.

کاتلین

// Note: `generateContent()` is a `suspend` function, which integrates well
// with existing Kotlin code.

scope.launch {
  val response = model.generateContent("Write a story about the green robot")
}

جاوا

// In Java, create a `GenerativeModelFutures` from the `GenerativeModel`.
// Note that `generateContent()` returns a `ListenableFuture`. Learn more:
// https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Content prompt = new Content.Builder()
    .addText("Write a story about a green robot.")
    .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تولید متن از تصاویر و رسانه های دیگر

همچنین می‌توانید متنی را از یک درخواست تولید کنید که شامل متن به اضافه تصاویر یا رسانه‌های دیگر است. هنگام فراخوانی generateContent() ، می توانید رسانه را به عنوان داده درون خطی ارسال کنید (همانطور که در مثال زیر نشان داده شده است). از طرف دیگر، می‌توانید با استفاده از Cloud Storage برای URLهای Firebase، فایل‌های رسانه‌ای بزرگ را در یک درخواست قرار دهید .

کاتلین

scope.launch {
  val response = model.generateContent(
    content {
      image(bitmap)
      text("what is the object in the picture?")
    }
  )
}

جاوا

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

Content prompt = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

چت چند نوبتی

همچنین می توانید از مکالمات چند نوبتی پشتیبانی کنید. یک چت را با تابع startChat() راه اندازی کنید. شما می توانید به صورت اختیاری یک تاریخچه پیام ارائه دهید. سپس تابع sendMessage() را برای ارسال پیام های چت فراخوانی کنید.

کاتلین

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?") }
    )
)

scope.launch {
   val response = chat.sendMessage("How many paws are in my house?")
}

جاوا

// (Optional) create message history
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 messageBuilder = new Content.Builder();
messageBuilder.setRole("user");
messageBuilder.addText("How many paws are in my house?");

Content message = messageBuilder.build();

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

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() {
        // ...
    }

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

    @Override
    public void onSubscribe(Subscription s) {
        s.request(Long.MAX_VALUE);
    }

});

جریان پاسخ

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

کاتلین

scope.launch {
  var outputContent = ""

  generativeModel.generateContentStream(inputContent)
          .collect { response ->
            outputContent += response.text
          }
}

جاوا

// Note that in Java the method `generateContentStream()` returns a
// Publisher from the Reactive Streams library.
// https://www.reactive-streams.org/

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
Content prompt = new Content.Builder()
        .addText("Write a story about a green robot.")
        .build();

Publisher<GenerateContentResponse> streamingResponse =
    model.generateContentStream(prompt);

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() {
    // ...
  }

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

  @Override
  public void onSubscribe(Subscription s) {
    s.request(Long.MAX_VALUE);
  }
});

مراحل بعدی