作者:臺師大科技系 PecuLab 蔡芸琤 (Pecu)
因目前 MyGPTs 功能是在 ChatGPT-4 付費版的解鎖功能,我所示範的 PecuLab 數位孿生 AI 及以下畫面必須是有升級到 ChatGPT-4 才看得到,而創造給別人用,要付費 OpenAI 之外,用數位孿生的人也要付費給 OpenAI
實現 PecuLab 的數位孿生 AI,可以用最直覺的 OpenAI ChatGPT UI 畫面去手工打造,目前的限制是,資料量無法批次倒入與即時串接,若想要將真的大量資料一次倒入進行訓練,就得要先學會以下技能
- 基本的 Python 語法
- OpenAI 的 ChatGPT API (Python) or RESTful API (Javascript)
但有可能 OpenAI 繼續朝全民皆可創造 MyGPT 的路線走,在不久的將來,搞不好會真的實現完全不用程式語言就可達到萬物皆可連的狀態
我在 2023/03/10 將 Fine-Tune 的訓練過程需要的範例程式公開 https://www.facebook.com/pecu.tsai/posts/10221252761215325
並在 2023/10/4 的教育資料探勘專題製作課程 (臺師大教育大數據微學程),將探索將近半年多的數位孿生AI實踐方式,首次在課堂中 Demo 並教給學生們 https://www.facebook.com/pecu.tsai/posts/10222436402845626
我所錄製的 Fine-Tune 相關的教學影片https://youtu.be/ufIpMefkrKI?si=Cmc8AOnyijjBFNWw
此影片使用到的程式碼 https://github.com/pecu/ChatGPT/blob/main/FineTuning_PecuDoc.ipynb
程式碼中的 !openai tools fine_tunes.prepare_data -f 協助我們將訓練集的 json 檔轉成 jsonl
!openai tools fine_tunes.prepare_data -f PecuFineTune.json -q
而這就是預備要將大量訓練集,餵給自己的數位孿生模型的準備工作
為了串接 ChatGPT API 至自行開發的平台中,而不是鎖在 ChatGPT 的 UI 環境下,可至 https://platform.openai.com/finetune 進行模型訓練
接下來就可以透過 RESTful API 與自訂模型互動,以下為範例程式
<script>
const apiKey = '';
const requestData = {
model: '',
messages: [
{
role: 'user',
content: 'Honney, come here. Mom would like to tell a story.',
},
{
role: 'user',
content: 'Mom, I am here. I like TAYO Heavy Vehicle.',
},
{
role: 'user',
content: 'OK. Let us read it together.',
},
{
role: 'user',
content:
"I am, I am a bulldozer I can push anything\nI can flatten bumpy roads\nvery smoothly I can push\nEven a big rock! Even sand\nIt’s not a big deal for\nI am, I am a bulldozer I can push anything\n\nI am, I am an excavator I can lift up anything\nI can lift up a pile of sand\nI can handle it very easily\nI can move sand and dig a big hole\nIt’s not a big deal for me\nI am, I am an excavator I can lift up anything\n\nWe are the strong heavy vehicles\nWe work together\nWe are the strong heavy vehicles\nWe can make anything",
},
],
temperature: 1,
max_tokens: 256,
top_p: 1,
frequency_penalty: 0,
presence_penalty: 0,
};
fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
},
body: JSON.stringify(requestData),
})
.then((response) => response.json())
.then((data) => {
console.log(data.choices[0].message.content);
})
.catch((error) => {
console.error('Error:', error);
});
</script>
就能夠串接至自製的平台中,上述程式碼的範例結果 https://pecu.github.io/myweb/LLM/llm.html
若是要訓練的資料,並不是屬於自然語言的範疇,例如是一連串的氣象資訊、澆灌紀錄、觀看影片的時間戳等量化數值
就必須要自訂情境與設計 prompt 來組合成像自然語言的描述,舉例如下:(感謝小鎮智能創辦人黃俊毓先生提供的例句)
# 對話
messages = [
{"role": "system", "content": "你是 " + obj_avatar["identity"] + " 的數位孿生, 由 " + obj_avatar["database"] + " 的資料建構而成, 名字叫做 " + name + " , 住在 " + obj_avatar["location"] + " 正在跟一位小學生 " + obj_avatar["partner"] + " 聊天" + " 你的感測器紀錄儲存在 " + obj_avatar["recording"] },
{"role": "system", "content": " 今天的日期是" + str(today) + " 天氣: " + weather + " 。滴灌澆水紀錄:" + str(recording)},
{"role": "user", "content": message}
]
# 對話
messages = [
{"role": "system", "content": "你是 " + obj_avatar["identity"] + ", 名字叫做 " + name + " , 住在 " + obj_avatar["location"] + " 正在跟您的孩子 " + obj_avatar["partner"] + " 聊天。" },
{"role": "system", "content": " 今天的日期是" + str(today) + " 天氣: " + weather },
{"role": "user", "content": message}
]
# 對話
messages = [
{"role": "system", "content": "你是 " + obj_avatar["identity"] + ", 名字叫做 " + name + " , 住在 " + obj_avatar["location"] + " 是" + obj_avatar["partner"] + " 的 ESG 管理師。" },
{"role": "system", "content": " 今天的日期是" + str(today)},
{"role": "user", "content": message}
]
其他 prompt 的產出範例可參考
用 ChatGPT Python API 將 Line 上的聊天對話變成自己的感受紀錄
需要理解如何開始學習 ChatGPT API 可參考
只要會寫 Python 的人,都能簡單上手的 ChatGPT Python API
如果是要理解我對 AI 的詮釋角度,可參考 https://youtu.be/6-824buwwmo?si=oqi6Qba5iPYc-YdB