這禮拜花了幾小時實作了一個小外掛,目的是想要結合 OpenAI API 以及 WordPress 的排程功能,自動在每天半夜十二點幫我寫筆記,筆記內容是每天介紹一個 WooCommerce 函式的說明並附上程式碼範例,並帶有該函式的原始說明連結。
會想要做這個外掛的起因是每次寫程式在卡關時,都會查到原來 WordPress/WooCommerce 有這些內建的函式可以使用,如果可以早點知道的話就可以省下很多卡關的時間,因此想讓自己每天可以多認識一個函式,就能多一點解決問題的知識。
相較於 WordPress Code Reference 都有提供函式的具體使用範例,WooCommerce 的文件就少了這一塊,因此想說就可以請 ChatGPT 幫忙寫出這些函式的具體用法,之後就可以整理成程式碼片段來用。
有了這個想法後我就開始實作,OpenAI API 很好接,申請 API Key 用 wp_remote_request()
打不用十分鐘就搞定了,但產出實際內容後才發現原來 ChatGPT 是這麼不受控的傢伙 Orz,程式碼如下:
<?php
/**
* OpenAI
*/
function get_chatgpt_resp( $keyword ) {
$body = array(
'model' => 'gpt-3.5-turbo',
'messages' => array(
array(
'role' => 'assistant',
'content' => '介紹' . $keyword . '的用法,格式為函式名稱、函式說明、程式碼範例、註解、參考連結',
),
),
'temperature' => 1.2,
);
$body = wp_json_encode( $body );
$options = array(
'method' => 'POST',
'timeout' => 120,
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . get_option( 'openai_key' ),
),
'body' => $body,
);
$response = wp_remote_request( 'https://api.openai.com/v1/chat/completions', $options );
if ( is_wp_error( $response ) ) {
$error_message = $response->get_error_message();
} else {
$resp = json_decode( wp_remote_retrieve_body( $response ) );
$content = $resp->choices[0]->message->content;
return $content;
}
}
1. 回答重複的內容
我的提示語是這樣下的:「介紹 WooCommerc 函式的用法,格式為函式名稱、函式說明、程式碼範例、註解、參考連結,使用繁體中文且不要重複」,我希望透過格式名稱去把它回答的內容拆解為陣列,我預期它每一次都會介紹不一樣的函式。
但試了幾次之後發現到 wc_get_product()
出現頻率最高,其次是 wc_get_order()
,看來這是網路上大家最常問的兩個函式,理論上我應該可以把它講過的內容再餵給它以避免重複,但又怕一整個使用量爆表,最後還是覺得應該要先把完整的函式列表整理出來,然後隨機選取後請它介紹。
但 WooCommerce Code Reference 的分類方式不太好整理函式列表,而且除了函式外還有類別以及勾點,還好小程丟給我這個網站,剩下的可能就是要手動更新資料:
2. 回答格式不固定
我預期的回答內容會是這樣:
函式名稱:wc_get_products()
函式說明:透過使用 wc_get_products() 函式,可以取得 WooCommerce 後台系統中所有的商品。此函式具有完整的快取支援,可提高程式執行效率,並可用在任何需要儲存商品資料的情境。
程式碼範例:…
雖然得到的格式幾乎都正確,但有時候冒號會變成半形、冒號後面的文字會換行、程式碼沒有用 Markdown 的程式碼語法包住等等,於是我就要不停的根據它回答的格式做內容判斷,因為我想要拿它的函式名稱作為文章標題,格式不固定讓我有點困擾。
3. 回答內容的正確性
最嚴重的問題還是回答內容的正確性時好時壞,我遇過它寫出來的程式碼範例根本就沒有包含它所介紹的函式,或是解釋的說明完全不相關,附上的參考連結也常常 404,更不用說所處可見的簡體中文用字與用法。
實作後我對於使用 OpenAI API 自動寫筆記的想法有點冷卻了,最大原因在於我還是必須要人工去審核產出的結果,除了要先確認範例程式碼可否運作,還要檢查參考連結是否有誤,或是我應該換個想法,坦然接受現階段小雀的能力就是只能產出這樣的內容,反正我的目的是學習,有能力糾正錯誤也是很重要的一環,實際測試一陣子後再看看吧~