這個身分證檢查器是用ChatGPT寫的吧?!

隨著大語言模型(英語:Large Language Model,LLM)的蓬勃發展,相關的應用越來越多,人們透過大量的資料訓練(Train)出一個一個模型(Model),再用這些模型去產生我們想要的結果,某種程度來講,這些語言模型對我們的工作和生活帶來不少程度的幫助;從最早我們用模型來寫文章,用模型來產生照片,用模型來產生影片,很多人都讚嘆電腦程式的進步,大大的改變了我們的生活,那有沒有有一種可能是,我們也可以用模型來寫程式呢?

當然用模型來寫程式,未必是下一個指令像「給我一個預測股市走勢的程式」,他就能把你想要的東西都給你,更重要的是我們要告訴他,你想要他為做些什麼?做得對不對?


你正在做什麼並不重要,重要的是你知道自己正在做什麼。


計畫

接著我們來試著做一個身份證字號的驗證程式,要達到想要的結果之前,其實我們還是要有一些系統性的思考邏輯,先提出構想,完整藍圖,分解功能,再重新組合,套用平時開發程式的步驟,不外乎:
  1. 需求收集
  2. 系統分析

需求收集

我們想要做一個台灣的身份證號碼驗證器,需要可以輸入任何一組號碼,可以知道號碼的主人是從哪裡來?可以知道號碼的主人是先生還是小姐?我們不想要安裝程式,太麻煩了,還有,希望畫面可以漂亮一點,好用一點。

系統分析

接著我們就來想想,做一下簡單的分析,看看要如何滿足需求;

  1. 需要簡單容易使用,我們可以寫成網頁版。
  2. 需要畫面好看,雖然好看是一件很主觀的事情,但我們可以用主流的網頁框架。
  3. 希望體驗好一點,那連提示訊息都一起改善,至少在不同裝置上用來都差不多。
  4. 程式要判斷號碼是否正確,那有沒有計算規則?有什麼標準格式?

再來我們分別列出對應的解決方法;
  1. 美觀問題,我們可以用Bootstrap,因為是主流框架,至少能向市場趨勢靠攏;我們也可以用SweetAlert套件來改善體驗問題,讓不同裝置的操作感受更一致。
  2. 判斷號碼正確性的演算法,我們在維基百科上找到的中華民國國民身分證相關規則,夠我們處理這一次的問題。
  3. 程式提供一個介面,可以填寫證件號碼、性別、發證的縣市,來完成基本需求。
寫程式的浪漫...分解再重組,就像玩積木一樣快樂。

開工 

做完分析後,我們就可以來做功能開發了,這次我們不找訓練有素的猴子,而是用ChatGPT來完成工作,打開介面後,緩緩地貼上我們的Promt。

寫一個HTML網頁,
使用Bootstrap 4排版, 搭配Vue.js,並用Sweetalert2作為訊息提示工具, 使用Bootstrap validation作為表單檢查工具,

做出一個表單, 表單主題是身份證檢查器,
表單元件包含一個輸入欄位是id_number,

參考以下資料,產生一個可以選擇的下拉選項是sex,不需預設值:
1 男性
2 女性

參考以下資料,產生一個可以選擇的下拉選單是county,不需預設值:
A 臺北市
B 臺中市
C 基隆市
D 臺南市
E 高雄市
F 新北市
G 宜蘭縣
H 桃園市
I 嘉義市
J 新竹縣
M 南投縣
K 苗栗縣
N 彰化縣
O 新竹市
P 雲林縣
Q 嘉義縣
U 花蓮縣
V 臺東縣
T 屏東縣
W 金門縣
X 澎湖縣
Z 連江縣
L 臺中縣
R 臺南縣
S 高雄縣
Y 陽明山管理局

產生一個按鈕是verify, 按鈕文字是檢查身分證號,預設不可點擊.

輸入id_number時,檢查輸入內容,
id_number最多10碼,第1碼是英文字母, 第2~第10碼是數字, 如果不符合, 提示證件號碼不符合規範,
如果第1碼不在county的可選範圍內,則用Bootstrap validation提示第一碼須為英文字母,
如果第2碼不在sex的可選範圍內,則用Bootstrap validation提示格式錯誤,


輸入完id_number後,格式正確,參考輸入內容的第1碼,變更county的預設值,
輸入完id_number後,格式正確,參考輸入內容的第2碼,變更sex的預設值,
輸入完id_number後,格式正確,按鈕verify開放可以點擊.

點選按鈕verify時,會用vue.js取id_number,sex,county的值,
參考以下規則,把county的輸入值,從英文字母轉成對應的數值e:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 0 9 8 7 6 5 4 9 3 2 2 1 0 8 9 8 7 6 5 4 3 1 3 2 0
把id_number的後9碼數字,標記為n1~n9的序列,參考以下計算式,得出N:
N=e+n1*8+n2*7+n3*6+n4*5+n5*4+n6*3+n7*2+n8*1+n9*1

如果N可以被10整除,則用Sweetalert2提示身分證正確:id_number,
如果N不可被10整除,則用Sweetalert2提示身分證錯誤:id_number.


當年的Youtube,可是由一批訓練有素的猴子撐起呢。

接著經過一些時間的推理和生成,你就可以得到以下結果了,別擔心,儘管把結果複製起來,貼到文字編輯器上,存成一個檔案像是:id_check.html,從現在開始,你就有一個自己寫的身份證字號產生器了。



See the Pen Untitled by LiuChien (@liuchiente) on CodePen.


結論

2022年,當ChatGPT能夠寫程式的消息傳開後,社會上出現了幾種不同的反應。一種是認為ChatGPT寫的東西一定很糟糕,另一種則是擔心工程師會因此失業。不過,隨著時間的推移,我們不禁要問,今天的LLM和AI到底在我們的生活中扮演著什麼角色?也許它們在幫忙抓蟑螂、挑選土豆,甚至協助寫履歷或論文。不管如何,最終我們還是得相信,不論是ChatGPT還是未來的其他模型,它們都應該是為我們所用,而不是我們為它們所制約。

以ChatGPT為例,它基於超大規模的資料集GPT進行訓練,儘管原始碼未公開,但我們可以大致理解它是如何透過一些技術手段來完成去除雜訊、語義理解和語義生成等過程。通過不斷的推理,ChatGPT能夠生成符合我們需求的結果。正因為如此,ChatGPT擁有遠超我們個人的知識量,如何有效挖掘並利用這些知識,關鍵在於我們如何運用這個工具。

當然,我們也不能完全依靠LLM,要知道一個訓練LLM用的資料,多已經被篩選,進而過濾掉一些額外內容,換句話說,我們只能拿到被允許的知識,所以還是要用批判性思維來看待AI給出的答案,這樣才能避免陷入填鴨式的思考模式。

留言

這個網誌中的熱門文章

Prompt, Fine-tune 和 Training,誰才是大工程?

用Python實作 Perspective Transformation 透視變換