Genkit（Node.js版）と OpenAI の API の組み合わせをサクッと試す

## はじめに

以下の Genkit（Node.js版）と OpenAI の API の組み合わせをサクッと試してみます。

●Genkit  |  Firebase
　https://firebase.google.com/docs/genkit?hl=ja#openai

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/51c3fb1d-65fb-433a-b8eb-455dfdf84931.png)


### サンプルコード

上記のページを見ると、以下のサンプルコードが示されています。

```javascript
import { genkit } from 'genkit';
import { openAI, gpt4o } from 'genkitx-openai';

const ai = genkit({ plugins: [openAI()] });

const { text } = await ai.generate({
    model: gpt4o,
    prompt: 'Why is Firebase awesome?'
});
```


#### 使われているパッケージ

冒頭の部分を見ると、以下の 2つのパッケージを使っているようです。


●genkit - npm
　https://www.npmjs.com/package/genkit?activeTab=readme

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1a7bb7dc-91ad-4095-8a8c-54c8021efbbf.png)


●genkitx-openai - npm
　https://www.npmjs.com/package/genkitx-openai

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a78f962e-643f-462d-a77f-a37257c09f74.png)


#### サポートされている OpenAI のモデル

この Firebase Genkit の OpenAI Plugin でサポートされているモデルは、以下となっているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5ed4d4ac-34f9-42f1-9faf-2cf5cb409b7f.png)



### サクッと試す

簡単な内容でサクッと試していきます。

#### 下調べ

対応しているモデルのリストを、念のため元のコードで確認してみます。


●genkit-plugins/plugins/openai/README.md at main · TheFireCo/genkit-plugins
　https://github.com/TheFireCo/genkit-plugins/blob/main/plugins/openai/README.md


該当箇所は、以下になりそうです。

●genkit-plugins/plugins/openai/src/index.ts at ec01c18567e320b344e6a0b5952f6c1d2a33eecc · TheFireCo/genkit-plugins
　https://github.com/TheFireCo/genkit-plugins/blob/ec01c18567e320b344e6a0b5952f6c1d2a33eecc/plugins/openai/src/index.ts#L29

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6e1d0cc6-a716-4343-92a4-61fbe06c17f6.png)

npm のページに出ていなかった o4Mini も対応していそうです。今回、o4Mini を使ってみることにします。


#### 環境の準備

パッケージのインストール、APIキーの設定を行います。

以下でパッケージ 2つをインストールします。

```zsh
npm i genkitx-openai genkit
```

また、環境変数 OPENAI_API_KEY に、OpenAI の APIキーを設定しておきます。


#### コードと実行結果

環境を作れたので、以下のコードを実行してみます。


```javascript
import { genkit } from "genkit";
import { openAI, o4Mini } from "genkitx-openai";

const ai = genkit({ plugins: [openAI()] });

const { text } = await ai.generate({
  model: o4Mini,
  prompt: "あなたは誰？",
});

console.log(text);
```


実行結果として、以下の応答を得ることができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b5ef6bfc-fd24-4903-9d48-c83efccfb2e7.png)


## 余談： Genkit（Node.js版）を試したきかっけ

余談ですが、今回 Genkit（Node.js版）を試したきかっけに触れておきます。

流れとしては「A2A ＋ TypeScript・JavaScript」という内容を調査していて、以下の部分を見かけました。

●google/A2A: An open protocol enabling communication and interoperability between opaque agentic applications.
　https://github.com/google/A2A/tree/main?tab=readme-ov-file#getting-started

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9b85cbab-6609-4fb6-9043-fa56765d8b9f.png)


それで、リンク先の以下を見たら Genkit が使われていると書いてあり、Genkit は試したことがなかったので、まずはシンプルに使ってみたという流れでした。


●A2A/samples/js at main · google/A2A
　https://github.com/google/A2A/tree/main/samples/js#javascript-samples

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e0e23f9e-e1eb-49b0-a5b6-16187867a0f1.png)