iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
自我挑戰組

我推的Laravel系列 第 30

【Day-29】我推的Laravel-實戰篇-Line Bot with OpenAI - Part 2

  • 分享至 

  • xImage
  •  

簡介

上篇使用Laravel+Render+Line Bot,確認可以從使用者端取得輸入並回傳
由於這裡不使用DB(用DB就有更多應用),所以為了讓Bot更加豐富
這裡注入靈魂(現在很紅的Open AI API)吧

註冊Open AI

需要注意的是,這裡Open AI API,並不是每個月給免費使用次數
而是註冊後給一個免費金額額度,期限到或使用完就沒了
進入OpenAI官網註冊後
這裡產生並複製Key

Laravel

安裝Open AI Sdk for PHP

composer require openai-php/client

.env

OPEN_AI_KEY=你的KEY

config\openai.php

<?php
return [
    'open_ai_key' => env('OPEN_AI_KEY', null)
];

app\Services\OpenAIService.php

<?php 
namespace App\Services;

use OpenAI;

class OpenAIService
{
    public function getText($text){
        try {
            $openAIKey = config('openai.open_ai_key');

            $client = OpenAI::client($openAIKey);
            $response = $client->chat()->create([
                'model' => 'gpt-3.5-turbo-0301',
                'messages' => [
                    ['role' => 'user', 'content' => $text],
                ],
            ]);
            $result = $response->toArray();
            return $result['choices'][0]['message']['content'];
        } catch (\Throwable $th) {
            return 'Open AI 回應錯誤(可能錯誤:KEY已過期或失效),您的輸入:' . $text;
        }
    }
}

app\Services\LineService.php

上次的Service改寫一下:

// $replyText = $message->getText();
$openAIService = new OpenAIService();
$replyText = $openAIService->getText($message->getText());

結果

之前免費Key已經到期了,所以用之前成功畫面
https://ithelp.ithome.com.tw/upload/images/20231014/20163286NdAQe9FvfS.png

Cron-job

之前提到Render一陣子不活躍就會休眠,再次啟動要一段時間
如果在Line Bot上就是會很久甚至不回覆了

這時候可以用Cron-job這個網站
用法也簡單暴力,就是每隔一段時間去訪問你貼的網址,讓網站保持活躍
https://ithelp.ithome.com.tw/upload/images/20231014/20163286PY0OEgJeAW.png
大概每五分鐘呼叫一次差不多

缺點是Render也有使用時間,如果一兩個專案還行,更多就會超過了
另外就是失敗會寄信通知你,似乎沒辦法關閉通知

總結

如果成功恭喜你!可以分享你的結果(Line Bot)和這篇文章給你認識的所有朋友
這也是實戰篇最後一篇,希望你能從這三十天的鐵人文章中認識Laravel
明天是總結篇,也是這系列最後一篇,大部分是老人結尾聊天,無聊的話可以看看>.0


上一篇
【Day-28】我推的Laravel-實戰篇-Line Bot with OpenAI - Part 1
下一篇
【Day-30】我推的Laravel-總結篇
系列文
我推的Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言