數位孿生 AI 實踐,以 MyGPTs 與 ChatGPT API 為例

Pecu Tsai
9 min readNov 10, 2023

--

作者:臺師大科技系 PecuLab 蔡芸琤 (Pecu)

PecuLab 的數位孿生 AI

因目前 MyGPTs 功能是在 ChatGPT-4 付費版的解鎖功能,我所示範的 PecuLab 數位孿生 AI 及以下畫面必須是有升級到 ChatGPT-4 才看得到,而創造給別人用,要付費 OpenAI 之外,用數位孿生的人也要付費給 OpenAI

登入升級版的ChatGPT帳號後,可在自己的個人帳號區看到My GPTs
就可直接用手動貼入文字的方式開始訓練自己的GPT

實現 PecuLab 的數位孿生 AI,可以用最直覺的 OpenAI ChatGPT UI 畫面去手工打造,目前的限制是,資料量無法批次倒入與即時串接,若想要將真的大量資料一次倒入進行訓練,就得要先學會以下技能

  1. 基本的 Python 語法
  2. 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 進行模型訓練

這是預備要訓練自己的模型的畫面,按下Create new就可直接開始
此時會看到需要上傳已經準備好的jsonl檔,而非json格式

接下來就可以透過 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

內容尚未調教完畢的結果,用以示範 MyGPTs 與嵌入自製平台的使用差異

若是要訓練的資料,並不是屬於自然語言的範疇,例如是一連串的氣象資訊、澆灌紀錄、觀看影片的時間戳等量化數值

就必須要自訂情境與設計 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

--

--