自從上完了RAG系統之後,就很想盡快使用大型語言模型做更多的應用。
原本我還規劃了一些課程,甚至突發奇想,不然再來念資訊相關的研究所吧,看是要念資訊管理所、資訊科學所,還是資料科學所。仔細思索後,考慮到在職碩班學費太可怕了,還是決定直接與AI進行協作開發。
反正不懂就問AI,再不然問網友,總是有辦法的,對吧。
所以我決定來做Side-Project,武俠小說生成器。
小說、電影等,其實是有公式的。最常見的就是大家熟知的起承轉合,戲劇則有三幕劇:觸發、衝突、解決。
神話學家約瑟夫·約翰·坎伯(Joseph John Campbell, 1904-1987)則提出了英雄之旅(The Hero's Journey),也分成三大塊:
在維基百科中是這麼說明的,
在敘事的啟程部分,英雄或主角生活在「平凡世界」,並接到一個冒險的召喚。英雄不願意跟隨這個召喚,但是得到了師傅的幫助。然後,跨越門檻到一個未知或「非常世界」。在敘事的啟蒙部分,他在那裡單獨(或在盟友的幫助下)面對任務或試煉。英雄最終到達「洞穴的最深處」或者是冒險旅程中最危險的地方,他在那裡必須經歷「折磨」、克服主要的障礙或戰勝敵人,經歷「神化」並獲得他的「獎賞」(「寶藏」或「萬靈丹」 )。然後英雄必須帶著他的獎賞歸返「平凡世界」。「非常世界」的守衛可能會追捕英雄,或者英雄可能不願意歸返,或者因為外界的干預獲救,或者被迫歸返。在敘事的歸返部分,英雄再次穿越兩個世界之間的門檻,用他獲得的「獎賞」或「萬靈丹」回到「平凡世界」,這時候英雄可能會為了同胞的利益而使用它。英雄本人則因為冒險旅程而改變,並在兩個世界中獲得智慧或精神力量。
從1950年代以降,以金庸、古龍為首的新派武俠小說,當然也有公式。最常見的劇情就是背負著血海深仇的青年,在因緣際會之下,獲得高深的內力,或者取得武功秘訣,練成絕世武功,並且得以報仇。
既然小說是有公式的,那麼我們就能事先寫好公式,使用Prompt Engineering技巧,依據公式讓大型語言模型生成故事大綱。再依照故事大綱,生成各章節的故事。
從這個角度出發,我請AI為我繪製武俠小說生成器的系統架構圖。
首先這是我給出的提示詞:
我需要開始一個新專案(side project),主題:武俠小說生成器,請你為我規劃系統架構圖。底下是我的專案相關資料。
後端用Python,使用LangChain等套件撰寫模版,然後呼叫OpenAI的API,使用OpenAI的語言模型。另外把大量的武俠小說匯入向量資料庫,建立擷取增強生成系統(Retrieval Augmented Generation)。
前端我打算先用Stramlit,快速開發。當使用者登入前端時(先做身分認證),會先需要設定角色、故事背景,所以會有角色與故事背景的生成服務,系統會去讀取向量資料庫的資料做為參考,然後生成類似的角色及故事背景。接著依照角色及故事背景,以及使用者在前端填入的其他資料,例如選擇故事大綱模版,將資料送入故事大綱生成服務,生成每一個章節的故事大綱。使用者也可以在此階段修正每一個章節的故事大綱。一共會生成20個章節。
當故事大綱確認後,使用者可以依序生成每一個章節的故事,每一個章節都另外有角色生成、場景生成、武功招式生成、武器生成的服務,當角色場景、武功招式、武器生成後,就可以把資料送到故事成生成服務,生成此章節的故事內容,每章節約3000字。
當第一章生成後,系統會記住第一章的生成內容,然後繼續進行下一章的生成,使用者還是能繼續針對角色、場景、武功招式、武器,再度生成,讓語言模型從上一個章節繼續編寫故事。
每一個章節生成後,都會儲存在關聯式資料庫內。
等到全部章節生成之後,使用者可以在前台閱讀他生成的小說。