雜談:用Dify跟Stable Diffuision製作投影片章節的封面照片 / Talk: Creating a Cover Image for Slide Section Using Dify and Stable Diffusion
為投影片的內容選擇合適的照片真不是一件容易的事情。於是我就試著將投影片的內容傳送給大型語言模型,請大型語言模型撰寫適合Stable Diffusion的提示詞,然後用提示詞來繪圖看看。這樣的工作流會出現什麼結果呢?
章節的封面照片 / A Cover Image for Slide Section
我在部分投影片樣板中需要在每個章節加上一個說明本章內容的照片,而要如何挑選這張照片,每每都讓我傷透腦筋。
在Stable Diffusion環境無法運作的期間,我使用的是Image Creator in Bing來繪製投影片需要的照片。但使用Bing來繪圖時仍遭遇了不少問題:
- 每日點數限制:Bing每24小時只能下15次prompt。
- 圖片尺寸限制:Bing預設是產生1:1方形圖片,如果要製作像是上圖投影片中的圖片,寬高比例大概是1200:600,那就不太容易做到。
- 提示詞管理的限制:Bing只提供一個輸入prompt的欄位。導致每次我都要將要繪製的主題與風格等必要的提示詞重新組合,才能比較可能繪製出固定風格的圖片。
除此之外,既然都已經有做好的投影片了,我還要自己規劃圖片的主題嗎?能不能請大型語言模型來幫我處理這件事情呢?於是我就開始動手打造整個工作流的雛形。
從投影片產生提示詞 / Generating Prompts from Slides
工作流的第一件事情是決定要繪製圖片的投影片範圍。我的做法是把投影片的特定範圍另存新檔,並且儲存成pptx的檔案格式,這樣才能讓Dify抽取檔案內容。
接著我就在Dify製作對應的工作流。整個流程也很簡單,只有四個節點:
- 輸入框:讓我能夠上傳投影片檔案,以及微調繪圖方向。
- 文件內容抽取:將投影片內容抽取成文字。
- 大型語言模型:請Gemini 2.0根據文件內容規劃Stable Diffusion XL使用的提示詞。
- 輸出結果。
值得注意的是,我可以在大型語言模型的提示詞裡面加上一些必要元素和特殊風格的指示,使得大型語言模型產生的提示詞比較容易特定的字詞,以此確保產生出來的圖片能有著符合投影片的一貫風格。
最後的輸出結果會是這種感覺。
在Stable Diffusion繪圖 / Drawing in Stable Diffusion
https://civitai.com/models/101055/sd-xl
考慮到投影片的主題比較發散、抽象,在Stable Diffusion模型的選擇上,1.5的舊版模型通常難以畫出抽象的概念。而Pony系列太過著重人物,也很難畫出理想的概念圖。這邊我選擇的是理解能力比較好的SD XL來嘗試繪圖。
接著我將Dify取得的提示詞放入Stable Diffusion WebUI,如此一來就能產生出對應的圖片。
心得 / Thoughts
這個工作流只是一套草稿流程,但整個流程下來,的確比起以往我自己管理提示詞來說還要好的多。
第一點是大型語言模型會根據投影片內容來規劃可能的圖片場景。由於投影片講述的大多是比較抽象、概念性質的文字,如果直接將文字翻譯成英文並輸入到Stable Diffusion,大多時候會因為文字太缺乏邏輯、提示詞過長,而出現混亂的結果。
相較之下,大型語言模型會試著抓取投影片中的部分內容,以此構想一些具體的場景。舉例來說,它構想的場景可能會是「一個明亮現代的會議室,團隊成員正專注地討論著螢幕上的簡報,氣氛樂觀且充滿合作精神。」提示詞則是「bright, modern, conference room, large screen, presentation slides, charts, graphs, team, diverse, smiling, focused, discussion, laptops, notebooks, sunlight, windows, professional, optimistic, collaborative, learning, vibrant, dynamic, brainstorming」。這種具體的詞彙比較有可能讓Stable Diffusion畫出合理的圖片。
但整套工作流做下來,其實還是有很多值得改善的地方。當提示詞過於抽象的時候,繪製出來的圖片會有種好像很厲害,但實則意義不明的問題。對於這個問題,我們需要在大型語言模型的提示詞工程做更多的指示,盡可能讓產生出來的提示詞貼緊現實場景。
另一點就是Stable Diffusion想要在小圖畫細節的時候,細節總是會崩掉。這個問題從SD1.5就存在,沒想到改用了SDXL還是一樣。也許是該慢慢嘗試SD3或是Flux等其他模型了。
小結 / In Closing
雖然一開始使用Dify是因為RAG的需求,但Dify的高度可自訂性的確讓我們在使用大型語言模型上容易許多。後來我在聆聽其他人對於AI的需求時,發現到大家想要的其實也不是RAG,而是一個「要照我的指示做事情」的AI。當然,有RAG提供的示例,確實可以讓大型語言模型產生的結果更符合我們的需求。但大多時候,只要能夠設定提示詞樣板,對很多人來說就已經夠用了。
這種微妙的感覺真是令人感慨。