Gemini 2.5 Flash の情報を見てみて API からの利用を少し試す

## はじめに

Gemini 2.5 Flash の話題を見かけたので、情報を少し見てみたり、API から少し使ってみたりしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/f8b66972-3c6f-4d7e-8f0a-fb4b7d866511.png)


●Gemini 2.5 Flash is now in preview
　https://blog.google/products/gemini/gemini-2-5-flash-preview/

●Start building with Gemini 2.5 Flash - Google Developers Blog
　https://developers.googleblog.com/en/start-building-with-gemini-25-flash/


公式ドキュメントの、モデルの情報が書かれた部分は以下があるようです。
https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview


### 過去の Gemini Flash のお試し

Gemini Flash に関する話題について、過去に、Qiita に記事も書いたものでは、以下の Gemini 2.0 Flash Experimental に関するものなどがありました。

●Gemini 2.0 Flash Experimental の Web で話題になっていた画像生成系の事例を試してみた - Qiita
　https://qiita.com/youtoy/items/c1cdd2c965ca9cadf269

●Google Gen AI SDK（Python版）を試す： Gemini 2.0 Flash ＋ JSON出力（structured output） - Qiita
　https://qiita.com/youtoy/items/d48576c2b6eba684add5


## いくつか情報を見てみる

この後、Gemini 2.5 Flash を API経由で試していくために、関連する公式の情報をいくつか見ていきます。


### ライブラリ／SDK

自分が使いそうなライブラリの情報から、先に見てみます。

#### JavaScript・TypeScript向けライブラリ／SDK

過去のお試しでは、[Python向けの Google Gen AI SDK](https://github.com/googleapis/python-genai) を使ってみていました。

今回のお試しでは、以下の赤枠で囲んでいる「プレビュー版の JavaScript・TypeScript用のもの」を使ってみることにします（※ 試した流れは、記事の最後のほうに書いています）。

●Gemini API ライブラリ | Google AI for Developers
　https://ai.google.dev/gemini-api/docs/libraries?hl=ja

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5e6777bb-0730-4966-91e8-c5f867eb0eaa.png)


現状はプレビュー版になっているようで、[GitHub のリポジトリ](https://github.com/googleapis/js-genai)には「プレビュー版という話に関する補足など」も書いてありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0d1550c5-8e6f-4290-a84b-7e34fc82b9f4.png)


### モデルの情報

モデルに関する情報も見てみます。

#### モデル名

モデル名は　`gemini-2.5-flash-preview-04-17` を指定すると良さそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1bd7d034-c061-49ef-bba5-11842e5d1514.png)

その他、入出力可能な内容やトークン数の制限、利用可能な機能は以下のとおりでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/418c55c6-e054-46a3-82d1-5218062fa2d5.png)

上記を見ると、現状の Gemini 2.5 Flash で出力できる内容に関して、Gemini 2.0 Flash で実験的に提供されている画像出力などは、ないようでした（現状、テキストのみ）。

Gemini 2.0 Flash で出力できる内容は、現時点では以下となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9b97bffb-404d-4f43-8a9c-d6eb9fcca3dc.png)


## API から使ってみる

Gemini 2.5 Flash を API から使ってみます。

### 下準備

#### @google/genai のインストール

npmコマンドで、以下をインストールします。

●@google/genai - npm
　https://www.npmjs.com/package/@google/genai

```zsh
npm install @google/genai
```

#### APIキーの設定

また、APIキーを GEMINI_API_KEY という環境変数で設定します。
自分は、[Google AI Studio で取得](https://aistudio.google.com/apikey)した APIキーを設定しました。


### コード実装

#### 公式サンプル

サンプルとして、以下のコードが掲載されています。

```javascript
import {GoogleGenAI} from '@google/genai';
const GEMINI_API_KEY = process.env.GEMINI_API_KEY;

const ai = new GoogleGenAI({apiKey: GEMINI_API_KEY});

async function main() {
  const response = await ai.models.generateContent({
    model: 'gemini-2.0-flash-001',
    contents: 'Why is the sky blue?',
  });
  console.log(response.text);
}

main();
```


ちなみに、今回は Google AI Studio で取得した APIキーを使っていますが、Vertex AI と組み合わせる場合は、以下のような記載を使うなど、上記とは少し異なるコードになるようでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3ab69c93-1dcb-44a1-acda-6b3cbd76352f.png)


#### 自分が用いたコード1

上記のサンプルに少し手を加えたものを試してみました。
モデル名は `gemini-2.5-flash-preview-04-17` を指定しています。


```javascript
import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash-preview-04-17",
    contents: "なぜ空は青い？",
  });
  console.log(response.text);
}

main();
```


実行結果は以下のとおりで、API経由でのレスポンスを得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3724e070-bc42-4a3c-b05f-cc21a5d0ec84.png)


