OpenAIのAPIに記事を書かせるテスト：model４種類の出力を比較してみました

比較方法
--

以下のようなコードを用意して、OpenAIの``text-ada-001``,``text-babbage-001``,``text-curie-001``,``text-davinci-003``に「OpenAIを利用したWEBサイト制作」というお題でカテゴリ10個、「OpenAI入門」のカテゴリの記事のタイトルを10個、「OpenAIを使ったAI開発の基礎知識」というタイトルの記事を1000文字程度で書いてもらいました。


各モデルはおおよそ

|性能|モデル|価格(/1k token)|
|--|--|--|
|高速低性能|ada|$0.0004 |
|↑|babbage|$0.0005|
|↓|curie|$0.0020|
|低速高性能|davinci|$0.0200|


(2023/2/21 現在)
参照：[OpenAI Pricing](https://openai.com/api/pricing/)

みたいな感じです。

OpenAIのAPIを使う際にはこれらのモデルからいずれを使うかを選択することになります。

これらの比較をするために以下のようなコードを用意して結果を比べてみました。
``package.json``とか``.env``あたりは割愛、簡易なお試し比較につきハードコーディングになってるのはご了承ください。

```js
import fs from 'fs';
import path from 'path';
import {Configuration,OpenAIApi} from "openai";
import * as dotenv from "dotenv";

const createCategoryPrompt=(concept,num)=>`「${concept}」というお題で記事のカテゴリを${num}個考えてください。出力形式はjsonで、以下に倣ってください。["カテゴリ1","カテゴリ2","カテゴリ3",...]`;
const createTitlesPrompt=(category,num)=>`「${category}」のカテゴリの記事のタイトルを${num}個考えてください。出力形式はjsonで、以下に倣ってください。["タイトル1","タイトル2","タイトル3",...]`;
const createArticlePrompt=(title,len)=>`「${title}」というタイトルの記事を${len}文字前後のMarkDown形式で書いてください。`;

(async ()=>{
	const configuration=new Configuration({
		apiKey:process.env.OPENAI_API_KEY,
	});
	const openai=new OpenAIApi(configuration);
	if(!fs.existsSync('result')){fs.mkdirSync('result');}
	const models=[
		"text-ada-001",
		"text-babbage-001",
		"text-curie-001",
		"text-davinci-003"
	];
	models.forEach(async(model)=>{
		const start=performance.now();
		const completion=await openai.createCompletion({
			model,
			prompt:createArticlePrompt('OpenAIを使ったAI開発の基礎知識',1000),//←この行を編集
			temperature: 0.6,
			max_tokens:1900
		});
		fs.writeFileSync(`result/articles-${model}.json`,completion.data.choices[0].text);
		const time=performance.now()-start;
		console.log(`${model} finished with ${time}ms`);
	});
})();
```

カテゴリ
--

まず「OpenAIを利用したWEBサイト制作」というお題でカテゴリを10個考えてもらいました。

投げたプロンプト
```
「OpenAIを利用したWEBサイト制作」というお題で記事のカテゴリを10個考えてください。出力形式はjsonで、以下に倣ってください。["カテゴリ1","カテゴリ2","カテゴリ3",...]
```

### text-ada-001
finished with 2802.011977016926ms
```
["OpenAI","WEBサイト制作",10"]

1. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/。

2. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

3. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

4. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

5. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

6. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

7. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

8. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

9. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.

10. "OpenAI - website creation
".OpenAI.com. https://www.openai.com/site-creation/>.
```


### text-babbage-001
finished with 1095.2762740254402ms
```
1. カテゴリ1 インターネットサイト制作
2. カテゴリ2 インターネットサイト制作
3. カテゴリ3 インターネットサイト制作
```


### text-curie-001
finished with 2526.3725380003452ms
```
1. システム開発・運用
2. ソフトウェア開発
3. コンピュータサイエンス
4. デザイン・イラスト
5. ネットワーク技術
6. システムコントロール
7. データベース・プログラミング
8. 人工知能
9. プログラミング教育
10. プログラミング言語

```

### text-davinci-003
finished with 12049.082843989134ms
```json
["OpenAI入門","OpenAI導入のメリット","OpenAIを用いたWEBサイト制作の手順","OpenAIを用いたWEBサイト制作のコツ","OpenAIを用いたWEBサイト制作の例","OpenAIを用いたWEBサイト制作のツール","OpenAIを用いたWEBサイト制作のデザイン","OpenAIを用いたWEBサイト制作のテスト","OpenAIを用いたWEBサイト制作のリリース","OpenAIを用いたWEBサイト制作の効果測定"]
```

adaとbabbageは質問をこちらの意図した通りに解釈してくれなかったようです。
curieはカテゴリを10個考えて欲しいという意図は理解してくれたようですが、出力形式の要望は無視してしまったようです。リストアップされたカテゴリも「OpenAIを利用したWEBサイト制作」というお題と関連性はあるものの、ちょっと微妙な気がします。
davinciは完璧ですね、出力形式も指示した通りで、リストアップされたカテゴリもいい感じです。

タイトル
--

次に、先の質問でdavinciが挙げた「OpenAI入門」というカテゴリで記事のタイトルを10個考えてもらいました。

投げたプロンプト
```
「OpenAI入門」のカテゴリの記事のタイトルを10個考えてください。出力形式はjsonで、以下に倣ってください。["タイトル1","タイトル2","タイトル3",...]
```

### text-ada-001
finished with 1204.262685984373ms
```
["タイトル1","タイトル2","タイトル3"]

{"name":"OpenAI", "vendor":"OpenAI", "price":"$0.00", "rank":"2", "published": "2018-08-12T00:00:00", "description":"

OpenAIの利用方法

openai.com

```


### text-babbage-001
finished with 1655.5920760035515ms
```
1. システムの構成
2. ファイルの構成
3. アプリケーションの構成
4. プログラムの実行
5. システム構成
6. ファイルの構成
7. アプリケーションの構成
8. プログラムの実行
9. システム構成
10. ファイルの構成

```


### text-curie-001
finished with 3803.539488017559ms
```
1. アルゴリズム開発のためのツール
2. プログラミングのためのツール
3. プロセス開発のためのツール
4. 人工知能のアルゴリズム開発のためのツール
5. 人工知能のプロセス開発のためのツール
6. プログラミングのためのアプリケーション開発のためのツール
7. プロセス開発のためのアプリケーション開発のためのツール
8. 人工知能のアルゴリズムの開発のためのツール
9. 人工知能のプロセスの開発のためのツール
10. 人工知能のアルゴリズムの設計・開発のためのツール
```


### text-davinci-003
finished with 10460.648914009333ms
```json
["OpenAIを使ったAI開発の基礎知識","OpenAIを使った機械学習入門","OpenAIを使った自然言語処理入門","OpenAIを使った強化学習入門","OpenAIを使った深層学習入門","OpenAIを使ったAIプログラミングの基礎","OpenAIの利用方法を簡単に理解する","OpenAIを使って超高速なAI開発を実現する","OpenAIを使ってAIプログラミングを効率的に行う","OpenAIを使ってAIソフトウェアを開発する"]
```

adaはまた質問をこちらの意図した通りに解釈してくれなかったようです。
babbageは今度は10個のタイトルを考えるということはしてくれたようです、しかしいくつか被ってます。
curie、やはり出力形式の指示は無視されてしまいました、リストアップされたタイトルもカテゴリに同じく間違いではないけどそうじゃない感があります。
davinci、完璧で(ry

記事
--

投げたプロンプト
```
「OpenAIを使ったAI開発の基礎知識」というタイトルの記事を1000文字前後のMarkDown形式で書いてください。
```

### text-ada-001
finished with 73341.14639300108ms
```
OpenAIの一人見
```


### text-babbage-001
finished with 1971.403048992157ms
```
OpenAIを使ったAI開発の基礎知識

OpenAIは、AIというものを使って、人工知能を使って開発している。まだ、まだ大きな道を走っていない。

OpenAIは、AI開発者の皆さまによるものである。

OpenAIは、人工知能を使って、開発している。

 OpenAIは、AI開発者の皆さまによるものである。
```

### text-curie-001
finished with 4220.230056017637ms
```
この記事では、「OpenAIを使ったAI開発の基礎知識」というテーマで、AI開発に必要な基本的な知識について説明します。

まず、AI開発に必要な基本的な知識としては、以下の3つが挙げられます。

1.プログラミング

2.アルゴリズム

3.データベース

また、OpenAIを使ったAI開発に必要な基本的な知識の一つとして、「プログラミング」「アルゴリズム」「データベース」を習得することが挙げられます。

OpenAIを使ったAI開発の基礎知識は以下の通りです。

・プログラミング

・アルゴリズム

・データベース
```


### text-davinci-003
finished with 33501.74427598715ms
```

# OpenAIを使ったAI開発の基礎知識

OpenAIは、人工知能（AI）開発のためのオープンソースプラットフォームです。OpenAIは、AIに関する研究と開発を推進するためのツール、ライブラリ、プロジェクトを提供します。OpenAIを使用することで、AI開発者は、より効率的な開発プロセスを行うことができます。

OpenAIのプラットフォームには、様々な機能があります。最も重要な機能の1つが、OpenAIの「gym」と呼ばれる環境です。gymは、AI開発者が機械学習を行うための環境です。AI開発者は、この環境を使用して、AIシステムを訓練することができます。

OpenAIのプラットフォームには、さらに多くの機能があります。AI開発者は、「TensorFlow」と呼ばれる機械学習フレームワークを使用して、AIモデルを構築することができます。また、「Keras」と呼ばれるライブラリを使用して、ニューラルネットワークを構築することもできます。

AI開発者は、OpenAIのプラットフォームを使用して、AIアプリケーションを開発することもできます。OpenAIのプラットフォームには、AI開発者がアプリケーションを開発するためのツールが用意されています。これらのツールを使用することで、AI開発者は、より効率的にAIアプリケーションを開発することができます。

OpenAIを使用することで、AI開発者は、AIシステムを訓練したり、AIモデルを構築したり、AIアプリケーションを開発したりすることができます。AI開発者がOpenAIを使用することで、より効率的なAI開発を行うことができます。
```

adaは内部エラーを起こしちゃった感じでしょうか、時間かけて意味不明な一言を返してくれました。
babbageは詩を返してくれました。
curie、マークダウンではあるんですが、…大事なことなので２回言ってくれた感じでしょうか？
davinci、いい感じです。

まとめ
--

今回の比較ではdabinci以外軒並みポンコツって感じに見えちゃいますが、２つの文で一つになっているような文脈を読む質問とか、指示に解釈の余地があるものはdavinci以外には難しいと言ったところで、「〜〜について教えて」というような単純明快な指示にはadaだってちゃんと答えてくれます。
ただ、ユーザーの入力をそのままプロンプトに使うならdavinci以外の選択肢はないように思えます。


各モデルの比較は[公式のPlayGround](https://platform.openai.com/playground)で行うことができます。ユーザー登録が必要ですが、GoogleアカウントもしくはMicroSoftアカウント連携で簡単に登録できます。