3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロもくチャットAdvent Calendar 2023

Day 24

ChatGPT使ってめんどくさい毎日の献立をたててもらおう

Posted at

はじめに

本記事はプロもくチャット Adevent Calendar2023の24日目です

毎日の献立を決めるのがめんどくさいという主夫・主婦の方へ

ChatGPTに何個か要素入れて献立と作り方教えてもらおう

早速作っていく

Laravel使いましたがそこは割愛

ChatGPTのAPI設定

APIキーの作成 ※耳タコですがシークレットキーは適当に公開しないように
スクリーンショット 2023-12-23 20.38.40.png

Laravel側の実装

ChatGPTが提供しているライブラリが合ったのでcomposerで入れてみる(今回だけのためなのでsailのパスは通してない)
https://platform.openai.com/docs/libraries/community-libraries

$ ./vender/bin/sail composer require openai-php/client

実際のプログラム
ルート

web.php
Route::get('/recommend', [RecommendController::class, 'index']);
Route::post('/recommend', [RecommendController::class, 'recommend']);

コントローラー

RecommendController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use OpenAI;

/**
 * Class RecommendController
 * @package App\Http\Controllers
 */
class RecommendController extends Controller
{

    /**
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function index()
    {
        return view('recommend');
    }

    /**
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function recommend(Request $request) {
        // ChatGPTにリクエスト送信する
        $chatGptApiSecretKey = env('CHAT_GPT_API_SECRET_KEY');
        $client = OpenAI::client($chatGptApiSecretKey);
        $prompt = $request->category . 'でおすすめの献立を' . $request->count . '人前での作り方を教えてください';

        $result = $client->completions()->create([
          'model' => 'text-davinci-003',
          'prompt' => $prompt,
          'max_tokens' => 1000
        ]);

        // ChatGPTからのレスポンスを取得する
        $response = $result['choices'][0]['text'];
        return view('recommend', compact('response'));
    }
}
recommend.blade.php
<html>

<head>
    <meta charset='utf-8' />
</head>

<body>
  <div>食べる人数と種類を選択してください</div>
  <form method="POST">
      @csrf
      <select id="count" name="count">
          <option value="1">1人前</option>
          <option value="2">2人前</option>
          <option value="3">3人前</option>
          <option value="4">4人前</option>
      </select>
       
      <select id="category" name="category">
          <option value="和食">和食</option>
          <option value="中華">中華</option>
          <option value="洋食">洋食</option>
      </select>
       
      <button type="submit">送信</button>
  </form>

  @if(isset($response))
    <div>{{ $response }}</div>
  @endif
  </body>
</html>

ライブラリ入れたことでかなり簡単にAPI呼び出し出来ました。
max_tokensはリミット設定しておくことで膨大なデータが返却されないようになります。(今回はテスト用なので結構小さめに設定しました)

結果

入力画面
とりあえず1から4人前、和食・中華・洋食で選択出来るように作成
スクリーンショット 2023-12-23 21.57.34.png

レスポンス画面
スクリーンショット 2023-12-23 22.00.46.png

なんかちょっと見づらいけど結構美味しそうなやつ出てきた

まとめ

今回はデザインは全くやってないですが、機能はこんな感じでもう少し選択肢を増やしていけばより自分が望むような献立を返してくれそうなのでまた今度試してみます

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?