#### 自分が用いたコード2

もう 1つ試してみます。

以下の SDKサンプルの中にある、[generate_content_with_file_upload.ts](https://github.com/googleapis/js-genai/blob/main/sdk-samples/generate_content_with_file_upload.ts) をベースにしたものを作ってみました。

●js-genai/sdk-samples at main · googleapis/js-genai
　https://github.com/googleapis/js-genai/tree/main/sdk-samples

用いたコードは、以下のとおりです。
元のコードに関して、主に以下の変更を加えています。

- TypeScript だったのを JavaScript に変更
- 要約対象の文章を別のものに変更
- 処理の一部を少し書きかえ


```javascript
import { createPartFromUri, GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const testFile = new Blob(
  [
    `Developers can now start building with Gemini 2.5 Flash.
    We’re excited to roll out an early version of Gemini 2.5 Flash today in preview in the Gemini API via Google AI Studio and Vertex AI. Building upon the popular foundation of 2.0 Flash, this new version delivers a major upgrade in reasoning capabilities, while still prioritizing speed and cost.
    
    Our new 2.5 Flash model has an amazing performance to cost ratio, putting it on the pareto frontier. It is our first fully hybrid reasoning model, allowing developers to turn thinking on or off, and set thinking budgets to optimize the balance between quality, cost, and latency. Even with thinking off, developers can maintain the speed of 2.0 Flash and improve performance. We can’t wait to see how you put Gemini 2.5 Flash to work in your apps, and to get your feedback.
    
    Gemini 2.5 Flash is also available to everyone in the Gemini app, and can be used with new features like Canvas, an interactive space for refining your documents and code.`,
  ],
  { type: "text/plain" }
);

const file = await ai.files.upload({
  file: testFile,
  config: {
    displayName: "generate_file.txt",
  },
});

// Wait for the file to be processed.
let getFile = await ai.files.get({ name: file.name });
while (getFile.state === "PROCESSING") {
  getFile = await ai.files.get({ name: file.name });
  console.log(`current file status: ${getFile.state}`);
  console.log("File is still processing, retrying in 5 seconds");

  await new Promise((resolve) => {
    setTimeout(resolve, 5000);
  });
}
if (file.state === "FAILED") {
  throw new Error("File processing failed.");
}

const content = ["要約を1文で日本語で示して"];

if (file.uri && file.mimeType) {
  const fileContent = createPartFromUri(file.uri, file.mimeType);
  content.push(fileContent);
}

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash-preview-04-17",
    contents: content,
  });

  console.log(response.text);
}

main();
```


そして、上記を実行した結果は以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/7a7c0ada-d8fc-4e2b-9938-8717e2ed1818.png)

意図通りの結果が得られたようです。


#### コード2 で用いた文章の日本語版（生成AI による日本語訳）

なお、要約元の文章を ChatGPT で翻訳したものも、参考として掲載しておきます（※ [Google公式の記事「Gemini 2.5 Flash is now in preview」](https://blog.google/products/gemini/gemini-2-5-flash-preview/)の冒頭部分です）。

>開発者は、Gemini 2.5 Flash を使って開発を始められるようになりました。
本日より、Gemini API（Google AI Studio と Vertex AI 経由） において、Gemini 2.5 Flash のプレビュー版 を早期公開します。人気の高かった 2.0 Flash を土台に、この新バージョンは推論能力が大幅に強化されており、速度とコスト効率を引き続き重視しています。
>
>新しい 2.5 Flash モデル は、性能とコストのバランスが非常に優れており、パレート最適な位置にあります。また、初の完全なハイブリッド推論モデルであり、開発者は「思考モード」のオン・オフや、「思考の予算（thinking budget）」を設定することで、品質・コスト・遅延のバランスを最適化できます。「思考」をオフにしても、2.0 Flash と同等のスピードを維持しつつ、パフォーマンスを向上させることが可能です。
>
>あなたのアプリで Gemini 2.5 Flash がどのように活用されるのか、私たちもとても楽しみにしており、ぜひフィードバックをお寄せください。
>
> なお、Gemini 2.5 Flash は Geminiアプリ でもすべてのユーザーに提供されており、Canvas のような新機能と組み合わせて、ドキュメントやコードをインタラクティブにブラッシュアップする場としても活用できます。


## おわりに

今回、Gemini 2.5 Flash の情報を見てみました。
さらに プレビュー版の JavaScript・TypeScript用のライブラリを用いて、API からの利用も少し試してみました。

以下の公式サンプルがいろいろあったので、また他の処理も試してみられればと思います。

●js-genai/sdk-samples at main · googleapis/js-genai
　https://github.com/googleapis/js-genai/tree/main/sdk-samples