🐱
OpenAI APIを使用したアプリを構築してみた
OpenAIの公式ホームページにAPIの使用方法が書かれていたので、サンプルアプリと共に構築してみました。
前提条件
- Pythonがインストール済み。インストールしていない人はこちらから。
アプリのコードを用意する
下記のリポジトリをクローンしてアプリファイルをインストールします。または、公式サイトからzipファイルをダウンロードします。
git clone https://github.com/openai/openai-quickstart-python.git
APIキーを追加する
クローンしたリポジトリに移動して、新規の.envファイルを作成します。
% cd openai-quickstart-python
% cp .env.example .env
作成できたか確認します。
※ユーザー名は隠しています。
% ls -l
total 56
416B Mar 12 16:57 .
160B Mar 12 16:37 ..
213B Mar 12 17:04 .env
162B Mar 8 12:06 .env.example
115B Mar 8 12:06 .gitignore
1.0K Mar 8 12:06 LICENSE
1.2K Mar 8 12:06 README.md
96B Mar 12 16:57 __pycache__
940B Mar 8 12:06 app.py
413B Mar 8 12:06 requirements.txt
128B Mar 8 12:06 static
96B Mar 8 12:06 templates
192B Mar 12 16:49 venv
公式ページでAPIキーが作成できるので、そこでキーを作成します。
それから、そのキーを新規で作った.envファイルに追加します。
% code .env
FLASK_APP=app
FLASK_ENV=development
# Once you add your API key below, make sure to not share it with anyone! The API key should remain private.
OPENAI_API_KEY=ここにキーを入れる
アプリを実行する
下記のコマンドを実行して、アプリを起動させます。
pythonコマンドはバージョンによって変わります。
python3 -m venv venv
. venv/bin/activate
pip3 install -r requirements.txt
flask run
* Serving Flask app 'app' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 177-654-623
アプリが起動出来ました。
http://127.0.0.1:5000/ をブラウザで開くとアプリを見ることができます。
動物の名前を入力すると、スーパーヒーローのような動物の名前を3つ提案してくれます。
以上でアプリ構築は完了です。
次はコードについて見ていきます。
コードの確認
app.pyファイルを開くと、コードが確認出来ます。
response = openaiの所で実際のAPIリクエストを送っています。
% code app.py
import os
import openai
from flask import Flask, redirect, render_template, request, url_for
app = Flask(__name__)
openai.api_key = os.getenv("OPENAI_API_KEY")
@app.route("/", methods=("GET", "POST"))
def index():
if request.method == "POST":
animal = request.form["animal"]
response = openai.Completion.create(
model="text-davinci-003",
prompt=generate_prompt(animal),
temperature=0.6,
)
return redirect(url_for("index", result=response.choices[0].text))
result = request.args.get("result")
return render_template("index.html", result=result)
def generate_prompt(animal):
return """Suggest three names for an animal that is a superhero.
Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: {}
Names:""".format(
animal.capitalize()
)
因みに私はプログラミングには苦手なので、ChatGPTにコードの内容を解説してもらいました。
結構分かりやすく解説されていますね。
1行目: os モジュールをインポートします。このモジュールは、OSに依存する機能にアクセスするために使用されます。
2行目: openai モジュールをインポートします。このモジュールは、OpenAIのAPIにアクセスするために使用されます。
3行目: Flask、redirect、render_template、request、url_for をそれぞれインポートします。これらは、Flaskフレームワークの機能を使用するために必要です。
5行目: Flaskアプリケーションを作成し、app変数に格納します。
6行目: openai.api_key 変数を設定します。APIキーは、OpenAI APIにアクセスするために必要です。
8行目: / というURLに関連付けられた関数 index を定義します。GET と POST メソッドの両方を許可しています。
10-14行目: request.method が "POST" である場合、フォームから入力された animal の名前を取得し、OpenAI APIを使用してその名前に関連する3つのスーパーヒーロー名を生成します。生成された名前のうち、最初の名前を含むURLにリダイレクトします
16-18行目: request.args.get("result") を使用して、前回のリクエストで生成された結果を取得します。
20-22行目: generate_prompt 関数を定義します。この関数は、与えられた動物に対して3つのスーパーヒーロー名を生成するためのプロンプトを返します。
23行目: animal の名前を大文字に変換し、プロンプト文字列内に挿入されます。
以上で今回のやってみたは終了となります。
Discussion