非エンジニア向けChat GPTを一気に大量に回すバッチ処理を行う方法

:::note
正確には「Chat GPT」ではなく、「OpenAI APIのGPTモデル」です。
:::

## はじめに

アノテーション、テキストラベリング、その他同じようなタスクで大量にGPTの処理が必要なとき、 **バッチ処理** を使うと使用料が約半額になり、手間なくできます。

この手順を、僕の自作アプリの使い方を含めてまとめます。

## 手順
### 1. プロンプトを用意する。
SystemプロンプトとUserプロンプトを用意します。

この役割分担は個々に任されていますが、僕は
- Systemプロンプトに**GPTへの指示**を
- Userプロンプトに**処理対象**を

書いています。

例えば、論文のアブストラクトを与えてフィルタリングしたいというとき、僕は

```:Systemプロンプト
The user will send you an abstract of an academic paper. Answer to these questions:
1. Is the paper an interview research?
2. Does the interview focus on game developers?
 
<example>
Title:<title />

Reason:
1. <reason-for-1 />
2. <reason-for-2 />
  
Answer:
1. <true-or-false />
2. <true-or-false />
</example>
```

どのようにプロンプトを作るかは各々のプロンプトセンスに任せます。この通りではなくともいいです。

```:Userプロンプト
Title:
TITLE

Abstract: 
ABS
```

のようにしています。`TITLE`と`ABS`は後々使うアプリで置換されます。

### 2. 置換用CSVファイルを作成する。
CSVファイルは、まあ、エクセルのようなものです。

エクセルやGoogle Spread Sheetを使い、このように、一行目に置換する文字列、二行目以降に何に置換するかを書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/f069bac2-e391-45eb-9221-5a94db26567a.png)
（著作権保護のため内容を黒塗りにしています）

そして、[CSVに保存します](https://support.microsoft.com/ja-jp/office/-%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%BD%A2%E5%BC%8F-txt-%E3%81%BE%E3%81%9F%E3%81%AF-csv-%E3%81%A7%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B-3e9a9d6c-70da-4255-aa28-fcacf1f081e6#:~:text=%5B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%5D%E3%80%81%5B%E5%90%8D%E5%89%8D%E3%82%92,%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%BD%A2%E5%BC%8F%E3%82%92%E9%81%B8%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82)

### 3. バッチファイルを作成する
僕のアプリをぜひお使いください: https://konbraphat51.github.io/OpenAiBatchCreator/

SystemプロンプトとUserプロンプトを入力したら、 `UPLOAD CSV`で2で作ったcsvをアップロード（といっても外部に送信されるわけではなく、皆様のPC上で完結する処理を行っています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/8d78c898-7611-4829-b3e0-4109c147745d.png)

下のパラメーターにこだわりがなければそのままにしておいて大丈夫です。

モデルはここから選択できます: https://platform.openai.com/docs/models

そして`CREATE`

このような内容の`openai_batch.jsonl`がダウンロードされるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/effb644c-66d2-4380-858a-80b5d5c510d9.png)


### 4. OpenAI APIにバッチ処理させる

OpenAI APIのアカウントを作成していない方は[作成してください](https://viva-eureka.com/blog/eureka-dx/13056/)

OpenAI ダッシュボードのBatchにアクセス: https://platform.openai.com/batches
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/09258031-2e57-46f3-9f62-d4eaffd93cd8.png)

右上の緑の`CREATE`ボタンから`Create a batch`パネルが出てくるので、3で作成した`openai_batch.jsonl`をアップロードして、`CREATE`（パネル下側）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/6be0847d-bd8f-461a-a1b9-ad533ca4d0dc.png)

完成したら `Download output`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/cbf49ae2-bf65-4733-8294-f4b2b0fdf17b.png)

このように結果ファイルが得られます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/99c5b9d2-325f-4cc7-988e-b0279238fd72.png)


### 5. 結果をエクセルで表示する
結果は4で得られた`.jsonl`ファイルにもありますが、これをエクセルで表示したい場合は

再び僕のアプリにアクセス: https://konbraphat51.github.io/OpenAiBatchCreator/

上の`READ RESULT`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/ae4d6761-51ee-4c88-813e-35644d47b39b.png)

`UPLOAD RESULT .JSONL`で4で得られたファイルをアップロード（実際には、他所のサーバーに送信されることはなく、皆様のPC内で完結する処理が開始します）

完成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/6c443797-f6ea-4b04-9deb-067a633f3c2f.png)