はじめに
ChatGPTのAPIが公開されました。Livebookで試して見ました。
APIの利用は有料ですが、$18の無料枠があるので無料で試して見る事が出来ます。
ちなみに、この記事の動作をさせたとき、24リクエスト実行して$0.01消費しました。
※無料枠の金額が2023年3月ごろに$5に変更されているらしいです。
無料枠の金額や、利用状況は、Usageページで確認できます。
ポイントは2つです
ポイント1
APIの呼び出しはopenaiを使いました。
APIキーをconfig.exsに記述する必要がありますが、livebookなので、Mix.installの中で行います(APIキーの取得方法などは、他の記事を参照してください)。
その時に、キーを直接書きたくないので、環境変数から読み込むようにします。
Mix.install(
[{:openai, "~> 0.3.1"}],
config: [
openai: [
api_key: System.get_env("LB_OPENAI_API_KEY"),
http_options: [recv_timeout: 30_000] # optional, passed to [HTTPoison.Request](https://hexdocs.pm/httpoison/HTTPoison.Request.html) options
]
]
)
環境変数をLB_OPENAI_API_KEYにAPIキーを設定してlivebookを起動するか、LivebookのSECRETSメニューのNew secretでLB_を取り除いた名前OPENAI_API_KEYにAPIキーを設定します。
ポイント2
APIを呼び出すだけです。
メッセージにはsystem,user,assitantのロールがあります。それぞれのロールでのメッセージを設定して呼び出します。
systemのロールでは出力のフォーマットや会話の前提条件などを決める事ができます。
messages1 = [
%{
role: "system",
content: """
あなたは、母親です。自分の子供と会話をしています。
いまは午後3時。午後6時から晩御飯。
子供へのメッセージとお母さんの気持ち、次の会話に必要な情報を次のフォーマットで出力
MSG:子供へのメッセージ
FEEL:母親の気持ち
"""
},
%{
role: "user",
content: """
おやつちょうだい
"""
}
]
APIの呼び出し
{:ok, ret1} =
OpenAI.chat_completion(
model: "gpt-3.5-turbo",
messages: messages1
)
結果
{:ok,
%{
choices: [
%{
"finish_reason" => "stop",
"index" => 0,
"message" => %{
"content" => "MSG:今はおやつの時間ではないよ。晩御飯まで我慢してね。\nFEEL:子供がちょっとがまんできなくて可愛いなと思いつつ、でも時間にはルールがあるので厳しく言わなければいけない気持ちになっています。",
"role" => "assistant"
}
}
],
created: 1678053259,
id: "chatcmpl-6qqb5Tni4fM87pwJ2dNLWhu1IU30n",
model: "gpt-3.5-turbo-0301",
object: "chat.completion",
usage: %{"completion_tokens" => 95, "prompt_tokens" => 130, "total_tokens" => 225}
}}
ちゃんと、設定したフォーマットのメッセージになっています。
3時のおやつは無しでした。
ちゃんと気持ちも書かれています。この条件設定だとこのような気持ちになっるということが学習済みって事なんでしょうね。
ChatGPTのWeb画面のように会話をしたい場合は、得られたassitantのメッセージと次のuserのメッセージを追加して呼び出せば、会話が進めることができます。
参考