作:從工程分層到RAG與精度調(diào)優(yōu)的實(shí)踐指南)
“LLMs Set My Fiction Free”——這個(gè)標(biāo)題如果直譯就是“大模型讓我的小說創(chuàng)作獲得了自由”。過去一年里這個(gè)判斷經(jīng)常出現(xiàn)在科幻作者、網(wǎng)文寫手和同人創(chuàng)作者的討論中不再是“我寫不出來讓 AI 幫我寫”而是“我想寫的太多整理和實(shí)現(xiàn)不過來現(xiàn)在終于可以放手去寫”。很多開發(fā)者看到這句話第一反應(yīng)是“這不就是 AI 代寫嗎”。但我更想把視角拉回工程一側(cè)LLM 在小說創(chuàng)作中真正釋放的不是“生成能力”而是“批量驗(yàn)證和快速迭代能力”。換句話說它改變的并不是“有沒有靈感”而是“從靈感到正文之間的那條又長(zhǎng)又容易放棄的路徑”。這篇文章不是一篇文學(xué)創(chuàng)作心得而是一篇面向開發(fā)者和創(chuàng)作者的技術(shù)實(shí)踐文章。我會(huì)從“LLM 的能力邊界”切入講清楚它為什么能釋放創(chuàng)作自由度然后給出一套可以跑通的最小工作流包含提示詞設(shè)計(jì)、API 調(diào)用示例、本地部署方案、RAG 資料庫雛形以及我在工程接入中最常踩的坑。讀完你可以用一套可落地的技術(shù)方案把 LLM 接進(jìn)自己的小說創(chuàng)作流程知道哪些環(huán)節(jié)適合交給模型哪些環(huán)節(jié)必須由人控制遇到生成效果差、上下文斷裂、設(shè)定沖突時(shí)知道該從哪一層去排查。1. 這篇文章真正要解決的問題先說結(jié)論LLM 對(duì)小說創(chuàng)作最重要的貢獻(xiàn)是把創(chuàng)作過程中的“體力活系數(shù)”降了下來。寫一部小說尤其是長(zhǎng)篇真正消耗人的往往不是“沒想到”而是世界觀設(shè)定散落在幾十個(gè)文檔里寫到第五章時(shí)忘了第二章埋的伏筆人物動(dòng)機(jī)在寫作過程中發(fā)生漂移讀者覺得角色“崩了”時(shí)間線、能力體系、人物關(guān)系越來越多手動(dòng)維護(hù)開始出現(xiàn)矛盾需要反復(fù)回到前文補(bǔ)細(xì)節(jié)導(dǎo)致寫作節(jié)奏被打斷有了靈感但缺乏足夠的內(nèi)容結(jié)構(gòu)去承接只能在腦子里反復(fù)“空轉(zhuǎn)”。這些問題的共同點(diǎn)是它們不是“創(chuàng)造性”問題而是“信息組織和上下文一致性”問題。而這兩點(diǎn)恰好是 LLM 作為工程工具最擅長(zhǎng)處理的。但這不代表 LLM 能獨(dú)立寫好一本小說。如果你讓模型“自由發(fā)揮”一萬字它大概率會(huì)給你一篇結(jié)構(gòu)完整、語言流暢、但邏輯松散的中庸之作。真正的用法是讓人負(fù)責(zé)決策讓模型負(fù)責(zé)擴(kuò)展、改寫、校驗(yàn)和檢索。當(dāng)模型把“填充細(xì)節(jié)”這類工作接走之后創(chuàng)作者才有精力把時(shí)間花在“選擇哪條劇情線”“這個(gè)角色到底是誰”這類高價(jià)值的判斷上。所以這篇文章要幫讀者解決的核心問題不是“怎么寫小說”而是“怎么搭一套以 LLM 為執(zhí)行層、以創(chuàng)作者為決策層的工程化寫作系統(tǒng)”。2. 為什么“自由”來自能力分層而不是模型單點(diǎn)輸出我在技術(shù)社區(qū)里看到過不少失敗的 AI 寫作嘗試幾乎都有一個(gè)共同點(diǎn)把 LLM 當(dāng)成了“一個(gè)人”要求它從零到一完成整本小說。這種做法必然遇到三個(gè)問題上下文窗口有限模型很快就會(huì)遺忘前文的設(shè)定生成結(jié)果與既有設(shè)定沖突的概率隨文本長(zhǎng)度遞增創(chuàng)作者失去了對(duì)作品的“手感”寫出來的內(nèi)容不像自己的風(fēng)格。真正可行的模式是把創(chuàng)作過程拆層。2.1 決策層創(chuàng)作者需要拍板的內(nèi)容包括故事基調(diào)、人物弧光、關(guān)鍵情節(jié)點(diǎn)、敘事視角、哪些細(xì)節(jié)要保留、哪些沖突要激化。這一層的能力邊界是審美和世界觀模型不擅長(zhǎng)做“選擇”因?yàn)檫x擇需要價(jià)值判斷。2.2 執(zhí)行層LLM負(fù)責(zé)把決策轉(zhuǎn)化成文本。例如給出一句話的故事梗概讓模型擴(kuò)寫出一章給出人物性格列表讓模型生成符合該性格的對(duì)話給出前文摘要讓模型續(xù)寫下一段。模型不需要“知道”整個(gè)宇宙只需要在當(dāng)前任務(wù)里執(zhí)行到位。2.3 記憶層RAG 與設(shè)定庫這是最容易忽略、也最關(guān)鍵的一層。長(zhǎng)篇?jiǎng)?chuàng)作和短篇不同你不可能把前文的幾十萬字都塞進(jìn)提示詞。需要把設(shè)定、人物檔案、時(shí)間線、風(fēng)格樣本拆成結(jié)構(gòu)化文檔用檢索的方式按需取用。這樣既節(jié)省 token又保證生成時(shí)的上下文在可控范圍內(nèi)。2.4 校驗(yàn)層二次模型調(diào)用或規(guī)則過濾寫完一章可以用另一個(gè) prompt 讓模型檢查時(shí)間線是否一致、人物稱呼是否統(tǒng)一、是否有前后矛盾。這一步相當(dāng)于自動(dòng)化的“編輯審稿”。把流程拆開之后你會(huì)得到一個(gè)新的自由不再依賴某一次生成的質(zhì)量。任何一次輸出不滿意都可以單獨(dú)重跑一個(gè)步驟而不是推倒重來。3. 創(chuàng)作場(chǎng)景中的模型選型與基礎(chǔ)環(huán)境既然要工程化第一步是選模型和跑通環(huán)境。創(chuàng)作者通常有兩種路線各有取舍。3.1 云端 API 路線適合大多數(shù)用戶不需要高端顯卡按量付費(fèi)模型能力持續(xù)更新。在長(zhǎng)文創(chuàng)作場(chǎng)景重點(diǎn)是選擇“長(zhǎng)上下文能力好、中文指令理解強(qiáng)、支持結(jié)構(gòu)化輸出”的模型。常見的云端方案包括 OpenAI 系列、Claude 系列、DeepSeek、通義千問、智譜 GLM 等。各家模型能力差異很大而且容易變化這里不寫死版本和參數(shù)你需要以官方最新文檔為準(zhǔn)。但選型時(shí)有一個(gè)通用標(biāo)準(zhǔn)先用一個(gè)小型任務(wù)集做對(duì)比而不是看跑分。3.2 本地部署路線適合對(duì)隱私敏感、有創(chuàng)作數(shù)據(jù)保密需求、或者需要長(zhǎng)期離線寫作的用戶。本地部署首選 Ollama 這類工具它可以方便地拉取并運(yùn)行開源模型。在小說創(chuàng)作場(chǎng)景模型的精度格式直接影響到觀感。這就涉及到熱搜詞里反復(fù)出現(xiàn)的 fp16、fp32、bf16 問題我在第 6 章展開。這里先給出結(jié)論追求生成質(zhì)量?jī)?yōu)先選 fp16 或 bf16 的模型顯存不夠時(shí)再考慮 4-bit 量化但要接受一定的文本流暢度下降。3.3 一次最小的環(huán)境準(zhǔn)備本地部署的最小環(huán)境以目前常見的消費(fèi)級(jí)配置為例# 安裝 OllamamacOS / Linux 用戶 curl -fsSL https://ollama.com/install.sh | sh # Windows 用戶去官網(wǎng)下載安裝包即可之后在命令行使用 ollama 服務(wù) # 拉取一個(gè)適合中文創(chuàng)作的開源模型這里以 qwen 系列為例具體 tag 以官方為準(zhǔn) ollama pull qwen2.5:14b # 啟動(dòng)一個(gè)常駐服務(wù) ollama serve啟動(dòng)之后可以用一個(gè)最小的 HTTP 請(qǐng)求驗(yàn)證服務(wù)是否正常curl http://localhost:11434/api/generate -d { model: qwen2.5:14b, prompt: 用一句話描述一個(gè)發(fā)生在雨夜古城的懸疑開場(chǎng)。, stream: false }如果返回中包含response字段說明本地推理鏈路已經(jīng)跑通。云端 API 路線的環(huán)境準(zhǔn)備更簡(jiǎn)單關(guān)鍵是申請(qǐng)并配置 API Key。注意Key 屬于敏感憑證不要硬編碼在代碼里更不要提交到公開倉庫。生產(chǎn)環(huán)境建議用環(huán)境變量或密鑰管理服務(wù)。4. 最小可用的創(chuàng)作工作流從靈感到章節(jié)現(xiàn)在進(jìn)入核心部分。我?guī)惆褎?chuàng)作過程拆成一個(gè)最小閉環(huán)。這套流程不需要開發(fā)復(fù)雜系統(tǒng)用腳本或甚至純提示詞就能跑起來。4.1 生成故事設(shè)定草案假設(shè)你只有一個(gè)模糊的靈感“一個(gè)失去記憶的調(diào)香師在一座永遠(yuǎn)下雨的城市里尋找自己的過去?!毕茸屇P桶堰@個(gè)靈感展開成結(jié)構(gòu)化設(shè)定。關(guān)鍵點(diǎn)是要求模型輸出 JSON而不是散文。結(jié)構(gòu)化數(shù)據(jù)后面可以被程序解析也能直接入庫。請(qǐng)把以下靈感擴(kuò)展為小說設(shè)定草案并輸出 JSON 格式 { 故事梗概: , 核心沖突: , 世界觀關(guān)鍵詞: [], 主要人物: [ {姓名: , 身份: , 動(dòng)機(jī): , 秘密: } ] } 靈感一個(gè)失去記憶的調(diào)香師在一座永遠(yuǎn)下雨的城市里尋找自己的過去。 要求人物動(dòng)機(jī)要有內(nèi)在邏輯世界觀關(guān)鍵詞控制在 5 個(gè)以內(nèi)。這里有一個(gè)容易踩坑的地方很多模型對(duì)“輸出 JSON”理解不穩(wěn)定偶爾會(huì)在 JSON 前后加說明文字。更穩(wěn)妥的方案是在 API 調(diào)用層面把response_format設(shè)為json_objectOpenAI 系兼容接口、或在提示詞里加“只輸出 JSON不要任何解釋”。后面代碼示例我會(huì)給出一種通用處理方式。4.2 建立人物檔案模型生成的設(shè)定草稿只是一個(gè)起點(diǎn)。你需要手工篩選、修改形成真正屬于你的人物檔案。這一步不能省因?yàn)槟P蜕傻膭?dòng)機(jī)往往偏“邏輯正確”但不夠“有血有肉”。修好之后把人物檔案保存為一個(gè) Markdown 文件。比如# 人物檔案陸明遠(yuǎn) - 身份失去記憶的調(diào)香師27 歲 - 外在特點(diǎn)左手中指有舊傷疤常年帶著一只舊懷表 - 性格底色謹(jǐn)慎、疏離、但在氣味面前會(huì)失控 - 核心動(dòng)機(jī)找回自己的過去 - 核心秘密他的記憶不是丟失而是被一家香水公司清洗過 - 說話習(xí)慣句子短很少用形容詞 - 禁忌拒絕談起玫瑰花這個(gè)文件后續(xù)既是創(chuàng)作時(shí)的參考也是 RAG 檢索庫里的核心條目。4.3 生成章節(jié)大綱有了人物檔案你可以讓模型生成章節(jié)大綱。和大綱相比模型的優(yōu)點(diǎn)是可以快速提供多種劇情走向幫助你打破思維定式。請(qǐng)基于以下內(nèi)容生成第一章的三種不同寫法大綱。 人物檔案 {把上面的人物檔案粘貼進(jìn)來} 故事梗概 {粘貼你的故事梗概} 要求 1. 三種寫法分別側(cè)重懸疑氛圍、人物內(nèi)心、事件推進(jìn) 2. 每種寫法給出本場(chǎng)目標(biāo)、沖突點(diǎn)、結(jié)尾鉤子 3. 控制輸出在 600 字以內(nèi)注意大綱是模型輸出中少數(shù)可以“放心讓 AI 自由發(fā)揮”的環(huán)節(jié)。因?yàn)榇缶V不直接進(jìn)入正文即使跑偏損失也很小。但正因如此它更適合用來做“腦暴”而不是替代你決策。4.4 章節(jié)擴(kuò)寫把大綱變成正文這是最需要控制的一步。很多創(chuàng)作者在這里犯同樣的錯(cuò)誤直接把大綱丟給模型說“寫出來”。問題在于缺少約束的正文會(huì)“泛化”。模型會(huì)寫出一段文筆優(yōu)美、但完全不像你風(fēng)格的內(nèi)容。更有效的方式是給模型一個(gè)“錨點(diǎn)”開頭一句話、結(jié)尾一句話、必須保留的三個(gè)情節(jié)點(diǎn)、以及你希望的語氣風(fēng)格。例如請(qǐng)根據(jù)以下結(jié)構(gòu)擴(kuò)寫第一章正文。 【已有背景】 下雨的城市調(diào)香師陸明遠(yuǎn)在一家倒閉的香水店里發(fā)現(xiàn)了一瓶沒有標(biāo)簽的香水。 【開場(chǎng)句】 雨滴砸在玻璃櫥窗上城市像一塊被泡發(fā)的舊海綿。 【結(jié)尾句】 他打開香水瓶聞到了一股不該在這個(gè)時(shí)代出現(xiàn)的味道十六年前母親廚房里的桂花香。 【本場(chǎng)情節(jié)點(diǎn)】 1. 陸明遠(yuǎn)進(jìn)入香水店躲雨 2. 他發(fā)現(xiàn)香水瓶上沒有標(biāo)簽但瓶身有一道熟悉的劃痕 3. 店主出現(xiàn)言辭閃爍似乎認(rèn)識(shí)他 4. 他偷偷拿走香水瓶離開店鋪 【寫作要求】 - 第三人稱限知視角跟隨陸明遠(yuǎn)的所見所感 - 段落短句為主氛圍偏冷峻 - 不要解釋人物心理通過動(dòng)作和感官描寫暗示情緒 - 輸出 1200 字左右這個(gè) prompt 的意義在于你做了所有關(guān)鍵決策模型只負(fù)責(zé)文字執(zhí)行。這樣生成的結(jié)果即使不滿意你也可以定位到具體問題——是情節(jié)不夠刺激還是風(fēng)格不對(duì)而不是籠統(tǒng)地覺得“AI 寫得不行”。4.5 運(yùn)行與驗(yàn)證關(guān)于如何運(yùn)行我用一個(gè)通用 Python 示例來演示。這里不再限定具體廠商思路是用 OpenAI 兼容接口通過base_url切換云端或本地服務(wù)。這樣代碼可以復(fù)用。# 文件路徑scripts/generate_chapter.py import os import json from openai import OpenAI # 方式一云端 API通過環(huán)境變量讀取 Key client OpenAI( api_keyos.getenv(LLM_API_KEY), base_urlos.getenv(LLM_BASE_URL), # 例如云端服務(wù)的地址 ) # 方式二本地 Ollama 服務(wù)默認(rèn)監(jiān)聽 11434 # client OpenAI( # api_keyollama, # base_urlhttp://localhost:11434/v1, # ) def generate_chapter(prompt: str, model: str qwen2.5:14b) - str: try: resp client.chat.completions.create( modelmodel, messages[ {role: system, content: 你是一位擅長(zhǎng)文學(xué)創(chuàng)作的編輯善于在框架內(nèi)寫出高質(zhì)量的小說正文。}, {role: user, content: prompt}, ], temperature0.8, ) return resp.choices[0].message.content except Exception as e: # 生產(chǎn)環(huán)境應(yīng)記錄日志并做重試這里先拋出方便定位 raise RuntimeError(fLLM 調(diào)用失敗: {e}) def load_prompt_from_file(file_path: str) - str: with open(file_path, r, encodingutf-8) as f: return f.read() if __name__ __main__: prompt load_prompt_from_file(prompts/chapter_01.txt) result generate_chapter(prompt) print(result) # 保存結(jié)果保留原始輸出方便對(duì)比和回滾 with open(outputs/chapter_01_draft.md, w, encodingutf-8) as f: f.write(result)這個(gè)腳本有幾個(gè)值得留意的設(shè)計(jì)用環(huán)境變量管理 Key避免硬編碼。用文件讀取 prompt方便版本管理。輸出到outputs/目錄且不覆蓋原文件。每一次生成的草稿都保留這對(duì)后續(xù)對(duì)比模型效果很重要。運(yùn)行命令export LLM_API_KEYyour_key export LLM_BASE_URLhttps://your-api-endpoint python scripts/generate_chapter.py如果你的模型在本地把LLM_BASE_URL改成http://localhost:11434/v1并把 API Key 填成ollama即可。驗(yàn)證生成效果我建議按四步走是否完整有沒有漏掉某個(gè)情節(jié)點(diǎn)的展開。是否一致人物性格、稱呼、服化道細(xì)節(jié)是否和檔案一致。是否可讀拋開文學(xué)性不談句子是否通順、節(jié)奏是否正常。是否符合預(yù)期這是最主觀的一步也是必須由創(chuàng)作者判斷的一步。如果前兩步不過關(guān)通常不是模型不行而是你的提示詞里信息不夠。把人物檔案和更多背景粘進(jìn)去效果立刻不同。5. 用 RAG 構(gòu)建“設(shè)定檢索庫”當(dāng)你開始寫長(zhǎng)篇小說很快就會(huì)面臨一個(gè)尷尬問題提示詞放不下全部設(shè)定。假設(shè)你有 50 個(gè)人物檔案、20 個(gè)地點(diǎn)、30 年時(shí)間線這些加起來的字?jǐn)?shù)可能超過 3 萬。每次寫一章之前都要手動(dòng)把相關(guān)內(nèi)容挑選出來這個(gè)成本會(huì)壓垮創(chuàng)作熱情。這時(shí)候就需要一個(gè)非常精簡(jiǎn)的 RAG檢索增強(qiáng)生成流程。核心思路是把設(shè)定文檔切成小塊存入向量數(shù)據(jù)庫生成正文前先用向量檢索找出與當(dāng)前章節(jié)最相關(guān)的設(shè)定拼進(jìn)提示詞。這里我給一個(gè)最小可用的簡(jiǎn)化實(shí)現(xiàn)足夠跑通概念。生產(chǎn)環(huán)境可以考慮用更完整的框架但原理都一樣。# 文件路徑scripts/build_rag_index.py # 這是一個(gè)概念演示版本生產(chǎn)環(huán)境請(qǐng)使用正式向量庫并處理更多細(xì)節(jié) import os import json from pathlib import Path # 這里用輕量級(jí)方式模擬向量檢索按關(guān)鍵詞打分 # 生產(chǎn)環(huán)境建議使用開源的向量數(shù)據(jù)庫并接入真正的 embedding 模型 SETTING_DIR Path(settings) # 存放設(shè)定文檔的目錄 INDEX_FILE Path(setting_index.json) def build_keyword_index(): index [] for md_file in SETTING_DIR.glob(*.md): content md_file.read_text(encodingutf-8) # 提取文件標(biāo)題和首行作為檢索入口 lines content.splitlines() title lines[0].lstrip(# ).strip() if lines else md_file.stem # 簡(jiǎn)單切分按段落拆塊 chunks [] current_chunk [] for line in lines[1:]: if line.strip() : if current_chunk: chunks.append( .join(current_chunk)) current_chunk [] else: current_chunk.append(line.strip()) if current_chunk: chunks.append( .join(current_chunk)) for chunk in chunks: if len(chunk) 30: continue index.append({ title: title, file: md_file.name, content: chunk, keywords: set(chunk[:80].split()) # 簡(jiǎn)化關(guān)鍵詞提取 }) return index def retrieve(query: str, index: list, top_k: int 3): # 簡(jiǎn)化打分query 中的字詞在塊中出現(xiàn)的次數(shù)越多權(quán)重越高 query_terms set(query.replace(, ).replace(。, ).split()) scored [] for item in index: overlap len(query_terms item[keywords]) scored.append((overlap, item)) scored.sort(keylambda x: x[0], reverseTrue) return [item for score, item in scored[:top_k] if score 0] if __name__ __main__: index build_keyword_index() print(f索引構(gòu)建完成共 {len(index)} 個(gè)文本塊) query 陸明遠(yuǎn) 桂花香 香水店 下雨 results retrieve(query, index) for r in results: print(---) print(f來源: {r[file]} | 標(biāo)題: {r[title]}) print(r[content][:200])這段代碼故意沒有引入真實(shí)的向量庫原因是為了讓你先理解流程。真正上生產(chǎn)時(shí)你需要用 embedding 模型把文本轉(zhuǎn)成向量而不是關(guān)鍵詞打分使用專門的向量數(shù)據(jù)庫或者至少在內(nèi)存里維護(hù)向量索引在做正文生成前先用當(dāng)前章節(jié)的情節(jié)點(diǎn)作為 query檢索出相關(guān)設(shè)定再拼進(jìn) prompt。這個(gè)“檢索 → 拼裝 → 生成 → 校驗(yàn)”的循環(huán)是長(zhǎng)篇?jiǎng)?chuàng)作工作流的基本單位。比起把全書塞進(jìn)上下文這要省 token 得多而且效果更穩(wěn)定。6. 模型精度fp16、fp32、bf16 對(duì)小說創(chuàng)作意味著什么寫小說最怕什么最怕文本“崩字”。一段話中出現(xiàn)奇怪的重復(fù)、邏輯跳躍、用詞失衡即使概率只有 5%長(zhǎng)篇里也會(huì)頻繁遇到。而模型精度恰恰會(huì)影響這種“長(zhǎng)尾錯(cuò)誤”的概率。這里把三個(gè)概念講清楚。6.1 fp3232 位浮點(diǎn)模型訓(xùn)練和推理最常見的表示方式之一。精度最高但顯存占用也最大。一個(gè) 70B 級(jí)別的模型用 fp32 推理普通消費(fèi)級(jí)顯卡基本帶不動(dòng)。6.2 fp1616 位浮點(diǎn)半精度顯存占用比 fp32 少一半推理速度更快。在生成文本時(shí)fp16 通常是本地部署的質(zhì)量?jī)?yōu)先選擇。但它的數(shù)值范圍有限對(duì)特別大或特別小的數(shù)值不敏感可能導(dǎo)致訓(xùn)練時(shí)出現(xiàn)精度問題。好在推理階段尤其對(duì)創(chuàng)作類文本fp16 的損失肉眼幾乎不可見。6.3 bf16bfloat16同樣是 16 位但保留了 fp32 的指數(shù)范圍舍棄了更多尾數(shù)精度。它的優(yōu)勢(shì)是訓(xùn)練穩(wěn)定性更好不容易溢出。在生成任務(wù)中bf16 的質(zhì)量通常和 fp16 非常接近。很多新硬件的推理框架默認(rèn)用 bf16。精度格式顯存占用數(shù)值范圍文本生成穩(wěn)定性適用場(chǎng)景fp32高大參考基準(zhǔn)小模型、對(duì)精度極度敏感的場(chǎng)景fp16中較小好通用本地推理創(chuàng)作文本夠用bf16中較大很好新硬件推理訓(xùn)練與生成通用對(duì)于寫小說這個(gè)場(chǎng)景我的建議是如果你的硬件支持 bf16優(yōu)先用 bf16否則 fp16 也完全夠。只有在顯存實(shí)在不足時(shí)才考慮 4-bit 量化但要在質(zhì)量與資源之間做取舍。你可以在 Ollama 中通過模型的 tag 或環(huán)境變量切換精度具體參數(shù)以你的硬件驅(qū)動(dòng)和模型倉庫說明為準(zhǔn)。這里不寫死命令因?yàn)椴煌脚_(tái)差異較大重點(diǎn)是你需要知道當(dāng)生成結(jié)果出現(xiàn)莫名其妙的邏輯斷裂時(shí)除了檢查 prompt還應(yīng)該考慮精度設(shè)置是否過低。7. 創(chuàng)作場(chǎng)景的版本管理與回滾寫小說和寫代碼有一個(gè)共通點(diǎn)版本管理很重要。而且在這個(gè)場(chǎng)景里版本管理不只是“保存舊稿”而是“保存每一次決策”。我的建議是建立如下目錄結(jié)構(gòu)project/ ├── prompts/ # 所有可復(fù)用的提示詞按版本保存 │ ├── chapter_01_v1.txt │ ├── chapter_01_v2.txt │ └── compare_prompt.py # 對(duì)比不同 prompt 生成的正文 ├── setting_docs/ # 人物檔案、世界觀、時(shí)間線 │ ├── characters/ │ ├── world/ │ └── timeline/ ├── outputs/ # 模型生成結(jié)果按章/版本保存 │ ├── chapter_01_draft_v1.md │ └── chapter_01_draft_v2.md ├── scripts/ # 調(diào)用腳本、RAG 索引、校驗(yàn)?zāi)_本 │ └── generate_chapter.py └── git_repo/ # 或者直接在項(xiàng)目根目錄用 git這樣做的原因很明顯你經(jīng)常需要回到“上一版 prompt”重新生成。如果 prompt 和輸出散落在對(duì)話記錄里回顧成本會(huì)非常高。一個(gè)實(shí)用技巧在輸出文件的頭部加一行注釋記錄本次生成使用的模型、溫度參數(shù)、prompt 文件路徑。這樣可以快速復(fù)盤什么條件下效果最好。!-- 元信息: modelqwen2.5:14b, temp0.8, promptprompts/chapter_01_v2.txt, date2025-01-10 --正文開始……這種“元信息優(yōu)先”的思想是從數(shù)據(jù)工程和實(shí)驗(yàn)追蹤里借鑒來的。它不增加多少工作量卻能避免很多“咦上次那版是怎么寫出來的”的迷茫。8. 常見問題與排查思路在接入 LLM 創(chuàng)作流程時(shí)你會(huì)遇到幾類固定問題。提前知道原因排查會(huì)快很多。問題現(xiàn)象可能原因排查方式解決方案模型生成的設(shè)定前后矛盾提示詞中設(shè)定信息不足或上下文被截?cái)鄼z查 prompt 中是否包含人物檔案和世界觀摘要增加 RAG 檢索或把關(guān)鍵設(shè)定寫入 prompt生成正文“文筆很好但不像你的風(fēng)格”缺少風(fēng)格示例模型在模仿通用文學(xué)腔在 prompt 中加入你自己的 2-3 個(gè)句子作為風(fēng)格參考維護(hù)一個(gè)風(fēng)格樣本文件隨 prompt 一起提交同一段提示詞多次生成結(jié)果差異過大溫度參數(shù)設(shè)置過高檢查 temperature 參數(shù)創(chuàng)作草稿可用 0.7-0.9設(shè)定整理建議降到 0.3 以下模型輸出 JSON 格式不穩(wěn)定提示詞沒有明確約束或模型版本不支持強(qiáng)制 JSON開啟 response_format 或后處理去掉多余內(nèi)容用正則提取 JSON 塊失敗時(shí)重試一次本地推理速度慢模型過大、精度過高、顯存不足查看 ollama ps 或 nvidia-smi 監(jiān)控資源換更小模型或使用量化版本長(zhǎng)文生成到一半開始重復(fù)語句上下文過長(zhǎng)導(dǎo)致注意力分散檢查輸出文本長(zhǎng)度與模型窗口控制單次生成篇幅按章節(jié)生成而不是整本生成特別提醒一個(gè)創(chuàng)作場(chǎng)景特有的問題不要用默認(rèn)的“對(duì)話式”思維去寫提示詞。模型在對(duì)話中會(huì)逐漸“討好”你給出的回復(fù)越來越趨于平均。你需要的是“任務(wù)式”prompt目標(biāo)明確、邊界清晰、輸出格式固定。9. 最佳實(shí)踐與安全邊界最后一部分我想把工程上的建議和創(chuàng)作倫理結(jié)合著說。9.1 把模型當(dāng)“執(zhí)行編輯器”而不是“共同作者”在創(chuàng)作層面建議你始終保留標(biāo)題、關(guān)鍵情節(jié)、人物弧光和最終潤(rùn)色的決策權(quán)。這不僅是風(fēng)格問題也是版權(quán)和創(chuàng)作完整性問題的底線。AI 生成的內(nèi)容可以作為草稿和素材但最終的文學(xué)判斷必須由人完成。9.2 做好合規(guī)與授權(quán)這里有兩層意思。第一你使用的 API 和模型必須符合服務(wù)商的條款。第二如果你計(jì)劃發(fā)布作品尤其是商業(yè)發(fā)布建議明確標(biāo)注哪些部分使用了 AI 輔助創(chuàng)作。不同平臺(tái)對(duì) AI 輔助內(nèi)容的政策不同發(fā)布前先了解目標(biāo)平臺(tái)的規(guī)定。涉及他人作品、受版權(quán)保護(hù)的資料時(shí)不要隨意喂給模型并要求模仿生成這是法律風(fēng)險(xiǎn)較高的操作。9.3 設(shè)定文檔要保持單一事實(shí)源不要讓同一份人物信息既出現(xiàn)在角色檔案里又散落在章節(jié)注釋里。正確做法是角色檔案是唯一權(quán)威來源章節(jié)內(nèi)不同可以臨時(shí)調(diào)整但最終要同步回檔案。這樣RAG 檢索時(shí)拿到的永遠(yuǎn)是修正后的信息而不是某次草稿里的舊設(shè)定。9.4 做好輸出安全與隱私如果你的作品尚未公開注意不要把未公開的大綱、章節(jié)、人物設(shè)定上傳到不受信任的第三方模型平臺(tái)。敏感內(nèi)容請(qǐng)選擇本地部署方案或者與簽署了保密協(xié)議的云服務(wù)商合作。對(duì)外調(diào)用 API 時(shí)日志里不要記錄完整 prompt 和輸出只記錄任務(wù)編號(hào)、耗時(shí)、成功失敗狀態(tài)。9.5 建立“人審”環(huán)節(jié)一次完整的模型輸出至少需要經(jīng)過一遍人工審閱。你可以把審閱拆成兩遍第一遍看情節(jié)和人物第二遍看語言和風(fēng)格。模型很少能一次寫出完全不用改的文本但能把“從零開始”變成“改稿”這個(gè)改動(dòng)本身就是效率的巨大提升。10. 總結(jié)從一次最小閉環(huán)開始回到標(biāo)題“LLMs Set My Fiction Free”。如果把它理解成“AI 幫我寫小說”方向就偏了。真正的“自由”來自把繁瑣的擴(kuò)展、檢索、校驗(yàn)工作交給模型讓創(chuàng)作者把精力集中在最擅長(zhǎng)的判斷和決策上。你可以從一個(gè)小項(xiàng)目起步不需要搭建完整的系統(tǒng)選一個(gè)好用的云端 API 或本地模型跑通一次生成本文鏈路寫一個(gè)固定格式的 prompt保存為文件把自己的風(fēng)格樣本放進(jìn)去生成一章 500 字左右的測(cè)試文本手工改到滿意記錄下“哪些提示詞改動(dòng)效果最明顯”。等這個(gè)小閉環(huán)穩(wěn)定之后再逐步加入人物檔案、RAG 檢索、版本管理、結(jié)果校驗(yàn)。這樣你不會(huì)被復(fù)雜度嚇退也能在看到真實(shí)效果后更清楚自己到底需要哪一層能力。技術(shù)只是工具故事還是你的。