先整併生成器及構思提示詞模版與JSON格式

在上一次我整理了最近做武俠小說生成器的想法,也繪製了架構圖。今天就要來實作第一個生成器。

因為武俠小說生成器其實是各種生成器的組合,不過上次構思的生成器共有8個,我覺得可以先整併一下,然後每一個生成器也應該產出JSON檔。

目前構思的小說製作流程如下:

  1. 故事套路設定
    1. 使用者登入後,首先決定故事的套路,套路是事先就設定好的,從JSON檔取出。
      • 預先設定好的故事套路JSON
    2. 決定好後,按下生成按鈕,資料會送到提示詞模版,再傳送給語言模型,接著語言模型會依據故事套路,生成小說標題、第一幕標題與大綱、第二幕標題與大綱、第三幕標題與大綱。
      • 第一幕提示詞模版
      • 第二幕提示詞模版
      • 第三幕提示詞模版
    3. 標題與大綱都可以重新生成或者由使用者微調。如果使用者確認後,將把標題與大綱以JSON檔的方式存檔在非關連式資料庫。
      • 故事套路存檔的JSON格式,注意這裡的"completed": 預設為false,當小說完成後,這裡會改為true。小說完成後,相關資訊就不能修改。
  2. 角色設定:使用者在此頁面上,可以選擇上場的重要角色,一共有男/女主角、重要配角4人、反派2人,總共7人。使用者可以調整的選項有:
    1. 角色類別,有主角、配角、反派;
    2. 角色性別,分男、女。
    3. 角色陣營,按照陣營九宮格方式分類。
      • 陣營描述JSON
    4. 性格:依據 MBTI 分類,分成 16 種個性,由事先設定好的 JSON 檔取出
      • MBTI 性格分類JSON
    5. 門派及武功,依據角色的陣營,能夠從事先設定好的JSON檔取出既定的門派名稱與門派描述、武功名稱與武功描述。在這裡也能讓使用者寫下描述,用語言模型生成。一個角色最多選3項武功。由於主角可能一開始什麼武功都不會,也不屬於任何門派,所以這裡還需要設計一個選項讓它留空。
      • 門派、武功與描述之JSON
    6. 名字與綽號,依據前項描述讓語言模型生成。另外可以選擇是否需要綽號
      • 提示詞模版
    7. 上述都確認後,點擊送出,讓語言模型依據上述資料生成對於角色的描述。語言模型必須先考慮他們的陣營,再考慮他們的性格。使用者可以編輯描述,如果確定後就點擊送出,就會將JSON檔存入資料庫。
      • 提示詞模版
      • 角色設定存檔JSON
  3. 使用者在此頁面決定小說裡面的幾個重要場景,預設的選項有:皇宮、宅院、市集、寺廟、客棧、街道、荒漠、竹林、深山、邊塞等等。使用者也能自訂選項,選擇後讓語言模型生成對於場景的描述。最多可以選擇7種場景。
  4. 最後一步是章節內容生成器,系統可以勾選要生成哪一個小說,選擇後會自動帶入尚未完成的標題與大綱。接著,使用者可以選擇之前設定好的角色、角色當前狀態,此時也可以增加臨時配角,臨時配角能夠選擇姓名、綽號、陣營、門派。然後選擇之前設定好的場景,勾選當下的天氣、時間。 都選好了之後,按下確定就可以生成,生成後使用者可以修改,修改完畢後,可以存檔。 存檔時會存兩個JSON檔,一個JSON檔是針對章節內容,另一個JSON檔是讓語言模型閱讀章節內容,針對角色的當前狀態存檔,例如角色如果受傷了,就要描述他發生什麼事。
  5. 當章節內容生成器,依序生成到最後一章。使用者可以到主頁面,選擇小說標題,章節來閱讀小說。

都構思好了,開始動手吧!

依照上述描述,一共有 5 個網頁需要製作,分別是

因此我規劃了這份專案的目錄結構,這份必須提供給 AI ,讓它知道之後要生成的程式應該要放在哪裡。

wuxiannovelsgenerator_project/
├── vectorstore/        # 金庸武俠小說向量資料庫
│   ├── index.faiss    # 向量資料庫索引檔
│   └── index.pkl      # 向量資料庫檔案
├── novel_database/    # 存放使用者生成的小說資料及相關設定
├── templates/             # 存放預設的JSON資料
│   ├── story_templates/   # 存放各種故事套路模板
│   │   ├── revenge_template.json
│   │   ├── adventure_template.json 
│   │   └── treasure_template.json
│   ├── alignment_templates/      # 陣營模板
│   │   └── alignment_template.json
│   ├── personality_templates/    # MBTI性格分類模板
│   │   └── mbti_template.json   # 16種MBTI性格對應武俠角色特質
│   ├── martial_templates/        # 門派與武功模板
│   │   └── sects-and-martial.json          # 門派資料
│   ├── scene_templates/         # 場景描述模板
│   │   └── scenes.json  # 場景描述模板
│   └── plot_templates/          # 劇情結構模板
│       ├── three_act_revenge.json         # 復仇型武俠故事三幕結構
│       ├── three_act_growth.json         # 歷練型武俠故事三幕結構
│       └── three_act_treasure.json      # 奪寶陰謀型武俠故事三幕結構
├── prompts.py        # 提示詞模板
├── utils.py          # 工具函式
├── rag.py           # RAG 相關功能
├── main.py          # 主頁面
├── vdb.py            # 向量資料庫相關功能
├── story_outline.py    # 故事套路設定
├── character_settings.py       # 角色設定
├── scene_settings.py    # 場景設定
├── story.py    # 章節內容生成器
└── requirements.txt     # Python 套件依賴