原本我將當初是怎麼構想Miri的故事寫在Github README 裡。
但最近完成第三版的開發,並且要重新撰寫README的時候,我發現我應該把這類型的描述移動到部落格文章內,再加上想紀錄自己做Miri的動機跟故事。
由於我是個很容易忘記過去的人,所以我希望可以透過文章的方式,將這段 Miri 軟體開發的故事給記錄下來,無論我未來有沒有成功,他都會是一段有趣的故事。
第一章 - Miri 誕生了
Miri 機器人算命師
- Miri 是一個虛構的10歲小女孩,人物設定像是她自幼天資聰穎,對數學及命理有興趣,年紀輕輕就自學命理與占卜學,並開始為前往找她的問事者解惑。
其實Miri一開始並不是要作為機器人占卜師,我一開始是希望將Miri朝向人工智慧的方向發展,作為管理的助手或管家。
在攻讀研究所前,我有一段日子是失去人生的目標,且對未來感到十分的茫然,那段日子有時間可以看一些影劇作品,所以陸續看了鋼鐵人
跟惡靈古堡
全集,那時看到鋼鐵人影劇中有Friday
人工智慧當他的管家,聽從史塔克的指令,Friday能夠根據指令收集資料作出分析,並透過視覺化的虛擬介面展示於第三維度的空間中,平時也有Friday幫助史塔克管理一些事物或回報進度。而在惡靈古堡中,在第一集就出現的人工智慧紅后
也激起我的熱忱,紅后協助控管整個公司,而且後來也發展出有自我意識的人工智慧。
受到鋼鐵人的Friday
以及惡靈古堡「紅后」
的影響,讓當時的我燃起對人工智慧的幻想,希望在未來能夠研究人工智慧或進入厲害的軟體開發研究室,和世界各地厲害的工程師一起開發人工智慧。
人工智慧
聽起來就是很炫很超科技的名詞,在研究所時我接觸到了りんな,りんな
是日本公司做的人工智慧,當時是掛在Line社交軟體中,你可和他聊天,也有一些額外的功能可以使用,當初的我一邊和りんな
交流,一邊感慨在現實生活中,出現了夢想中的人工智慧,讓當時的我初步先將實現人工智慧的夢想朝向聊天機器人的方向,並且選擇將Line的聊天機器人作為我人工智慧夢的第一步。(現在去看りんな
的官網,發現該公司開發了很多不同的新功能,也有開發占卜的功能!占卜跟命理真是一塊新穎的知識發展,感覺再不開始規劃實作,就會被很多人佔掉市場)
然而在校時,我個人的程式能力才剛起步,我完全沒有什麼軟體開發的經驗,加上沒有相關的知識來研究,遲遲讓我不知道如何下手。
終於有一次的機會,我們系大學部找了外師來學校用一堂課的時間,教授如何實作Line的聊天機器人,讓當時不知如何開始的我有機會踏入聊天機器人的開發。也就是這個時候創立了 Miri
在Line的帳號。
Miri
誕生了!
為什麼要取名叫做 Miri
呢?
因為當時只有蘋果手機的 Siri
像是具有人工智慧技術的個人管家,而我創立這個聊天機器人又是抱著想要自創人工智慧的初心,我把我的名字英文縮寫 M
加上 Siri
組成了 Miri
作為未來的人工智慧管家名稱。
Miri
的大頭貼是怎麼來的?
在2010年時,Facebook有出一個外部插件軟體,可以自己製作一個人像大頭貼,我當初依照當時自己的樣貌,做了一個與自己相似的可愛大頭照,放上Facebook。
後來我覺得那個大頭貼很像一個年輕的小女孩,加上 Miri 發音聽起來很像一個俏皮可愛的女生名字,我就決定把那個大頭貼當作是Miri的照片。
在Miri剛誕生時,大部分的時間處於停機的狀態,就像上述所說,教授Line機器人的外師只用一堂課的時間教授實作聊天機器人,再加上自己程式能力剛起步對整個軟體的設計基礎能力完全是0,所以最一開始的Miri功能,只有將使用者發送的訊息像是Echo般將一樣的訊息回覆使用者。
而且因為我不會架設server,所以只要人沒有使用電腦,Miri就是停機狀態,完全不會做任何反應。
當時只有註冊Miri Line帳號,還有貼上講師附贈的 Line api 程式碼加上Ngrok轉址功能,只建造了非常簡單的雛形,而且連Line bot api程式都看不懂。
第二章 - 初步開發 Miri
由於在研究所大部分實作的專案,都是跟網頁相關,而且嚴重缺乏軟體後端的基礎知識(我最一開始是做前端網頁開始學習寫程式),所以我完全不知道在創立Miri後,我要怎麼繼續開發Miri,要怎麼讓他成為像 Friday 跟 紅后一樣的人工智慧管家,Miri的開發就暫時停止了,大概停了1-2年的時間,都沒有規劃任何的功能開發。
畢業後,為了實現自己想要開發人工智慧的夢想,第一間公司就嘗試著尋找開發人工智慧的職位,後來很幸運的,進入了研發人工智慧的美商新創公司,在那期間開始精進我的python程式能力以及學習大量的人工智慧知識。
在高壓的環境下進行了半年的磨練,在那之後,我發現自己有比之前擁有更多的背景和技術能力足以支撐我繼續開發Miri。
於是,我開啟已經停擺近2年的Miri,然後試著用學習到的知識跟技術,初步規劃了Miri的程式架構,還有加上人工智慧斷詞套件nltk
跟jieba
實作簡單的文字訊息斷詞及回覆設定好的語句。
用到的技術包括Python的Flask框架,語意斷詞套件,還有初步了解line bot api的程式碼實作。
而回應的訊息,當初也只是初步設定一些打招呼用語像是早安
,晚安
以及其他基本用語,當然我也想過要將Miri做成情人聊天機器人,所以也設定了幾個調情的語句,像是喜歡你
,愛你
,你今天好漂亮..等之類的語句。
也因為理解了人工智慧背後的運行原理後,我發現人工智慧並沒有一開始想像的這麼夢幻,大部分都是依靠大量輸入語句內容,或者訓練詞彙並存在資料庫中,使其接收到固定的詞彙時就回覆詞彙中設定好的答案。
當然也有可能我並沒有往更深層或核心的人工智慧知識探索,所以我對人工智慧實作的了解程度只停在將語句斷詞然後再設定相對應的回答/或者設定計算公式並回覆給使用者。
唯一想到如何訓練Miri的想法就是大量輸入語句,然後透過 nltk
或 jieba
斷詞後存入資料庫,並針對存取的斷詞設定預定回覆的答案或計算公式。
如果要將Miri做成聊天機器人或者管家,就必須透過這樣的方式訓練Miri。
如果要發展成管理個人事務的管家,還需要透過連接外部軟體或外部機器的功能融合輸入的詞彙,才能達到開發人工智慧管家的條件。
要將人工智慧開發成管家或者像電影一樣擁有自我個性的人,想必需要更多人更多研究學者跟科學家合作,僅依靠一人團隊是不太可能,再加上現今人工智慧的技術發展還沒這麼的成熟。
電影還是看看就好,雖然對人工智慧的夢想沒有當初這麼的濃厚,但是創造了Miri也開啟了我想要自己創作自己的軟體的道路。
雖然想將Miri發展成聊天機器人或者朝向個人管家的目標出發,但是Miri缺乏一個主題性的產品概念,要做什麼樣的聊天機器人?他有什麼功能有什麼主題?
我當時完全沒有任何想法,既想將Miri做成像情人一樣的聊天機器人,也想將Miri做成像Friday一樣的個人管家,但這就很像在大海裡撈針一樣,缺乏主題性的概念,就無法想像產品的最終形態,自然就不知道如何規劃開發跟實作計畫。
第三章 - 往占卜領域擴展
2019/8/15,我離開了第一份工作,要準備第二份工作的面試,我有一小段時間可以準備履歷跟更新作品集,由於已經有初步的軟體開發經驗與技術能力,在這段時間我把以前做的專案程式碼整理後,陸續上傳到github,還有就是部署在heroku的伺服器上,並在履歷的作品部分,附上github和正在運行的作品網址。
由於第一份工作是在新創公司工作,公司的產品開發過程十分顛頗,缺乏主要方向以及主要的產品領導人,產品面臨一次又一次得重新規劃跟重做,我參與過很多網頁的專案開發還有公司產品的開發,但是沒有一個上線的專案或產品是可以秀給未來的面試官看。
這時候我想到的是將擁有非常初階聊天機器人功能的 Miri拿出來繼續開發,我希望能夠將我在第一份工作所學到的所有技術跟技能都運用在Miri身上,Miri就能夠代表我在第一份工作學到的技術跟經驗集合。
當時我並沒有想到要安排很多時間開發Miri,所以我大概只給自己1-2個月的時間開發Miri,然後就準備找下一份工作。
在只有2個月的時間,我必須要將Miri做出一個有階段性成果的版本,所以一定不會是像是聊天機器人
那樣擁有著開放性未來的主題。
我指的是,我必須在僅有的兩個月時間,利用我所學,在Miri中做出一個具有主題性的功能,而不是像之前設定好的回覆語句,感覺這個專案/自作產品非常沒有完整性。
在仔細思考後,由於我的個性驅使,我不想Miri的功能像是一般其他的聊天機器人一樣,我想到我之前有段時間研究過盧恩符文(一種占卜術),這是一個獨立性質高且非常獨特的主題,而且我有信心能夠在兩個月內達成一個階段性的成就,足夠輔助我秀給未來的面試官看。
因此,我決定就在原本基於Line bot api 機器人的基礎上,新做一個獨立性功能(盧恩符文占卜)的延伸,利用Line api特有的 Template
訊息型別來引導使用者進行占卜,添加點新的訊息型別,而不是像原本只有文字訊息單調的回覆。利用SQLite資料庫儲存靜態的盧恩符文資料與解釋,然後在透過訊息引導使用者點擊按鈕,透過隨機抽取的方式抓取結果,然後將結果跟解釋傳回給使用者。
先是參考在第一份工作觀察到的程式架構設計,很簡單的設計了能符合擴展占卜功能的程式架構,同時也保有最一開始實作的簡單的對話語句及調情語句。
總共大概花費只有3週的時間就完成此次規劃的目標,也就是Miri的第二版內容。
然後學著使用Heroku將Miri架設在伺服器上,這樣 Miri就正式上線,提供使用者使用啦~
雖然是很簡單的盧恩符文占卜,但是卻讓我在面試時能夠拿出來秀給面試官看,除此之外和同事聊天時也能説自己做了一個小小的軟體創作,也有朋友會時不時使用Miri來占卜盧恩符文。
這就是Miri從最一開始定位在人工智慧管家,之後誤打誤撞轉型成占卜機器人的轉折點,到之後奠定成為機器人占卜師的過程。
以上,是我從最一開始構想Miri的啟發,一直到開始實作,然後決定發展主題的過程,現在想起來其實也覺得蠻有趣的,在我的內心我並沒有把Miri當作是很重要的事情。
但我卻會在每次離開一份工作後,都想將工作上學習到的知識跟技術運用在Miri身上。而開發Miri每次都讓我了解到我缺了哪些技術和知識,我需要學習哪些技術才能進行再下一步Miri的開發。
也許是因為自己在工作上開發的每個專案跟產品都沒有上線運行過(大部分都被腰斬或者重做),所以兩年後回眸,赫然發現自己身上竟有一個Miri很穩定的在伺服器上運行了兩年,而且還可以讓我隨時拿出來展示給別人看。
雖然當時的我還沒有意識到Miri的重要性,因為我覺得我的能力不足以把Miri做成我心目中最終的樣貌。而此次離職,透過前同事的激勵與推動,再加上離職的雙重刺激下,我開始正視Miri的重要性。
這個部分包含我這半年的開發心得,將會在下一篇描述。
在撰寫本文時,我比較了 Miri
和 りんな
,我理解了一些重要的概念。
我認為最重要的是要釐清產品的定義:
- 什麼是主要概念?
- 目標用戶/客戶是誰?
- 要實施的範圍有多廣?
在做產品之前,需要通過這些問題來定義產品,因為結果將決定它需要多少團隊成員,需要什麼技能,需要營銷哪個地區,區域等等。
作為工程師,從第一份工作開始,我只觀察實作方面跟單向溝通,停留在基本的位置。在這個時候開始廣泛開發 Miri 的 6 個月旅途中,我理解了很多概念,我發現我總是使用開發人員/工程師的角度來思考事情。
不適合考慮產品的整個方面。
在這段獨自開發Miri帶給我的是:
- 我現在缺乏什麼技能/能力
- 我接下來需要學習哪些技能/能力
- 一種產品如何製造和運營、設計、設計程式、行銷
- 一個產品的主要概念和訂定實作範圍有多重要
- 切換不同角色的思維角度(有時是設計師,有時是工程師,有時是 PM,有時是產品負責人,考慮目標客戶以及如何行銷)
還有很多不同的概念
我享受著整體開發過程,我很高興我花了6個月的時間來開發 Miri 並了解了很多東西。
那麼關於這些故事,請期待下一篇文章:)