延續前一篇透過 n8n 每日發送氣象資訊至 Discord,我再改成在發送前先用 ChatGPT 依據天氣寫一段天氣小叮嚀後再發送至 Discord。
接續 Step 6 整理 API 資訊那邊,我把抓回來的 API 資訊整理成這樣:
const location = items[0].json.records.location[0]; const weather = location.weatherElement; const wx = weather.find(el => el.elementName === "Wx").time[0].parameter.parameterName; const pop = weather.find(el => el.elementName === "PoP").time[0].parameter.parameterName; const minT = weather.find(el => el.elementName === "MinT").time[0].parameter.parameterName; const maxT = weather.find(el => el.elementName === "MaxT").time[0].parameter.parameterName; const CI = weather.find(el => el.elementName === "CI").time[0].parameter.parameterName; return [{ json: { message: `今日台北市天氣${wx},降雨機率:${pop}%,氣溫:${minT}°C - ${maxT}°C,感覺${CI}` } }];
主要是不換行並調整一下語句。
Step 7 串接 OpenAI
新增節點並選擇 OpenAI,然後選擇 Message a model,接著做以下的設定,首先要先跟你建立好的 OpenAI API 串接,點選 Credential to connect with 後貼上 API key,API key 不知道怎麼取得的可以參考這篇。
接著參考以下設定,Resource 選 Text,Operation 選 Text a model,Model 的話可以自由選,我是選最基本的 GPT-3.5-TURBO,如果夠用也就不用選更好的模型了。
接著就是輸入你的 prompt 了,第一個訊息設定 Role 是 System,這裡是用來定義角色的。
然後再新增一個訊息,設定 Role 是 user,這是要跟 ChatGPT 對話的內容,並貼上如下的內容:
以下是一段天氣資訊,請保留天氣資訊並整合進句子內,包含天氣狀態、溫度、降雨機率、舒適度等,並在最後面依據該資訊轉換成一句口語化提醒句子:
{{ $json.message }}
記得這段因為有用到前一步傳來的資訊,要把右上角那邊切換成 Expression,才能正常取得你要給的資訊。
Step 8 傳送資訊至 Discord
由於 OpenAI 回傳的 API 格式不一樣了,所以要不是載處理一次 API 格式,不然就是直接從 OpenAI 回傳的格式處理,我這邊改成直接處理 OpenAI 的 API 格式,所以就會變成這樣,選擇 Http request:
-
Method:
POST
-
URL: Discord Webhook URL(從 Discord 複製來的)
-
Body Content Type:
JSON
-
Body Parameters:
- Name: content
- Value: {{ $json["message"]["content"] }}
成功的話就能得到這樣的結果: