この記事では、エンジニア向けに「OpenAIのAPIの使い方」を解説しています。
この記事を読むことで、OpenAIが出している「文章生成」や「画像生成」などの機能を、自分の開発しているシステムに組み込むことができます。
APIとは?
- API(Application Programming Interface)とは、「異なるアプリケーション同士を繋げる仕組み」です。
- たとえば、TwitterのAPIを使えば、Twitter以外のサービスからツイートを取得したり投稿したりできます。
- また、APIを使うためには、まず「自分がサービスを利用できる証」となる「APIキー」を発行する必要があります。
- そして、OpenAIのAPIは、このAPIキーによって利用した使用量に応じて、課金される仕組みです。
- そのため、APIキーが外部に漏れると、他者によって不正に使用されて料金が発生してしまうため、他の人へ共有しないように注意しましょう。
APIの利用料金
- 現時点(2023年2月)では、最初の3か月限定で「$18までの範囲」であれば無料で利用できます。
- 「$18でどれくらい利用できるの?」と疑問に思った方もいると思います。
- 次の条件の場合、大まかに計算すると「シンプルな質問に対する最低限の返答をもらう場合」は、400回程度利用できます。
- 使用モデル:text-davinci-003
- 最大出力トークン数(max_tokens):2048
- 生成する結果数(n):1
- 最良結果選定時の候補数(best_of):1
- こちらは利用条件やそのときどきのOpenAIの価格設定によっても変動します。
- この「利用条件の説明」や「詳細な計算方法」は、次の記事で解説します。
-
ちなみに、APIの利用料金は、「Usage」のページから確認できます。
-
また、"CUMULATIVE"のボタンをクリックすると、「日次の利用料金」から「累計の利用料金」へ表示が切り替わります。
-
もしも"Free trial(無料枠)"を超えて、利用したい場合は、左側のメニューの中の「Billing > Overview」をクリックし、クレジットカードを登録しましょう。
- ちなみに、有料プランに入ると、それまで使っていた無料枠の18$分が課金されるので、注意しましょう。
- ちなみに、有料プランに入ると、それまで使っていた無料枠の18$分が課金されるので、注意しましょう。
APIの発行方法
-
それでは、ここから「OpenAIのAPIキーの発行方法」を解説します。
-
OpenAIのAPI公式サイトにアクセスします。
-
"Verify you are human"と表示されたら、ボタンをクリックします(もしも出てきた場合)。
-
ログイン画面が表示されたら、ログインします。
-
ログインが完了したら、次のような画面になると思います。
-
このページがAPIのドキュメントや設定ができるページです。
-
APIの発行を行うためには、右上のアイコンをクリックして、"View API keys"をクリックします。
-
この画面がAPIキーの管理画面です。
-
"Create new secret key"をクリックすることでAPIキーを発行できます。
-
次のようにAPIキーが発行されたら、コピーし、保存しておきます。
-
一度OKを押すと、この鍵を再度表示することはできなくなるため、ご注意ください。
-
これで、APIキーの発行は完了です。
APIの連携方法
-
次に、生成したAPIの連携方法(使用方法)を解説します。
-
ここでは、一例としてGoogle Document上で「入力したタイトルに応じた見出しを自動生成する」方法を紹介します。
-
まずGoogle Documentへアクセスし、新規のドキュメントを作成します。
-
次に、Google Apps Scriptというプログラミング言語を用いて、APIを連携したいため「拡張機能 > Apps Script」をクリックします。
-
次のような画面ができてたら、すでにあるプログラムを削除して、下記のコードを貼り付けましょう。
// 定数の定義
const MENU_NAME_MAIN_MENU = "OpenAI"
const MENU_NAME_GENERATE_HEADING = "見出し作成"
const API_URL = "https://api.openai.com/v1/completions" // APIのリクエスト先のURL
const MODEL_NAME = "text-davinci-003" // モデルの設定
const NUMBER_OF_HEADING = 5
const MAX_TOKENS = 2048 // 生成する文章の最大文字数
const TEMPERATURE = 1 // 生成する文章のランダム性(0:完全に確定的、2:完全にランダム)
const API_KEY = PropertiesService.getScriptProperties().getProperty("API_KEY") // APIキーの読み込み
// メニューを作成する関数(ドキュメント起動時に、暗黙的に実行される)
function onOpen() {
DocumentApp.getUi()
.createMenu(MENU_NAME_MAIN_MENU)
.addItem(MENU_NAME_GENERATE_HEADING, "generateHeading")
.addToUi()
}
// 見出しを作成する関数
function generateHeading() {
var doc = DocumentApp.getActiveDocument()
var selectedText = doc
.getSelection()
.getRangeElements()[0]
.getElement()
.asText()
.getText()
var body = doc.getBody()
var prompt = "「" + selectedText + "」というタイトルのブログ記事の見出しを" + NUMBER_OF_HEADING + "つ作成してください。"
const requestBody = {
model: MODEL_NAME,
prompt: prompt,
temperature: TEMPERATURE,
max_tokens: MAX_TOKENS,
}
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + API_KEY,
},
payload: JSON.stringify(requestBody),
}
const response = UrlFetchApp.fetch(API_URL, requestOptions)
var responseText = response.getContentText()
var json = JSON.parse(responseText)
// ドキュメントの末尾に追記
body.appendParagraph(json["choices"][0]["text"])
}
-
プログラムの貼り付けが終わったら、先ほどコピーしたAPI_KEYをスクリプトプロパティという領域に設定します。
- プログラムに直接記述してもいいのですが、セキュリティの観点からスクリプトプロパティに保存することをオススメします。
-
それでは、「プロジェクトの設定」をクリックし、下にスクロールし「スクリプトプロパティを追加」をクリックします。
-
「プロパティ」に"API_KEY"という文字列を、「値」にコピーしたAPIキーを入力します。
-
「スクリプトプロパティを保存」をクリックします。
-
保存が完了したら、ドキュメントのページ移動し、"OpenAI"というメニューが生成されたことを確認します。
-
もしも表示されなければ、再度画面を再読み込み(リロード)しましょう。
-
次に、本文に「記事のタイトル」を記入して、選択します。
-
その状態で、「OpenAI > 見出し作成」をクリックします。
-
ここで、人によっては、以下のように承認を求められることがあると思います。
-
その場合、「続行」をクリックします。
-
そして、Google Documentを開いているアカウントをクリックします。
-
もしも実行するソースコードに問題がなければ「詳細 > 無題のプロジェクトに移動」をクリックします。
-
問題なければ「許可」をクリックします。
-
「OpenAI > 見出し作成」を再度クリックします。
-
すると、本文の末尾に見出しが自動生成されます。
おまけ
- ここで、プログラムの中で設定できる項目について少しだけ解説します。
- こちらのプログラムでは、次の項目を設定できます。
項目 | 説明 |
---|---|
MENU_NAME_CHAT_GPT | メニューの名前 |
MENU_NAME_GENERATE_HEADING | メニュー内の見出し作成ボタンの名前 |
API_URL | APIのリクエスト先のURL(使用機能) |
MODEL_NAME | モデルの種類 |
NUMBER_OF_HEADING | 生成する見出しの数 |
MAX_TOKENS | 生成する文章の最大文字数 |
TEMPERATURE | 生成する文章のランダム性 (0:完全に確定的、2:完全にランダム) |