LoginSignup
2
1

ChatGPTを使った献立アプリを作ってみた

Posted at

はじめに

前回まではChatGPTを使ったクイズアプリを作成しました。
今回はその応用として、キーワードを入力したらそれに基づく献立を提案してくれる献立アプリを作っていきたいと思います!

クイズアプリについては以下の記事でまとめています。
https://qiita.com/shake12/items/7a33cdc1bc105be16c3b

事前情報

  • OpenAI / ChatGPT 初心者
  • 献立アプリは React + Flask で作成

開発環境

  • macOS Sonoma 14.4
  • Visual Studio Code 1.87.2
  • Python 3.10.6
  • Flask 2.3.2

プロンプト準備

  • 前の記事で紹介した以下の形式で準備していく
    model:今回は gpt-3.5-turbo を使用
    messages:ChatGPTに投げる質問を記載する
    • role:どこからの問い合わせなのかを明記する
      • user:人間からの問い合わせ
      • assistant:GPTからの返答(以前の応答を保存するのに役立つ)
      • system:ChatGPTに与える役を設定するために使用
    • content:問い合わせや返答の文章を記載する

キーワードに対応した献立を返却するプロンプト

今回の献立を提案するアプリでは、朝食・昼食・夕食の3色についてプロンプトを用意します。

「献立を作成して」というプロンプトだと献立だけではなく材料や作り方も提案してくれたりします。
このアプリでは献立名のみ分かれば良いので「献立名のみ」という表記を加えています。

↓ 例は朝食のものになります(昼食・夕食も同様に作成)

menu.py
@app.route("/breakfastMenu")
def breakfastMenu():
  openai.api_key = os.environ["OPENAI_API_KEY"]

  req = request.args
  keyword = req.get("keyword")

  BREAKFAST_MENU_PROMPT = """
  プロの料理人としての依頼です。家庭で作れる{}を使った簡単な朝食の献立を作成して"献立名のみ"を教えてください。
  """

  response = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=[
          {"role": "user", "content": BREAKFAST_MENU_PROMPT.format(keyword)},
      ],
  )

  return response.choices[0]["message"]["content"].strip()

実行結果

■ breakfastMenu
/breakfastMenuを実行した結果です。

http://localhost:3001/breakfastMenu?keyword=キャベツ

/breakfastMenu実行結果.png

■ lunchMenu
/lunchMenuを実行した結果です。

ttp://localhost:3001/lunchMenu?keyword=にんじん

/lunchMenu実行結果.png

■ dinnerMenu
/dinnerMenuを実行した結果です。

http://localhost:3001/dinnerMenu?keyword=トマト

/dinnerMenu実行結果.png

献立アプリの動作

「ちがう献立を表示」ボタンも設けているので献立の再検索が可能になっています!

menuApp.gif

さいごに

前回作成したクイズアプリを応用して、ChatGPT APIを使った献立アプリも作ってみました!
3つのAPIを叩かないような上手いやり方があるかと思うので今後はそこの改善をしていきたいです。

参考サイト

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1