大概两年前,我接了一个文创配文的小项目,需求很清晰:批量生成一批以二十四节气为主题的短诗,印在明信片和书签上。我当时的判断是,这事简单到不值得讨论——大模型写文案早就不是新闻,四句短诗算什么?结果第一版输出让我和需求方都沉默了:文字通顺,读起来也“像诗”,但你根本记不住其中任何一句,更关键的是,每首出来都差不多:落叶、凉风、旧时光,换个节气名就能套用。后来我琢磨了很久,把提示词、格律约束、意象控制、人工润色这些环节全部理了一遍,才真正摸出一套能稳定出稿的流程。这篇文章就来拆这套流程,适合想用AIGC快速产出诗歌文案的运营和产品同学,也适合对提示词工程感兴趣的人。先说结论:机器当然能写诗,但“能写”和“能出稿”之间,隔着好几个认知误区。
1. 一个真实需求把我拽进AIGC诗歌创作的坑
1.1 那个“看着简单”的节气诗歌项目
我一开始的想法非常朴素:把二十四节气的名称、物候特征丢给大模型,让它每首诗写四句,注意押韵就行。但第一轮批量生成之后,我拿到手的几乎是同一首诗的不同排列组合。后来我翻来覆去检查,才发现问题不在工具,而在我的指令。这个教训值得先说清楚:AIGC诗歌创作不是“你说个题目,它吐出一首诗”这么简单,而是“你给多少约束,它才有多少发挥空间”。
如果你也准备用AIGC做诗歌相关的内容,我建议先做好心理准备:前二十次生成大概率是不满意的,不是在挑毛病,而是在积累“什么是可用的”判断力。我自己真正跑通流程,是在记录了二十多组提示词和输出的对比之后。看完这篇,你会少走很多弯路,但该交的学费也还是要交一部分,因为不同模型对同样的指令反应差别很大。
1.2 大模型写诗时到底在做什么
理解问题先从原理开始。大模型做文本生成,本质是“预测下一个词”:给定前文,在词表里算一个概率分布,选一个合适的词继续写下去。它没有“我要写一首荡气回肠的诗”这种意图,它只是在延续语言模式。写新闻、写菜谱、写营销文案,这种模式已经很够用,因为那些文体本身就是高度套路化的。但诗歌恰恰相反,诗歌的核心审美就是跳脱常规、制造意外。模型那个“选择最安全的词”的惯性,在诗歌这里成了最大的敌人。
我自己做过一个小测试:让同一个模型写十个版本的“夏天”,限定现代诗、每首五行。出现频率最高的不是别的,就是蝉鸣、烈日、冰西瓜;把它换成古诗风,则高频变成残阳、孤舟、天涯。这些词本身没有错,错在它们只是“统计相关性强”的词,不是“为这一首诗的意图服务”的词。换句话说,模型选词靠的是词汇共现频率,诗人选词靠的是情感和结构需求。如果提示词不把后者讲清楚,前者就会代替你写诗。这不是模型的智商问题,是我们没给它足够的信息。
1.3 真正的难点是三层约束同时生效
写诗这件事,难在要同时满足三层约束,而模型天生只擅长其中最浅的一层。
第一层是格式层:字数、句数、押韵、平仄、对仗。这一层最容易,因为它是显式规则。第二层是意象层:诗里的意象要相互有关联,像画面里的物件一样有空间关系、逻辑关系,而不是词库抽签。第三层是情感层:整首诗要有一个稳定的情绪指向,例如“孤独但不沉沦”“怀念但不哀怨”,而不是每一句都自己演一出戏。默认情况下,模型能勉强完成第一层的大部分,第二层靠概率蒙,第三层几乎完全缺席。
打个比方,写诗像穿针引线,模型手里同时抓着几十根线,它不知道该穿哪个孔,于是每一根都往最近的孔里捅一下。结果就是一首诗里什么都有,但什么方向都没立起来。这也能解释为什么AI写诗常被一眼认出:不是因为它写了错别字,而是因为它写得太“平均”,每一句都在说一件事,但句与句之间没有张力。搞清楚这个背景,再去设计提示词和润色流程,思路就清楚了。
2. 先跑通第一版:从“能看但不能发”的七绝开始
2.1 第一版提示词和它的翻车输出
最开始的提示词我写得很偷懒,差不多是这样:
你是一位古典诗人,请写一首七言绝句,主题是“秋雨”,要求押韵。模型很快给了我一版:
秋风瑟瑟雨潇潇, 落叶飘飘过小桥。 一盏孤灯人未睡, 残荷听雨到明朝。单看每一句,都能看懂;整体读下来,问题就明显了。先说好的地方:字数对,七言四句,押韵也算稳,潇、桥、朝都在同一个韵里。但接下来全是问题。第一,“瑟瑟”“潇潇”“飘飘”三个叠词连续出现,读起来像儿歌,完全没有收敛感。第二,“小桥”“明朝”这两个词明显是为了押韵硬塞进来的,和“秋雨”这个主题没有必然关系。第三,全诗只是在描述“下雨的夜里有人没睡”,没有一个真正让人记住的画面,更没有情绪态度。这种诗就像一张曝光均匀但没有焦点的照片。
这个例子给了我第一个教训:写诗任务里,模型默认会拿一组“最安全”的词来交差。你要是不把约束说清楚,它会从训练数据里找一个“写秋雨”的高频模板,而不是从你的指令里组织一首诗。需求越模糊,套话越严重。所以下一步不是换提示词,而是给提示词搭一个结构。
2.2 给提示词建一个四层结构
我后来一直用的结构是四个部分:角色、任务、条件、样本。四个部分缺一不可,但有些可以简化。
角色用来设定“谁在写”,目的是让模型切换语体。任务要说清楚写什么、什么格式。条件是最关键的部分,把你的格式要求、禁忌、情绪方向都放进去。样本则是给模型一个“节奏样板”,避免它自己去找普通模板。
一版改过的提示词长这样:
你是对传统诗词格律极熟的编辑,也理解现代诗的表达。 任务:写一首七言绝句,主题是“秋雨夜”,情绪基调是“安静中带一点不甘”。 创作条件: 1. 每句七字,共四句;二、四句押平声韵; 2. 避免口语词,避免连续叠字; 3. 避免直接使用“小桥”“流水”“天涯”这类常见意象; 4. 通过具体画面传递情绪,不要直接写“孤独”“难过”。 样本(只参考节奏和克制程度,不要求模仿内容): 荒城秋雨夜何其,独坐孤灯自咏诗。窗外芭蕉声未歇,有人寒枕梦来迟。样本是我随手写的,格律没有抠到极致,但情绪稳定、意象之间有位置关系,给模型当参照足够了。有了这个结构之后,后续所有调整都变得可控:换风格改角色,换主题改任务,换要求改条件,换文风改样本。提示词不再是“一句话碰运气”,而是一个可以反复调试的模板。
2.3 用迭代提示词再跑一轮,看变化
同一套设置下,模型第二轮交出的作品变成了这样:
秋风入夜动寒林, 一灯明灭故园心。 隔窗听得芭蕉雨, 滴到空阶不肯沉。对比第一版,进步是肉眼可见的。核心意象从“落叶小桥”换成了“寒林、一灯、芭蕉雨、空阶”,这些意象之间有空间关系:人在屋内,隔窗听雨,雨落在台阶上。这已经是画面,而不再是词语的排队。“不肯沉”三个字给全诗添了一个态度,雨滴不肯落地也好,心里那点不甘不肯消散也好,读者能自己往里填。当然,问题也还有,“故园心”三个字偏套路,放在第二句有点偷懒。
这一轮迭代真正想说明的是:好的输出不是靠运气碰出来的。你给模型提供的约束越多、越具体,它就越难回到高频模板的老路。反过来说,如果一轮生成出来不满意,先别急着说“再写一遍”,先检查提示词里少了哪个结构。多数翻车,问题都出在条件这一层太单薄。
3. 四个让输出脱胎换骨的提示词技巧
3.1 给样本,别给形容词
跟模型提要求时,我们很容易说出“请写得更有意境”“请增加张力”这种话。问题在于,“意境”不是模型词表里的一个可执行开关。你给再多的形容词,它也只能从训练数据里翻跟这些词关联度最高的表达,结果还是那套高频词。
更有效的做法是给样本。不是让它抄,而是让它模仿样本里句子的节奏和组织方式。比如你希望一句里有一个动作和一个声音,就把“隔窗听得芭蕉雨”这种句子贴给它,再说“请参照这个句子的组织方式,重新写一联”。模型对句法模式的捕捉能力远强于对抽象概念的理解,这是我在大量对比里验证过的事。
低效指令和高效指令的差别,我列一组对照:
| 类型 | 指令示例 | 效果 |
|---|---|---|
| 低效 | 请写得更古典、更有韵味 | 得到一堆套语 |
| 高效 | 请模仿“隔窗听得芭蕉雨”这样一句包含动作和声音的句式 | 句子有明显结构感 |
别小看这个差别。很多提示词的改进方向,其实就是把“形容词”换成“例句”,模型的输出质感会立刻变。
3.2 把格律写进提示词,而不是默认交给模型
“七言绝句”四个字在提示词里的含义太模糊。模型知道七绝的大致样子,但它不会自觉检查每个字的平仄和押韵。我的做法是把关键规则直接写进条件里,不是让它“懂”,而是让它在生成时被这些约束盯着。
我常用的格律条件是:每句七字,一共四句;以首句不入韵的方式处理,二、四句押平声韵;每句的第二、四、六字尽量做到平仄交替;整句结尾不要出现三平尾或者三仄尾。这些规则并不难复制,但写不写进去差别很大。写进去之后,模型会明显减少“出律”的句子,虽然偶尔还会跑,但至少不是放任状态。
有人可能会顾虑,把规则写满会不会限制模型发挥。我的经验是,短诗恰恰需要规则提供骨架,规则不是限制灵感,而是让灵感落在合适的位置上。等它有了稳定的格律底子,再谈“破格”才有意义。连平仄都没站稳就去追求自由,生成的东西往往既没古意也没现代感。
3.3 控制意象密度和情绪方向
AI生成的诗最常见的病就是意象太密。一首四句的短诗里塞六七个意象,每个意象都“很有画面感”,合起来却是一锅词语沙拉。控制方法很简单:给一首绝句设一个“意象预算”,核心意象控制在两到四个,并且每个意象都要带一个感官细节。
比如“灯”不是意象,是名词;“灯在风里明灭”才是意象,因为它带上了状态和动作。再比如“雨”不够具体,“隔窗的雨声”有位置,“滴到空阶不肯沉”有运动和情绪。给模型下达约束时,我通常会写明“每个核心意象必须带有动作、光线、声音或位置中的至少一个”。这个要求一加,输出立刻变扎实。
情绪方向是另一个容易被忽略的点。你不要只写“孤独”,而要写“一个人深夜失眠,听到远处火车经过的声音,孤独但不绝望”。模型需要具体的场景来锚定情绪,否则它会把“孤独”翻译成“我很孤独”,甚至直接借用人称感叹词。场景越具体,情绪表达越含蓄,这是古典诗和现代诗共通的手法。
3.4 两段式生成:先写创作报告,再写诗
我试过最省力也最有效的技巧,是在提示词里要求模型“不要直接写诗”,先输出一段创作说明,说明里讲清楚:准备写什么场景,用哪几个核心意象,情绪走向是什么,打算押哪个韵。等这段说明出现之后,再让它落地成诗。
这个技巧好用,是因为它改变了模型的生成路径。直接写诗时,模型会顺着词语关联一路滑行;先组织思路,再转换为诗句时,注意力被分出一部分去维持逻辑,词语之间的随机拼贴会减少很多。虽然模型并不能像人类一样真正“计划”,但强制它把思路显性化之后,输出确实会更有条理。
具体提示词可以这样写:
不要直接写诗。先按下面格式输出创作说明: - 场景: - 核心意象(不超过3个): - 情绪走向: - 计划使用的韵脚: 说明写清楚后,再根据这份说明写出正文。注意不要指望模型真的“确认后再动笔”,它不会做流程管理。但是只要它在回答里先写了创作说明,再来写正文,效果就会出现。这个技巧在批量出稿时尤其有用,因为你还能顺手检查创作说明,判断方向是否偏离主题,不用等全诗写完才发现跑题。
4. 踩坑避雷手册:七类高频翻车现场与应对策略
这章直接进入避雷清单。下面每一类我都按“现场案例—问题分析—应对策略”的顺序写,方便你对照检查。
4.1 韵脚硬凑:为了押韵把不相干的词塞进来
出过的问题长这样:
秋雨落寒江, 灯火映孤窗。 思君不见君, 远山入梦乡。单句拿出来都能看懂,但“君”字出现得像天外来客。如果一首诗的题目里没有“思念某人”,模型为了凑第四句的“乡”韵,硬造了一层怀人主题,这就是典型的韵脚倒逼内容。应对办法有两个:生成前让它先列出候选韵脚,比如“押ang韵,可用窗、凉、霜、香、乡”,再要求每一句的韵脚都从列表里选,选上的词必须和主题相关;如果生成了硬凑的句子,就换一个韵部再跑,别在同一个韵里死磕。
4.2 意象堆砌:一首诗像词语展览会
下面是我见过很多次的输出结构:
沧海浮云接远山, 孤帆一片入青天。 古寺钟声惊倦鸟, 长河落日满前川。确实都是典型古风意象,但四句之间的镜头是断裂的:刚刚还在海面,突然切到青天,又跳到古寺,最后落到长河。读完之后,读者记住的不是画面,而是一堆词卡。这类问题的根因就是我前面说的“意象密度过高、缺少逻辑纽带”。应对策略很简单:在条件里写死“全诗核心意象不超过三个”,并要求意象之间有空间或因果关系。如果生成出来超了,人工润色时大刀砍掉,宁可只剩下两个意象,也要让它们真正产生关系。
4.3 “AI味”高频词:翻来覆去就是那批词
用大模型写古风类诗歌,你会很快发现一个现象:十个版本里有八个会出现“流年”“时光”“红尘”“天涯”“清风”“明月”这类词;写现代诗则是“星河”“晚风”“橘子汽水”“下一个路口”轮番上阵。单个看不算错,但所有人都在用,就成了最醒目的机器痕迹。
解决办法是维护一份负面词汇清单,直接放进提示词:
请避免使用以下词语:“流年”“时光”“红尘”“天涯”“灯火阑珊”“岁月”“清风”“明月”“一声”“半世”“谁家”“且看”“何须”。这份清单可以按风格维护,写古风用一套,写现代诗用另一套。不用怕词被禁没了诗就没法写,恰恰相反,禁用词越多,模型越会被迫去寻找那些低频但更生动的表达,这才是诗需要的东西。
4.4 反复迭代“换汤不换药”
很多人在提示词不太理想的时候,会反复让模型“再来一次”。结果往往很挫败:结构没变,只换了几个词。这不是模型偷懒,而是你的指令里没有加入新的信息。模型在同一个提示词下采样,趋同是正常的;温度参数已经被你调到很低的时候,更是如此。
应对策略有三条。第一,每次迭代至少改动一个具体变量,换掉样本、换韵脚、换意象清单、补一句情绪说明,都算;第二,适当调高temperature,我一般设置在0.7到0.9,诗歌需要一定的随机性,太低会复读模板,太高会散架;第三,也是我觉得最重要的,别围绕同一句话死磕,直接换一个切入角度,例如把“写秋雨夜”改成“写一场连续下了三天三夜的雨”。
4.5 季节和主题漂移
生成“秋天”主题,结果冒出“春风十里”“桃花飞”的句子,这种情况在长文本和反复生成里尤其常见。模型的注意力是有限的,约束过多时它可能在某个节点忘记了时间设定。
我的应对办法是在提示词的开头和结尾各放一次主题,并且在生成后抽查“意象是否符合设定”。批量处理时,我会用一段简单的脚本跑一遍“实体意象检查”,把每个句子拆开后人工快速扫一眼,比对季节词。对于现代诗,也会检查有没有“雪糕”出现在冬天这种低级错误。别看它小,在几十首一批的工序里,漏掉就是硬伤。
4.6 情感空洞:每个句子都对,合起来没感受
这是AI诗最难解决的问题。它的表现不是烂,而是“平”。比如写悲伤就下雨、枯荷、孤灯、北风,情绪词齐了,感受却没有。原因在于,模型只是在罗列和悲伤有关的物象,没有给读者一个现场,也没有一个“人”的动作。人的情感不是靠形容词和物象清单表达的,而要靠行为、细节和留白。
我试过最有效的修正,是强制加入“人物的具体动作”。提示词里写:请写一个人物的动作细节,例如“煮水温酒”“整理旧信”“站在窗边数雨声”,让读者从动作里体会情绪。加上这个要求之后,输出的情感穿透力会明显增加,因为动作天然包含了时间和场景,读者能自己感受到那个人的状态,而不是被动接受“他很悲伤”的告知。
4.7 套话和词语粘连
最后一种翻车是模型爱用“大词”撑场面:不好好写景,非要说“人生如梦”“岁月如歌”这种熟语。处理起来也简单,在提示词里加一条“禁止使用成语和熟语;如确需使用典故,先用不超过十五个字解释它在这首诗里的作用”。这个约束会逼着模型重新组织语言,反而容易出现惊喜。不过要提醒一句,加了这条之后,生成的句子可能会变得朴素很多,不要觉得朴素就是坏,对很多场景来说,朴素比空洞的有气势要高级得多。
5. 从生成稿到可发布:五步人工润色流程
就算提示词写到极致,我也不会直接把生成稿交给需求方。AI生成的东西更像半成品,它负责给你提供结构和素材,真正的“可读性”必须经过人工这道筛子。我的流程固定是五步,速度很快,但每步都不能省。
5.1 第一步:出声朗读,找节拍问题
第一步永远不是看,是读。出声念一遍,语感会把问题自己暴露出来:哪句拗口,哪句节奏碎了,哪句读起来像在数拍子,一读就知道。古诗格式的作品还要特别注意停顿,七言一般是二二三或四三节奏,如果模型生成了特别别扭的断句,那多半是词语搭配出了问题。我习惯把读起来别扭的句子标注出来,顺手在旁边写一个替代方向,再进下一步。
5.2 第二步:替换高频词
用前面那份“AI味”高频词清单,把这轮生成里出现的词挨个过一遍。规则很简单:把抽象词换成具象词。比如“时光”如果只在诗里当背景板,就换成“墙上停摆的钟”;“天涯”如果只是凑距离感,就换成“站台尽头那盏灯”。替换的底线是词必须能落到感官上:看得见、听得见、摸得着,或者至少是某个具体场景里的物件。这一步做下来,诗会立刻从“书面”变成“现场”,差别非常大。
5.3 第三步:意象做减法
句子全部顺完之后,我开始“删意”。统计这一首诗里到底出现了几个核心意象,超过四个就强制删。别舍不得,一首短诗能立住一个画面就很了不起。我拿一个修改过的例子说明,原稿是:
明月清风入我怀, 流年似水不堪哀。 孤灯照尽天涯路, 落叶无声满石阶。它的问题很典型:明月、清风、流年、孤灯、天涯、落叶、石阶,意象太多,而且“流年似水”“天涯路”都是套语。我把它改成了:
灯明灯灭夜三更, 风过空庭落叶声。 世事近来无可语, 石阶雨落一层层。这一版只留下灯、风、落叶、石阶四个意象,而且它们都在同一个院子里发生,彼此有位置关系。最后一笔“石阶雨落一层层”把情绪落到了具体的声音和节奏上,比原来的“落叶无声”更有余味。这个例子不是多高明的诗,但它说明一个道理:删掉冗余意象是让诗“喘气”的最快路径。
5.4 第四步:检查逻辑线和情感线
改完词和意象,我还会问自己三个问题:这首诗里的“我”是谁?从第一句到最后一句发生了什么变化?结尾有没有留下一个具体的动作或画面?如果答案模糊,基本可以断定诗没有写透。情感线不必明说,但必须有一以贯之的方向。你可以写安静中的不甘、怀念里的释然,但不能前半首在悲秋后半首突然开始怀春。
这一阶段如果发现方向摇摆,我的做法不是改个别字,而是直接重写结尾。诗歌的结尾决定读者的回味,绝大多数AI生成诗之所以平庸,问题也出在结尾:它喜欢收在“概括句”上,比如“一切都随风而去”,而不是收在一个画面或动作上。把结尾改成具体画面之后再读,全诗立刻就不一样了。
5.5 第五步:让模型当“毒舌编辑”自评
最后一步是让程序流水的最后一道检查。我会把诗丢回给模型,让它扮演一个毒舌编辑,按三个标准批评这首诗:第一,有没有至少一个具体画面,而不是概念词;第二,有没有逻辑断裂;第三,有没有依赖套语。每条至少要给两个修改建议。
这里有个经验要分享:模型自评的“批评”往往很温和,千万不要全信。它找问题的能力比给方案的能力强,把它输出的批评当成检查表,逐条人工判断;至于它给出的修改建议,通常只能用来参考,多数建议还是往套话方向跑的。但就是这一步,常常能提醒我忽略的细节。等这轮跑完,作品才算真正进入“可以给人看”的状态。
6. 工具选型与成本取舍:网页版、API、本地部署怎么选
6.1 在线网页版:零成本尝鲜,但有两个麻烦
如果只是想试试AI写诗,网页版是最快的路径。它不需要环境配置,打开就能用,而且通常支持多轮对话,方便做简单修改。但我用了段时间后发现两个麻烦。第一,网页版的上下文管理比较混乱,你前面让它改过三次诗,它可能在第四次改的时候把第一次的要求也改了回来,需要反复强调约束。第二,它不适合批量操作。要生成五十首明信片文案,逐个复制粘贴能让你怀疑人生。所以网页版的定位就是体验和调提示词,不是生产线。
6.2 API调用:批量生成的正确姿势
一旦进入批量生产阶段,选择就基本只剩API调用。好处有三个:可控性强,每个请求的提示词可以结构化;成本低,单首诗消耗的token很少,整体费用可以忽略;扩展性好,生成、自评、重写可以全自动串起来。前提是你愿意写一点脚本。一个最简单的调用示例长这样:
import requests def generate_poem(prompt: str, api_key: str, base_url: str, model: str): resp = requests.post( f"{base_url}/chat/completions", headers={"Authorization": f"Bearer {api_key}"}, json={ "model": model, "messages": [ {"role": "system", "content": "你是古典诗歌编辑。"}, {"role": "user", "content": prompt}, ], "temperature": 0.8, }, timeout=60, ) return resp.json()["choices"][0]["message"]["content"]这里提到的base_url、model按你实际选择的部署方式填就行。第一次跑时建议先在网页版把提示词调试好,再搬进脚本,不要在脚本里调提示词,效率太低。代码里的温度参数,写诗建议0.7到0.9,具体看你对随机性的接受程度。
6.3 本地部署开源模型:适合隐私和重试验,但别指望省钱省事
有些项目涉及未公开素材,或者需要离线生成,那就得考虑本地部署。对短诗这个场景,7B到13B量级的开源模型基本够用,太小了容易遗忘指令,原本给的意象约束时不时失效。本地部署的好处是隐私可控、没有按量计费、可以随意折腾耗时很长的批量任务。代价是硬件、依赖和推理速度,一张普通的消费级显卡跑13B模型能出诗,但速度不算快,批量几百首时心里要有预期。
三者的取舍我做了个表:
| 方案 | 成本 | 控制度 | 适用场景 |
|---|---|---|---|
| 在线网页版 | 低(订阅或免费) | 低 | 尝鲜、手工改稿 |
| API调用 | 按量,整体较低 | 高 | 批量生产、自动化流水线 |
| 本地部署 | 硬件成本高 | 最高 | 隐私敏感、离线、重度试验 |
6.4 我的选型建议
我自己的选型规则很功利:量小,用网页版调好提示词,再手动润色,成本最低;量大,直接走API加脚本,让程序帮我跑“生成、自评、重写”三遍流程,最终由人工抽查;只有明确涉及隐私素材或离线环境,我才会上本地部署。很多项目其实根本走不到本地部署那一步,天天纠结硬件,不如先把提示词和润色流程做扎实。
最后分享一个我一直在用的自我检验标准:如果一首AI生成的诗,三分钟后你还记得其中某一句话,那它值得用;如果你得回头再看才知道它写了什么,那就别急着发。我大量时间不是花在生成上,而是花在等这句话出现——它可能来自模型的一次随机组合,也可能来自我改稿时的一次歪打正着。所以别怕改,AIGC诗歌创作这件事,真正的价值不是让机器替我们抒情,而是让机器先把那些平庸的选项全部耗尽,逼我们更进一步。