OpenAI API(beta)を使ってThis is a penの続きを聞いてみる


# はじめに

OpenAI社がAPIの[beta版](https://beta.openai.com/)を公開して、その利用申請を出していましたが、今日アクセス可能の通知が来ましたのでどんなものなのか早速使ってみることにしました。話題のGPT-3が使われているAPIです。

https://beta.openai.com/

Waitlistというところにメールアドレス登録して３ヶ月位は経ってると思います。記事内でも書いていますが、既に有料の価格表も書かれているので、これから順次開放され、おそらく近い将来には正式リリースとなるのではないかと思います。

## Beta版（トライアル）利用申請の方法

現在（2021年４月16日）では、OpenAIのAPIは申請したあとで順次使えるようになっているようです。この利用申請は、[トップページ](https://beta.openai.com/)にある

![Screenshot_2021-04-16_06-10-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/cdfba335-e9d9-635c-c80e-c43612e41afd.png)

上のボタンを押した先で登録できます。登録の方法は[こちらの方](https://qiita.com/katot/items/93add6b13a36b0a808e1)が詳しく解説されておりますので是非ご参照ください。

# 重要な追伸（しばらく使ってみた感想）

あれからすこしプレイグラウンドでGPT-3を試してみてますが、

**とてつもなくヤバイ**

です。AIホラーなんてもんじゃないです。まじで背筋が凍るくらい意訳が効いた要約出してきます。試しに自分で書いた文書を入れてみたら、書いた本人より的確な文章を返してきたりします。信じられない性能です。これはこの分野に興味がある人は**絶対トライ**したほうが良いです。怖いよほんと、なんで入力してない事知ってるんだろう・・・。日本語版が待ち遠しいですね。

# OpenAI APIとは？

APIのドキュメントから、まずはイントロダクションの部分を読んでみます。

>Introduction

>Our API provides a general-purpose “text in, text out” interface, which makes it possible to apply it to virtually any language task. This is different from most other language APIs, which are designed for a single task, such as sentiment classification or named entity recognition.

>To use the API, you simply give it a text prompt (the text-based input or "instructions" you provide to the API) and it will return a text completion, attempting to match the context or pattern you gave it. You can “program” it by crafting a description or writing just a few examples of what you’d like it to do. Its success generally varies depending on how complex the task is. A good rule of thumb is thinking about how you would >write out a word problem for a middle schooler to solve.

>Keep in mind that the models' training data cuts off in October 2019, so they may not have knowledge of current events. We plan to add more continuous training in the future.

英語だし、なんのこっちゃわからんです。

だから、早速使いましょう！

# OpenAI APIを使ったテキストの要約

APIのExamplesのページにはPlaygroundへのリンクが右端についてます。

![Screenshot_2021-04-15_13-20-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/9f38e215-c8ee-65ec-55d0-209ff6553031.png)

↑コレです。コレの右側のボタンを早速クリックして、上のIntroductionを放り込んでみます。

テキストボックスは文字を打ち込む場所だとして、右側には何やらいくつかのメニューがあります。
![Screenshot_2021-04-15_13-25-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/6397fa6a-bf94-9734-0117-cdbba88cfe8d.png)
Engineの部分にはいくつか指定可能なものがあるみたいですが、デフォルトでdavinciとなっているのでこのままでやってみます。

上にヘルプがでてdavinciが最もcapable（有能という訳で良いのだろうか・・・）ですと出てます。 

とりあえずクエリ送信してみましょう。

![Screenshot_2021-04-15_13-36-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/9095c96d-256b-cba9-5de2-d1cba450b576.png)

入力にはすこし注意点があります。上のテキストボックスの入力は右のメニューでStop Sequencesのところで改行が指定されているので、空白を除外して改行のみで文章を分けて入力しています。何もない改行の部分があるとエラーになりました。このStop Sequencesは複数指定することも可能のようです。

それではSubmitで送信してみます。すると、

![Screenshot_2021-04-15_13-42-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/d3af93e7-c1ee-4d70-e070-424876876a14.png)

こんな感じで、入力した文字の下に要約文が表示されます。

## APIが返してきた要約

APIが返してきたAPIドキュメントのIntroductionの要約

- **The API is currently available in English and Spanish, but we plan to add more languages in the future.**

それをさらに**Google翻訳**します。

- **APIは現在英語とスペイン語で利用できますが、将来的にはさらに多くの言語を追加する予定です。**

原文の翻訳は[ここ](#introduction%E5%85%A8%E6%96%87%E3%81%AEgoogle%E7%BF%BB%E8%A8%B3%E7%B5%90%E6%9E%9C)を見てください。

## 要約が有能すぎる


*え？*



上の文章そんな事書いてたっけ・・・、英語とスペイン語が使えるとは書いてないような・・・

有能すぎてビビります。要約といっても単純な要約ではなく、もはや別次元に到達してるようです。AIはすでに行間を読んでるようです。

もしかして、API試しに使ってるの日本人だってバレてたりして、怖くなってきます。２０２１年はAIホラー元年となるかも。

プレイグラウンドで遊んでるだけじゃ面白くないので、次はPythonから利用することをやってみることにします。

**追記：ところで実際に使えるのだろうかと思って調べましたが、ドキュメントには書いてなさそうですが、なんかスペイン語が使えるみたいな記事は出てきました。もし本当にスペイン語が使えるのなら、この出力は一体！？（真偽不明）**

# Pythonからの利用

## APIkeyの取得
とりあえず、Playgroundで十分に最新のAIホラーを体験したので、お次はPythonから利用してみます。

APIのHPのメニューから今度は**Developer quickstart**のページを開きます。

一番上のところにYour API keyとあります。

![Screenshot_2021-04-15_13-55-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/e1546c76-88d2-9360-0257-6ebeae5a7f04.png)

そこのReveal API keyボタンを押すとAPI keyが見える仕組みのようです。これは実にすばらしい仕様ですね。過去最高にお手軽です。

Googleとかもこんな感じで取得できれば早いのに・・・

というわけで、ここで表示するわけにはいきませんが、API keyを一発で取得できました。

## 環境構築

さらに下にスクロールしていくと**Python bindings**という項目が出てくるのでそこを読み進めます。

```
$ sudo pip3 install openai
```

環境構築終。

こっちも楽すぎてビビります。

# さっそくPythonから利用してみる

説明にあるとおりに簡単なプログラムを作成してみます。

```Python:sample.py
import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(engine="davinci", prompt="This is a pen", max_tokens=5)
print(response)
```

これをローカルにsample.pyとして保存しました。

## 謎の例文"This is a pen"の続きを聞いてみる

説明サイトでは入力はThis is a testになっていますが、前から気になっていた日本の中学校で最初に習う使いどころのわからない謎の英文

**This is a pen**

に変えてあります。AIの力によってこの例文の続きを聞こうという寸法です。

responseは深く考えずとりあえずprint()してみることにします。

## Pythonスクリプト経由で実行

説明サイトではAPIキーを環境変数から読み出して使ってるみたいなので同じようにやってみます。
OPEN_API_KEY="取得したキー"を先頭につけてコマンドプロンプトからこのsample.pyを実行します。

```bash:コマンド
$ OPENAI_API_KEY="<APIkey>" python sample.py
```

そうすると次のようなものが表示されました。

APIkeyは毎回指定しなくても実行できます。その方法は[こちら](#apikey%E3%81%AE%E6%B0%B8%E7%B6%9A%E5%8C%96)です。

```bash:実行結果
{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": " from one of the world"
    }
  ],
  "created": 161846-----,
  "id": "cmpl-2ooZ3omwAZYf9I*********",
  "model": "davinci:2020-05-03",
  "object": "text_completion"
}
```
(念の為一部改変してます。)


ひとまずはjsonのような形でレスポンスが帰ってくるようです。

"choices" -> 0番目 -> "text"
のところを見るとそこにAIからの返答があって

" from one of the world"

とあります。ということは


## AIが出した謎の例文の続き

- **This is a pen from one of the world**

というのがOpenAIが返してきた、This is a penの続きだったようです。ちょっと関心するというか、感動的です。賢いです。やはり想像を超えてきました。

なんとなく、これから物語が始まる壮大な感じがします。

max_tokensを変えると返答の長さは自由に変えれるみたいです。いろいろ違う回答が出たりして結構面白いです。


## そのうち有料化されるらしい

今回はフリートライアル期間の利用でしたが、有料化されるらしいです。その場合の料金は次のように表示されていました。

![Screenshot_2021-04-15_14-35-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232003/26a50b35-94d0-59ab-03bf-197b5cb7fdb6.png)

高いのか安いのか、なんとも言えない価格ですが、めちゃくちゃ高いってことではなさそうなので、面白そうでは有ります。今回紹介したのはほんの一例で、聞き方を変えれば、クイズに答えるとか、もっともっとすごいことが出来るみたいなので、応用を考えてみるのも面白そうです。

# まとめ

こんな感じでOpenAI APIは恐ろしく単純にすぐに使えます。今はbeta版でトライアルは無料ということですが、将来は有料になるみたいです。是非皆さんも無料で体験できるAIホラー体験してみてください。

これ学校の読書感想文に応用できるんじゃ？もし日本語版がリリースされたら、お子さんが居る方とか、小学生本人とか、夏休みにでもだれか試してみてほしいです。多分先生の採点通過しますよねこれ。

えらい世の中になってきました。

この記事が誰かのお役に立てれば幸いです。

# おまけ

## Introduction全文のGoogle翻訳結果

私たちのAPIは、汎用の「テキスト入力、テキスト出力」インターフェースを提供します。これにより、事実上すべての言語タスクに適用できます。 これは、感情の分類や名前付きエンティティの認識など、単一のタスク用に設計された他のほとんどの言語APIとは異なります。

APIを使用するには、テキストプロンプト（APIに提供するテキストベースの入力または「指示」）を指定するだけで、指定したコンテキストまたはパターンに一致させようとして、テキストの補完が返されます。 説明を作成するか、実行したいことのほんの数例を書くことで、それを「プログラム」することができます。 その成功は一般に、タスクの複雑さによって異なります。 経験則として、中学生が解決する文章題をどのように書き出すかを考えることです。

モデルのトレーニングデータは2019年10月にカットオフされるため、現在のイベントに関する知識がない可能性があることに注意してください。 今後も継続的なトレーニングを追加する予定です。 

---

本文で示した要約があまりにも想像を超えてきたので忘れていました。ｗｗ

要約と言うより、もはや文章から新しい短文作ってますよね。

## APIkeyの永続化

取得したAPIkeyをプログラムに渡す方法として、

```bash:
$ OPENAI_API_KEY="<APIkey>" python sample.py
```
のように毎回、実行時に環境変数を渡す方法も有りますが、コマンドに打つと共用パソコンの場合、別のユーザーから見える場合も有りますし、毎回入力するのは面倒です。

そこで環境変数を設定すれば良いわけですが、これは

```bash:環境変数の設定
$ export OPENAI_API_KEY="<APIkey>"
```
という風にexportコマンドを実行すれば設定できます。ただしコレでは、ログインし直すたびに新しく設定する必要が有ります。
そこで、ログインの度に実行される`~/.profile`というファイルにこの記述をすれば、これらの手間が省けます。`~/.profile`の最後尾に

```bash:~/.profile
export OPENAI_API_KEY="<APIkey>"
```

と書き加えれば、ログインするたびに環境変数が自動でセットされます。この状態なら上記のAPIkeyの指定なしで

```bash:環境変数無しで実行できる
$ python sample.py
```
という風に呼び出すことが可能になります。