抽卡到可復(fù)現(xiàn):AI藝術(shù)與ChatGPT提示工程實(shí)戰(zhàn))
簡(jiǎn)介《AI藝術(shù)與ChatGPT提示工程指南》圍繞提示工程與AI藝術(shù)創(chuàng)作展開面向?qū)hatGPT對(duì)話式提示和Midjourney等繪圖工具感興趣的初學(xué)者及進(jìn)階讀者幫助其從零理解提示的構(gòu)成與設(shè)計(jì)邏輯。全書從提示工程基礎(chǔ)講起依次討論負(fù)提示與零提示、ReAct提示、Midjourney等工具的AI藝術(shù)提示設(shè)計(jì)、迭代式提示細(xì)化以及語言與意象在提示中的作用并附Leonardo應(yīng)用案例與示例提示兼顧方法框架與實(shí)操參考。資源包為1個(gè)PDF文件約2.31MB體積輕便便于在電腦或移動(dòng)端隨時(shí)查閱。目前已有69人學(xué)習(xí)適合希望系統(tǒng)梳理提示工程知識(shí)、提升AI藝術(shù)出圖與對(duì)話質(zhì)量的讀者按章節(jié)研讀和查閱。1. 同一句提示跑十次出十個(gè)結(jié)果問題多半不在模型有人把「賽博朋克城市超好看」丟進(jìn) Midjourney十次出十張風(fēng)格不一的圖于是判斷模型不穩(wěn)定。拆開看這句提示里主體只有一個(gè)模糊名詞沒有風(fēng)格錨點(diǎn)、沒有鏡頭語言、沒有負(fù)向約束模型每次都在合法解空間里隨機(jī)采樣。這份《AI藝術(shù)與ChatGPT提示工程指南》講的就是把「碰運(yùn)氣」變成可重復(fù)流程提示工程的三層骨架、零提示與負(fù)提示的邊界、ReAct 任務(wù)鏈、Midjourney 與 Leonardo 的出圖參數(shù)以及 ChatGPT 多輪對(duì)話里的迭代式細(xì)化。適合已經(jīng)能用工具出圖、但結(jié)果不可控的人也適合要把提示交給團(tuán)隊(duì)復(fù)用的從業(yè)者。下面按「骨架—任務(wù)鏈—出圖參數(shù)—排查—驗(yàn)收」的順序拆。2. 提示的三層骨架主體、修飾符、固化劑怎么分工原書第一章把提示拆成幾個(gè)可命名的部件主體subject、修飾符modifier、固化劑solidifier再加上變體提示和負(fù)提示。這個(gè)拆法看著樸素落地時(shí)非常管用因?yàn)樗选笇懸痪浜锰崾尽棺兂闪恕柑顜讉€(gè)槽位」。我一般會(huì)先把一句自然語言提示按這三層切開再?zèng)Q定哪一層需要?jiǎng)印⒛囊粚颖仨氭i死。切開之后你會(huì)發(fā)現(xiàn)大部分翻車都發(fā)生在修飾符互相打架而不是主體寫錯(cuò)。2.1 主體提示把「想要什么」壓縮成一個(gè)可檢索的名詞短語主體是提示里承擔(dān)核心語義的那部分可以是人、地點(diǎn)、物體也可以是一個(gè)動(dòng)作場(chǎng)景。原書強(qiáng)調(diào)定義主體時(shí)要同時(shí)想清楚兩件事你要達(dá)到什么目標(biāo)以及看結(jié)果的人會(huì)怎么理解它。這兩句話翻譯成操作就是主體必須能被模型映射到訓(xùn)練數(shù)據(jù)里存在的視覺或語義概念不能是一個(gè)只有你自己懂的抽象詞。我習(xí)慣用一個(gè)「三問壓縮法」處理主體。第一問這個(gè)東西的最小可識(shí)別名詞是什么第二問它處于什么狀態(tài)或環(huán)境第三問哪些限定詞是必須保留、刪掉就變味的。比如「一個(gè)很酷的機(jī)器人」經(jīng)過三問會(huì)變成「a rusted industrial robot with exposed hydraulic joints, standing in a flooded factory」主體從形容詞堆砌變成了可渲染的實(shí)體加環(huán)境。# subject_slots.py # 主體拆成三個(gè)槽位避免把狀態(tài)和環(huán)境混進(jìn)名詞里 SUBJECT { entity: a rusted industrial robot, # 最小可識(shí)別名詞 state: exposed hydraulic joints, one arm missing, # 狀態(tài)限定 context: standing in a flooded factory, # 環(huán)境限定 } def build_subject(slots): # 用逗號(hào)連接順序固定為實(shí)體→狀態(tài)→環(huán)境 return , .join(v for v in slots.values() if v) print(build_subject(SUBJECT)) # 輸出a rusted industrial robot, exposed hydraulic joints, one arm missing, standing in a flooded factory這段代碼的價(jià)值不在拼字符串而在強(qiáng)制你把「實(shí)體」和「狀態(tài)」分開。實(shí)體槽位負(fù)責(zé)讓模型認(rèn)出畫什么狀態(tài)槽位負(fù)責(zé)控制差異環(huán)境槽位負(fù)責(zé)構(gòu)圖背景。參數(shù)上entity盡量控制在 5 個(gè)詞以內(nèi)超過之后模型對(duì)前置詞的注意力會(huì)被稀釋state一次只寫一到兩個(gè)特征寫三個(gè)以上容易出現(xiàn)肢體錯(cuò)亂context決定畫面縱深室內(nèi)場(chǎng)景建議帶上材質(zhì)或光源線索。主體寫完之后要做一次「可檢索性檢查」把主體短語單獨(dú)丟進(jìn)搜索引擎或圖庫(kù)如果能搜到大量同類圖說明模型大概率認(rèn)識(shí)如果搜出來全是無關(guān)內(nèi)容說明這個(gè)詞是你自造的需要換成更通用的說法。這個(gè)動(dòng)作花不了一分鐘但能省掉后面反復(fù)抽卡的時(shí)間。2.2 修飾符提示用形容詞和限定詞收窄輸出空間修飾符是加在主體上的額外詞或短語作用是提供上下文、清晰度和特異性。原書舉的例子很典型把「全球變暖」改成「全球變暖的原因和解決方案」輸出就從泛泛而談變成了兩面分析。修飾符的本質(zhì)是給模型一個(gè)更窄的采樣區(qū)間而不是給它更多形容詞。落到 AI 藝術(shù)出圖上我通常把修飾符分成四個(gè)槽位風(fēng)格、媒介材質(zhì)、光照色彩、鏡頭構(gòu)圖。每個(gè)槽位只放一個(gè)主取值最多加一個(gè)補(bǔ)充取值。四個(gè)槽位全填滿提示長(zhǎng)度大約在 25 到 40 個(gè)詞之間這個(gè)區(qū)間對(duì) Midjourney 和 Leonardo 都比較友好。槽位作用示例取值常見錯(cuò)誤風(fēng)格定整體調(diào)性cinematic concept art、editorial illustration同時(shí)寫三種風(fēng)格互相稀釋媒介材質(zhì)定表面質(zhì)感oil on canvas、35mm film scan、brushed aluminum和風(fēng)格槽位語義重復(fù)光照色彩定氛圍cold dawn light、warm 2700K lamp light光源方向前后矛盾鏡頭構(gòu)圖定視角與景別wide shot、macro、low angle與主體尺度沖突比如微距拍建筑修飾符最容易翻車的地方是「堆」。有人覺得多寫幾個(gè)風(fēng)格詞總有一個(gè)能命中實(shí)際結(jié)果是模型把幾種風(fēng)格平均成一個(gè)四不像。我的血淚經(jīng)驗(yàn)是風(fēng)格槽位只留一個(gè)主詞想試第二種風(fēng)格就另開一條變體提示不要在同一個(gè)提示里做風(fēng)格融合。真要融合也要寫成「A 為主B 只影響材質(zhì)」這種帶主次的表述。# modifier_slots.py # 四個(gè)修飾符槽位每個(gè)槽位一個(gè)主值加一個(gè)可選補(bǔ)充值 MODIFIERS { style: [cinematic concept art, muted color palette], medium: [35mm film scan, visible grain], light: [cold dawn light, volumetric fog], camera: [wide shot, shallow depth of field], } def flatten_modifiers(mods): # 按槽位順序展開保證每次拼裝語序一致 result [] for slot in (style, medium, light, camera): result.extend(mods.get(slot, [])) return , .join(result) print(flatten_modifiers(MODIFIERS))flatten_modifiers里把槽位順序?qū)懰朗菫榱俗屘崾究蓮?fù)現(xiàn)。Midjourney 和多數(shù)文生圖工具對(duì)前置詞更敏感風(fēng)格放在最前面、鏡頭放在最后出來的畫面穩(wěn)定性明顯好于隨機(jī)順序。參數(shù)上每個(gè)槽位列表長(zhǎng)度建議不超過 2總修飾符數(shù)量控制在 8 個(gè)以內(nèi)超過 10 個(gè)之后新增的詞基本是在互相搶權(quán)重畫質(zhì)不會(huì)提升構(gòu)圖反而更容易散。2.3 固化劑與變體讓輸出穩(wěn)定在可復(fù)用模板上固化劑是原書里容易被忽略的一節(jié)它指的是提示末尾那組用來「錨住」質(zhì)量的詞比如 high detail、consistent composition、neutral color grading。這些詞單獨(dú)看很虛但它們?cè)谔崾窘Y(jié)構(gòu)里承擔(dān)的是收尾和穩(wěn)定作用相當(dāng)于給模型的輸出畫一條底線。我一般把固化劑控制在 3 到 5 個(gè)詞放在提示最后不參與風(fēng)格競(jìng)爭(zhēng)。變體提示則是在主體和固化劑不變的前提下只替換一個(gè)修飾符槽位。這樣每次只動(dòng)一個(gè)變量你才能判斷到底是哪個(gè)詞導(dǎo)致了畫面變化。很多人做迭代式細(xì)化時(shí)一次改三四個(gè)詞最后出圖變好了也不知道是誰的功勞變差了也找不到原因這就是典型的黑匣子式調(diào)參。# 提示模板庫(kù)的目錄結(jié)構(gòu)按主體分目錄按版本存文件 prompts/ ├── lighthouse/ │ ├── v01_subject.txt # 只寫主體 │ ├── v02_modifiers.txt # 加修飾符 │ ├── v03_solidifier.txt # 加固化劑 │ └── runs.csv # 每次跑圖的參數(shù)與人工評(píng)分 └── robot_factory/ ├── v01_subject.txt └── runs.csv目錄結(jié)構(gòu)看著簡(jiǎn)單但它解決的是「提示寫完就丟」的問題。每個(gè)主體一個(gè)目錄版本號(hào)遞增runs.csv記錄種子、參數(shù)和評(píng)分。下次要復(fù)現(xiàn)某張圖直接按版本號(hào)找文件不用翻聊天記錄。參數(shù)命名上v01到v03對(duì)應(yīng)骨架搭建的三個(gè)階段后面做變體就從v03a、v03b分支不要覆蓋原文件。固化劑還有一個(gè)用法是跨工具遷移。Midjourney 和 Leonardo 的語法不同但「高質(zhì)量、構(gòu)圖完整、色彩克制」這組語義是通用的。我會(huì)把這組詞單獨(dú)存一個(gè)solidifier.txt換工具時(shí)只改參數(shù)和負(fù)向詞固化劑直接復(fù)用。這樣同一套審美底線能在不同工具之間保持一致不至于換個(gè)平臺(tái)就完全變味。3. 從零提示到 ReAct把單輪指令升級(jí)成任務(wù)鏈零提示、負(fù)提示、ReAct 是原書里跨度最大的三節(jié)分別對(duì)應(yīng)「不給例子」「給反向約束」「給多步推理結(jié)構(gòu)」。這三樣不是越高級(jí)越好而是各有適用邊界。用錯(cuò)場(chǎng)景的代價(jià)很直接零提示處理格式任務(wù)會(huì)得到一堆自由發(fā)揮負(fù)提示堆太多會(huì)擠占正向語義ReAct 用在單步問答上純屬浪費(fèi) token。3.1 零提示的適用邊界與觸發(fā)條件零提示就是不給示例、不給拆解直接把任務(wù)丟給模型。它適合三類場(chǎng)景開放式頭腦風(fēng)暴、通用文案改寫、格式要求寬松的問答。比如「給這個(gè)產(chǎn)品寫五條賣點(diǎn)」零提示往往比給一堆示例更自然因?yàn)槭纠龝?huì)限制模型的表達(dá)多樣性。但零提示有兩個(gè)明確的失效邊界。第一是格式嚴(yán)格的任務(wù)比如要求輸出固定字段的 JSON、固定列數(shù)的表格零提示下模型會(huì)自由增減字段。第二是專業(yè)術(shù)語密集的任務(wù)模型不知道你所在團(tuán)隊(duì)的縮寫含義零提示會(huì)按大眾語料去猜。這兩個(gè)邊界不需要復(fù)雜方案加一條格式約束或一個(gè)字段說明就能解決。# zero_prompt_guard.py # 零提示加一條最小格式約束避免輸出自由發(fā)揮 PROMPT 任務(wù)為這款便攜投影儀寫三條賣點(diǎn)。 約束 1. 每條不超過 20 個(gè)字。 2. 必須包含一個(gè)具體參數(shù)沒有參數(shù)就寫“參數(shù)待補(bǔ)”。 3. 只輸出三條不要解釋。 print(PROMPT)這段模板的關(guān)鍵在第三條「只輸出三條不要解釋」。零提示翻車最多的情況不是內(nèi)容差而是模型附贈(zèng)一段「希望以上對(duì)你有幫助」。加一句硬約束輸出立刻干凈。參數(shù)上約束條數(shù)控制在 3 條以內(nèi)超過之后模型會(huì)開始丟約束每條約束只寫一個(gè)要求不要把「不超過 20 字且包含參數(shù)且語氣活潑」塞進(jìn)同一條。零提示還有一個(gè)隱性成本結(jié)果不可回歸。同一句提示今天跑和下周跑輸出可能完全不同。所以我在需要復(fù)現(xiàn)的任務(wù)里不用純零提示至少加一條固化約束或一個(gè)輸出模板。這個(gè)習(xí)慣是從一次對(duì)客演示翻車之后養(yǎng)成的當(dāng)時(shí)現(xiàn)場(chǎng)重跑同一句提示輸出風(fēng)格完全變了場(chǎng)面很尷尬。3.2 負(fù)提示寫「不要什么」比寫「要什么」更難負(fù)提示在兩個(gè)場(chǎng)景里最有用文生圖里排除不想要的元素對(duì)話模型里排除不想要的表達(dá)方式。Midjourney 用--no參數(shù)接負(fù)向詞Stable Diffusion 系工具用單獨(dú)的 Negative Prompt 輸入框Leonardo 也是分欄填寫。語法不同但邏輯一樣負(fù)向詞是在采樣時(shí)降低對(duì)應(yīng)概念的權(quán)重不是硬性禁止。負(fù)向詞我一般分四類管理每類只留最必要的兩三個(gè)。文字水印類text、watermark、signature幾乎每次都要帶解剖錯(cuò)誤類extra fingers、deformed hands在人像和手部特寫時(shí)帶風(fēng)格污染類oversaturated、cluttered background在需要干凈畫面時(shí)帶構(gòu)圖干擾類cropped head、out of frame在全身構(gòu)圖時(shí)帶。負(fù)向類別典型詞適用場(chǎng)景不建議文字水印text、watermark、logo所有出圖任務(wù)一次寫十幾個(gè)同義詞解剖錯(cuò)誤extra fingers、deformed hands人像、手部特寫全身遠(yuǎn)景也堆手部詞風(fēng)格污染oversaturated、noisy background需要干凈背景與正向風(fēng)格詞沖突構(gòu)圖干擾cropped、out of frame全身、建筑全景微距場(chǎng)景使用負(fù)提示最常見的誤用是「越多越安全」。Midjourney 的--no后面跟的詞同樣占用解析預(yù)算堆二十個(gè)負(fù)向詞正向提示的權(quán)重會(huì)被明顯稀釋畫面變得保守、灰、沒有重點(diǎn)。我的做法是負(fù)向詞總數(shù)不超過 6 個(gè)而且每次只加當(dāng)前批次真正出問題的詞不加「預(yù)防性」的詞。注意負(fù)提示不是所有工具都等效。Midjourney 的--no對(duì)具體物體有效對(duì)抽象風(fēng)格詞效果有限Stable Diffusion 的 Negative Prompt 權(quán)重更強(qiáng)寫多了容易把畫面壓死。換工具時(shí)負(fù)向詞要重新測(cè)不能直接照搬。3.3 ReAct 提示的四段式結(jié)構(gòu)與一個(gè)可抄的模板ReAct 的核心是「推理 行動(dòng)」交替模型先寫一段思考說明下一步為什么這么做再選擇一個(gè)動(dòng)作去執(zhí)行拿到觀察結(jié)果后繼續(xù)下一輪。它適合需要多步檢索、多工具調(diào)用、或者需要展示中間過程的任務(wù)比如資料匯總、故障排查、多條件篩選。單步問答用 ReAct 只會(huì)讓輸出變長(zhǎng)不會(huì)變準(zhǔn)。我把 ReAct 提示固定成四段角色與目標(biāo)、可用動(dòng)作清單、思考-行動(dòng)-觀察循環(huán)規(guī)則、終止條件。四段缺一不可缺動(dòng)作清單模型會(huì)自己編工具缺終止條件模型會(huì)無限循環(huán)缺循環(huán)規(guī)則模型會(huì)一次性把答案寫完、不走中間步驟。# react_prompt.py REACT_TEMPLATE 你是一個(gè){role}。 目標(biāo){goal} 可用動(dòng)作每次只能選一個(gè) {actions} 執(zhí)行規(guī)則 1. 每輪先輸出“思考”說明下一步理由不超過兩句話。 2. 再輸出“動(dòng)作”加動(dòng)作名和參數(shù)。 3. 收到“觀察”后進(jìn)入下一輪最多{n}輪。 4. 信息足夠時(shí)輸出“結(jié)論”并停止不要再調(diào)用動(dòng)作。 終止條件{stop_condition} prompt REACT_TEMPLATE.format( role設(shè)備故障排查助手, goal根據(jù)現(xiàn)象定位故障模塊給出可執(zhí)行的檢查順序, actions\n.join([ - check_power檢查供電與指示燈狀態(tài), - read_log讀取最近 50 條錯(cuò)誤日志, - test_module對(duì)指定模塊做單點(diǎn)測(cè)試, ]), n6, stop_condition定位到具體模塊或連續(xù)兩輪觀察無新增信息, ) print(prompt)這個(gè)模板里actions用列表展開而不是寫成一整段是為了讓模型把每個(gè)動(dòng)作當(dāng)成獨(dú)立可選對(duì)象減少「自己發(fā)明工具」的概率。n6是輪數(shù)上限實(shí)測(cè)超過 6 輪之后模型容易開始重復(fù)已執(zhí)行的動(dòng)作stop_condition必須寫成可判斷的條件不能寫「找到答案為止」這種模糊表述。ReAct 最容易踩的坑是把「思考」寫成長(zhǎng)篇解釋。規(guī)則里限定「不超過兩句話」很關(guān)鍵思考一長(zhǎng)模型會(huì)把本該放在動(dòng)作里的信息提前說完后面就不執(zhí)行動(dòng)作了。另一個(gè)坑是動(dòng)作參數(shù)沒定義清楚比如test_module不說測(cè)哪個(gè)模塊模型會(huì)傳一個(gè)不存在的參數(shù)名。動(dòng)作清單里每個(gè)動(dòng)作后面跟一句參數(shù)說明能省掉大半解析錯(cuò)誤。4. Midjourney 與 LeonardoAI 藝術(shù)提示的參數(shù)化寫法AI 藝術(shù)提示和對(duì)話提示最大的區(qū)別是它不只靠詞還靠參數(shù)。同一句描述畫幅、風(fēng)格化強(qiáng)度、隨機(jī)度、種子不同出來的圖差一個(gè)量級(jí)。原書用 Midjourney 和 Leonardo 兩個(gè)工具做示例這兩個(gè)工具的提示結(jié)構(gòu)剛好代表兩種流派Midjourney 是「一行流 尾綴參數(shù)」Leonardo 是「分欄表單 獨(dú)立負(fù)向框」。把兩種結(jié)構(gòu)都摸一遍換到別的工具也能快速映射。4.1 Midjourney 提示的語序與權(quán)重槽位Midjourney 的提示是一行文本參數(shù)用--接在末尾。語序上越靠前的詞權(quán)重越高所以主體必須放在最前面風(fēng)格、光照、鏡頭依次往后參數(shù)永遠(yuǎn)放最后。很多人把--ar 16:9寫在開頭結(jié)果參數(shù)被當(dāng)成普通文本解析畫幅根本沒生效。# mj_builder.py def mj_prompt(subject, scene, style, light, params): # 語序固定主體 → 場(chǎng)景 → 風(fēng)格 → 光照 → 參數(shù) body , .join([subject, scene, style, light]) return f{body} {params} prompt mj_prompt( subjecta lone astronaut, scenestanding in a flooded library, floating books, styleanalog film photography, muted teal palette, lightsoft window light from the left, params--ar 3:2 --stylize 250 --chaos 10 --no text, watermark --seed 8842, ) print(prompt)參數(shù)說明直接決定復(fù)現(xiàn)能力。--ar 3:2定畫幅橫向場(chǎng)景別用豎幅--stylize 250是風(fēng)格化強(qiáng)度數(shù)值越高畫面越「好看」但越偏離提示做概念圖我一般放在 100 到 300 之間--chaos 10控制多樣性做變體探索時(shí)調(diào)到 20 到 40做定稿復(fù)現(xiàn)時(shí)壓到 0 到 10--no后面跟負(fù)向詞--seed是復(fù)現(xiàn)的關(guān)鍵同一個(gè)種子加同一句提示輸出才基本可控。--seed這個(gè)參數(shù)值得單獨(dú)說。它不是「鎖定畫面」而是鎖定噪聲起點(diǎn)提示改了一個(gè)詞畫面還是會(huì)變。所以復(fù)現(xiàn)實(shí)驗(yàn)的正確做法是種子固定、提示固定、參數(shù)固定一次只改一個(gè)變量。我見過有人改了提示又換種子然后說「這個(gè)方法不穩(wěn)定」其實(shí)是兩個(gè)變量同時(shí)在動(dòng)。4.2 Leonardo 的提示面板與風(fēng)格參考Leonardo 的結(jié)構(gòu)更像表單Prompt 和 Negative Prompt 分欄下面還有模型、引導(dǎo)強(qiáng)度、步數(shù)、種子、參考圖強(qiáng)度。它的好處是負(fù)向詞和正向詞互不干擾壞處是參數(shù)之間會(huì)互相影響調(diào)一個(gè)要回頭看另一個(gè)。參數(shù)作用常用區(qū)間調(diào)高后的表現(xiàn)Guidance Scale提示貼合度7 到 12更貼提示但畫面僵硬Steps采樣步數(shù)20 到 40細(xì)節(jié)增加邊際收益遞減Seed噪聲起點(diǎn)任意整數(shù)用于復(fù)現(xiàn)不改變語義Image Guidance參考圖影響0.3 到 0.7更接近參考圖原創(chuàng)性下降Guidance Scale 是最容易調(diào)過頭的參數(shù)。低于 7 畫面自由發(fā)揮高于 15 會(huì)出現(xiàn)色彩斷層和構(gòu)圖僵化。我一般從 9 開始試畫面不夠貼提示就加到 11畫面太死板就降到 8。Steps 超過 40 之后提升非常有限除非做印刷級(jí)大圖否則沒必要拉到 60 以上。Leonardo 的 Negative Prompt 框比 Midjourney 的--no更「重」同樣數(shù)量的負(fù)向詞在 Leonardo 里對(duì)畫面的壓制更明顯。所以從 Midjourney 遷移過來時(shí)負(fù)向詞數(shù)量要減半先留文字水印和構(gòu)圖干擾兩類跑一批看效果再?zèng)Q定加不加。4.3 語言與意象把抽象詞換成可渲染的視覺名詞原書有一節(jié)專講提示里的語言和意象核心觀點(diǎn)很直接模型不認(rèn)識(shí)「高級(jí)感」只認(rèn)識(shí)能對(duì)應(yīng)到像素的模式。你寫「未來感」模型只能猜你寫「brushed aluminum panels with embedded LED strips」模型就有東西可畫。這個(gè)替換動(dòng)作是 AI 藝術(shù)提示里性價(jià)比最高的一步。抽象表達(dá)可渲染替換替換理由未來感brushed aluminum, embedded LED strips, matte black casing材質(zhì)和光源可直接生成溫馨warm 2700K lamp light, linen texture, soft shadows色溫和材質(zhì)有明確指向高級(jí)low saturation, large negative space, single light source用構(gòu)圖和色彩描述替代評(píng)價(jià)自然overcast daylight, moss-covered stone, shallow stream環(huán)境元素具體可辨動(dòng)感motion blur on limbs, low angle, diagonal composition用攝影語言表達(dá)速度替換的時(shí)候注意一點(diǎn)不要把所有抽象詞一次換完。一次換一個(gè)槽位跑三到五張確認(rèn)這個(gè)替換確實(shí)帶來了你想要的變化再換下一個(gè)。一次全換畫面變好看了你也不知道是哪個(gè)詞起的作用下次想復(fù)用都找不到依據(jù)。還有一個(gè)常被忽略的細(xì)節(jié)是語言本身。同一句提示用英文寫和用中文寫在 Midjourney 上的效果通常不一樣因?yàn)樗挠?xùn)練語料里英文描述占比更高。非英文母語者寫英文提示時(shí)容易堆形容詞反而丟掉了具體的名詞。我的做法是先用中文把畫面拆成「物體、材質(zhì)、光源、視角」四列再逐列翻譯成英文名詞短語最后按語序拼起來。這個(gè)流程比直接憋一句英文長(zhǎng)句穩(wěn)定得多。5. 迭代式細(xì)化的排查清單五類翻車與對(duì)應(yīng)改法迭代式細(xì)化不是「多跑幾次」而是每輪只改一個(gè)變量、記錄結(jié)果、判斷改動(dòng)是否有效。原書把這一步放在中后段是有道理的前面骨架沒搭好迭代就是在垃圾堆里挑垃圾。下面五類問題是我在實(shí)際出圖和對(duì)話任務(wù)里遇到頻率最高的每條按「現(xiàn)象—原因—解決」拆開寫方便直接對(duì)照排查。5.1 現(xiàn)象同一提示每次出圖差異大沒法選原因通常有三個(gè)種子沒固定、--chaos或隨機(jī)度參數(shù)偏高、提示本身太短導(dǎo)致模型自由補(bǔ)全。先看參數(shù)再看提示長(zhǎng)度。Midjourney 里沒寫--seed就是每次隨機(jī)Leonardo 里種子留空同理。提示少于 15 個(gè)詞時(shí)模型的可發(fā)揮空間太大畫面主體都可能漂移。解決順序是先固定種子跑三次確認(rèn)差異是否收斂如果還漂把--chaos降到 10 以下最后檢查提示給主體補(bǔ)一個(gè)狀態(tài)限定和一個(gè)環(huán)境限定。三步走完還漂說明提示里有互相沖突的修飾符回到第 2 章做槽位拆分。5.2 現(xiàn)象負(fù)提示寫了但畫面里還是有文字和水印原因分工具看。Midjourney 的--no text對(duì)大面積文字有效對(duì)小字水印效果有限負(fù)向詞如果和正向詞語義重疊會(huì)被正向權(quán)重壓過去還有一種情況是負(fù)向詞寫在了參數(shù)區(qū)之外被當(dāng)成普通描述解析了。解決辦法是先確認(rèn)語法位置--no必須在所有參數(shù)區(qū)里、提示正文之后然后把負(fù)向詞精簡(jiǎn)到最必要的三個(gè)去掉同義詞堆疊最后提高正向提示里「干凈背景」類固化劑的權(quán)重用正向描述擠壓文字出現(xiàn)的空間。純靠負(fù)向詞堵不如正向詞引導(dǎo)。5.3 現(xiàn)象出圖糊、構(gòu)圖散、主體不突出原因多半是修飾符沖突或鏡頭槽位缺失。風(fēng)格寫兩個(gè)、光照寫三個(gè)方向、鏡頭又寫廣角又寫微距模型只能取平均結(jié)果就是什么都有一點(diǎn)、什么都不突出。另一個(gè)常見原因是主體槽位里塞了太多狀態(tài)模型分不清哪個(gè)是重點(diǎn)。解決方法是做減法風(fēng)格只留一個(gè)光照只留一個(gè)主光源鏡頭只留一個(gè)景別。主體狀態(tài)從三個(gè)減到一個(gè)跑一批看主體是否立住再逐個(gè)加回。構(gòu)圖散的時(shí)候優(yōu)先補(bǔ)wide shot或medium shot這類景別詞比加「high quality」有用得多。5.4 現(xiàn)象ChatGPT 多輪對(duì)話后越聊越跑偏原因是上下文累積把早期約束沖淡了。對(duì)話到第五六輪模型對(duì)第一條消息里的格式要求、語氣要求已經(jīng)不再敏感開始按最近幾輪的內(nèi)容自由發(fā)揮。另一種情況是你自己在后續(xù)消息里引入了新約束和早期約束矛盾模型選了新的那個(gè)。解決辦法有兩個(gè)每三到五輪做一次約束復(fù)述把核心要求用一兩句話重貼一遍或者開新會(huì)話把已確認(rèn)的結(jié)論壓縮成一段摘要帶過去。我一般用后者因?yàn)殚L(zhǎng)會(huì)話里的無效信息太多摘要反而更干凈。摘要里只保留任務(wù)目標(biāo)、已確認(rèn)結(jié)論、未解決問題三項(xiàng)其他全丟。5.5 現(xiàn)象提示從 Midjourney 遷到 Leonardo 就失效原因是兩個(gè)工具的語法和權(quán)重邏輯不同。Midjourney 的參數(shù)是尾綴Leonardo 是表單分欄Midjourney 的--no權(quán)重偏弱Leonardo 的負(fù)向框權(quán)重偏強(qiáng)同一組修飾符在兩個(gè)工具里的解析順序也不一樣。解決辦法是維護(hù)兩層提示中性層寫主體、修飾符、固化劑不帶任何工具語法適配層按工具加參數(shù)和負(fù)向詞。遷移時(shí)只改適配層中性層不動(dòng)。這樣一套審美描述可以在多個(gè)工具之間復(fù)用換平臺(tái)只需要重測(cè)參數(shù)區(qū)間不用重寫整句提示。6. 對(duì)話式提示工程與驗(yàn)收把提示當(dāng)資產(chǎn)管起來ChatGPT 這類對(duì)話模型的提示工程和文生圖最大的區(qū)別是它有「記憶」——多輪對(duì)話里前面說過的約束會(huì)持續(xù)影響后面。這既是優(yōu)勢(shì)也是負(fù)擔(dān)。優(yōu)勢(shì)是你可以逐步補(bǔ)充細(xì)節(jié)不用一次寫完整負(fù)擔(dān)是約束會(huì)漂移聊到后面模型已經(jīng)不記得第一條要求了。原書把對(duì)話式提示單獨(dú)成章講的其實(shí)就是怎么在多輪里保持約束不丟。我的做法是把每輪對(duì)話當(dāng)成一次小版本發(fā)布。開始前先寫一段「任務(wù)卡」包含目標(biāo)、輸出格式、禁止事項(xiàng)三行每輪結(jié)束后檢查輸出是否還符合任務(wù)卡偏離了就貼回任務(wù)卡重述不偏離就繼續(xù)。任務(wù)卡本身也會(huì)迭代但每次改動(dòng)都記版本號(hào)。# prompt_regression.py # 每次調(diào)整提示后跑一遍回歸記錄版本、參數(shù)、評(píng)分和問題 import csv, datetime def log_run(version, prompt, params, score, note): with open(prompt_runs.csv, a, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([ datetime.date.today(), version, prompt, params, score, note ]) # 示例v03 加了一條“只輸出三條”的約束人工評(píng)分 4備注發(fā)現(xiàn)新問題 log_run( versionv03, prompt為便攜投影儀寫三條賣點(diǎn)每條不超過20字, paramstemperature0.7, max_tokens200, score4, note第三條偏長(zhǎng)下版把字?jǐn)?shù)約束提前, )這個(gè)腳本不復(fù)雜價(jià)值在score和note兩列。評(píng)分用 1 到 5 分5 分是可直接交付3 分是能看但要改1 分是跑偏。備注只寫具體問題不寫「感覺不太好」這種沒法行動(dòng)的話。跑上二十條之后你回看 CSV 就能發(fā)現(xiàn)哪類改動(dòng)真正提升了分?jǐn)?shù)哪類改動(dòng)只是心理安慰。版本管理上我遵循一條規(guī)則提示改動(dòng)必須能回答「改哪個(gè)槽位、預(yù)期改善什么、怎么判斷有效」。答不上來就不改。這條規(guī)則是從一次連續(xù)改七版、結(jié)果越改越差的經(jīng)歷里總結(jié)出來的當(dāng)時(shí)沒有記錄最后連最初那版長(zhǎng)什么樣都找不回來了只能從頭重寫。驗(yàn)收環(huán)節(jié)我一般看三個(gè)指標(biāo)格式合規(guī)率、人工評(píng)分均值、復(fù)現(xiàn)一致性。格式合規(guī)率是輸出符合任務(wù)卡的比例低于 90% 就回去加約束人工評(píng)分均值低于 3.5 就回到骨架層檢查主體和修飾符復(fù)現(xiàn)一致性是同提示同參數(shù)跑三次的差異度差異大就檢查種子和隨機(jī)參數(shù)。三個(gè)指標(biāo)都過線這版提示才進(jìn)模板庫(kù)。從那以后我每次改提示都強(qiáng)制走一遍「任務(wù)卡—單變量改動(dòng)—CSV 記錄—三項(xiàng)驗(yàn)收」哪怕只改一個(gè)詞也記一筆。這套流程看著笨但它讓我不用靠記憶去復(fù)原三個(gè)月前那張圖是怎么出來的。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取