首页 / 资讯中心 / 文章详情

AI自动写诗机器人:从图像理解到情感匹配的完整实践

AI自动写诗机器人:从图像理解到情感匹配的完整实践 ★ FEATURED ARTICLE
国庆期间我做了个有点“疯狂”的实验把最近爆火的两个 AI 工具接在一起做了个自动写诗发朋友圈的机器人。标题叫《AI的时代映红》我并没有用任何模板而是让 AI 自己“看”我拍的晚霞照片然后生成一首匹配的诗再配上它自己选的音乐卡片。整个过程跑了 72 小时效果出乎意料地好但中间踩坑也不少。这篇文章把完整方案、原理、以及我踩过的所有坑一次性写清楚。先说个结论AI 生成内容目前还做不到真正的“创作”但在特定场景下比如情绪表达、氛围营造它已经足够以假乱真而且整体体验远超预期。这篇不是纯理论文章全程实操适合有点 Python 基础、想玩点新东西的开发者或内容创作者。1. 项目拆解AI 怎么做到“看到什么就写什么”1.1 核心需求解析这个项目表面上是“写诗”但拆开来看其实是三个独立的 AI 能力串联图片理解看懂晚霞照片里有什么情感化文本生成根据图片内容写一首短诗风格匹配把诗和合适的背景音乐关联起来三个环节单独看网上都有现成案例但真正把它们无缝串成一个自动化流程并且达到“生成结果有情绪、不机械”的效果这是这个项目的核心价值点。1.2 为什么选择这个方案而不是直接调接口我最开始想过直接用某个大模型的“图片文本”多模态接口一步到位。实测下来的感觉是输出质量确实高但可控性太差——你让它写“晚霞主题的诗”它写出来的东西十有八九是“夕阳无限好”这种烂大街开头毫无个性。所以最终我选择的是分段式架构第一步用图像描述模型视觉语言模型提取图片的关键元素生成一段“画面描述”第二步把这段描述作为“提示词的一部分”喂给文本生成模型让它基于具体画面去写诗第三步再用一个文本分类模型对诗的“情绪倾向”打分根据分值匹配不同风格的音乐。这就像你自己写诗前先要观察景色、然后组织语言、再决定配什么背景乐AI 本质上是在模仿这个流程。1.3 关键选型对比这个方案里每一步都有多个开源或商业模型可选我的最终选型和理由如下方便你直接抄作业环节候选方案最终选择选择理由实操感受图片描述通用视觉模型A / 轻量模型B视觉模型A对色彩和光线的描述更细腻输出是结构化文本便于后续解析写诗通用大模型C / 专用写诗模型D通用大模型C专用模型容易词藻堆砌通用模型在少量示例引导下反而更自然情绪判断情感分析接口E / 本地模型F情感分析接口E部署零成本返回的情绪维度和音乐标签库天然兼容选型这件事永远没有“最好”只有“最适合”。如果你是离线场景或者对数据隐私有要求那本地开源模型肯定优先但如果是为了快速出效果、迭代想法直接用几行代码就能调用的现成服务绝对是省时间的不二之选。2. 系统架构设计从“单次调用”到“自动化流水线”2.1 整体架构图文字版整个系统被我设计成一个“输入一张图输出一段带 BGM 的诗”的流水线分四个模块输入层图片文件/URL → 画面解析模块 → 提示词组装模块 → 文本生成模块 → 情感分析模块 → 输出层诗 音乐标签四个模块之间通过 JSON 传递数据模块和模块完全解耦。这样做的好处非常明显任何一个环节想换模型只需要改对应模块的接口其他不用动。2.2 为什么坚持“模块化”而不是“弄个一站式脚本”说实话这种规模的项目全写在一个 Python 文件里也就 200 行硬怼也能跑通。但我刻意做了拆分主要原因是调试体验差距巨大。AI 项目最大的变数永远是“模型输出不可控”。中间的提示词组装环节我要反复调——比如怎么把图片描述揉进写诗提示词里才能在“控制方向”和“保留发挥空间”之间平衡。如果不做模块化每次调试都要把整条链路重跑一遍非常浪费时间。拆开之后我可以单独测试某个模块甚至手动构造假数据喂给文本生成模块效率完全不在一个层级。2.3 数据流设计与容错模块之间传输的数据格式我统一设计成下面这种 JSON{ scene: 天空被染成橙红色云层边缘有金色光芒远处有飞鸟掠过, elements: [晚霞, 云层, 飞鸟], color_tone: 暖色调高饱和 }这个设计承担了两个作用一是让下游模块拿到结构化的输入写提示词时直接引用二是保留了“人工核验”的可能性——如果生成结果离谱我可以快速定位是画面描述错了、还是写诗模型跑偏了。容错方面我在每个模块之间加了兜底返回机制。比如图片解析失败时会返回一个通用描述“夕阳下的自然风景”而不是让整个链路中断。这个在实践中非常管用因为 AI 接口偶尔会超时或返回空值不做好兜底自动化的“自动”就名存实亡了。3. 实操篇图像描述、情感分析与提示词工程3.1 画面描述模块让 AI 学会“观察”这个模块的核心目标是把一张图片转化成“有画面感、有信息量”的文字而不是简单输出“这是一张晚霞照片”。我的做法分三步预处理压缩图片分辨率到合适尺寸避免上传超时构造描述提示词强制模型从“整体氛围、具体元素、色彩构成、可能的隐喻”四个维度输出解析返回的 JSON提取关键字段。描述模块的提示词我写得非常具体这里分享一个可以直接用的版本你是一个视觉叙事者。仔细观察这张图片并严格按照以下格式输出 { scene: 描述整体画面包括主体、光线、氛围不超过30字, elements: [列出2到4个关键视觉元素], color_tone: 用一句话概括色彩基调和情绪基调 } 注意不要评价图片不要使用“美丽”“壮观”等笼统形容词。为什么要求它“不要用美丽、壮观”因为这类词对下游写诗模块没有任何帮助。我要的是客观元素和光线描述情绪解读留给写诗环节自己去升华。3.2 写诗模块提示词才是灵魂写诗模块是整个项目里最像“玄学”的部分。同样的模型、同样的图片描述提示词写法不同输出质量可能一个天上一个地下。我第一次写的提示词是这样的请根据以下画面写一首关于晚霞的诗天空被染成橙红色云层边缘有金色光芒。跑出来的结果是标准的“老干部体”晚霞映红天际边金色光芒洒人间。平仄倒是没什么大问题但没有任何情绪和记忆点像小学作文。后来我换了个思路不再让 AI“写一首诗”而是给它一个“表达场景”让它成为某个情绪状态下的人再结合画面去说心里话。修改后的提示词你是一个在都市生活、有些疲惫但依然热爱自然的人。傍晚你偶然抬头看到了这样的画面{scene}。请用一首现代短诗表达你此刻的感受。 要求 1. 不要直接出现“晚霞”“夕阳”等词汇 2. 不追求押韵更重视画面感和情绪流动 3. 6-8行为佳 4. 结尾需要有留白不回扣主题。同样的描述这次生成的诗立刻有了完全不同的气质把头埋进霓虹的人 偶尔也会被整片天空拦住。 那些光正在出走 从楼群的缝隙里 拖走一尾一尾橙色的鱼。这才是我想要的东西有画面、有情绪、不油腻。给 AI 一个“角色”和“表达欲”远比给一堆形容词管用。3.3 情感分析与音乐匹配让“氛围”闭环写诗模块拿到文本后情感分析模块开始工作。我用的是现成的情感分析服务它能返回“积极度”“平静度”“忧郁度”三个维度的分值。匹配规则很简单直观用一个阈值区间去查表积极度 0.6且平静度 0.5 → 民谣/轻摇滚忧郁度 0.6 → 钢琴独奏/氛围音乐平静度 0.7且积极度和忧郁度都低于 0.4 → 轻音乐/后摇这套规则我调试了很久才找到合适的阈值最初的问题在于阈值设置得“太敏感”导致稍微偏忧郁的诗都会匹配到钢琴曲整体听感变得千篇一律。4. 完整执行链路从照片输入到成品的自动化实现4.1 我实际的调用流程与中间结果用一张我傍晚在阳台拍的照片跑完整流程实际中间输出如下画面描述模块输出{ scene: 天空从橙红色渐变到暗紫色远处建筑物只剩下轮廓近处有路灯刚亮起, elements: [渐变天空, 建筑轮廓, 路灯], color_tone: 蓝紫色与橙色交织安静而温暖 }写诗模块输出白日的火在楼顶熄灭。 城市被抽走了喧响。 只剩下一盏一盏的 把暮色认作归途。情感分析模块输出积极度0.25 平静度0.81 忧郁度0.42按照映射规则匹配到“轻音乐/后摇”。整体听感非常协调这就是整个链路最核心的价值多模型接力把抽象的氛围变成可量化的匹配规则最后组合出有情绪的作品。4.2 定时任务与自动化部署整个链路确定之后我把它封装成 Python 脚本并用 cron 定时任务驱动。我设置了每天两个时段自动运行傍晚六点日落时分自动拉取本地最新一张“今日照片”生成诗歌并保存到指定文件夹。部署细节使用schedule库做定时调度每 5 分钟检查一次是否到达设定时间所有模型 API 调用加上tenacity库重试装饰器最多重试 3 次失败后进入兜底分支生成结果写入output/日记_日期.md同时把诗和音乐标签写入 JSON方便之后做网页展示。这一步做完整个“实验室玩具”才算真正变成一个可持续运行的自动化 demo。4.3 前端展示朋友圈卡片是怎么生成的我还顺手做了一个最简单的 HTML 模板用 Python 把生成的诗和匹配到的音乐信息填进去输出一张卡片式的长图。实现方式不复杂用Pillow库把诗逐行绘制到背景图上背景图采用高斯模糊后的原照片避免文字和画面抢注意力在卡片底部加上音乐标签描述文字。出来的效果很有“氛围感”发到朋友圈好几个人来问是怎么做的。这算是这个项目最直接的“正反馈”。5. 踩坑实录与排查技巧72小时实战中遇到的问题5.1 图片描述模块时常“幻觉”最大的坑出现在图片描述模型上。比如一张普通的城市黄昏照片它可能会凭空生成“远处有飞鸟掠过”这类完全不存在的信息。这个问题的本质是视觉模型在尽力“脑补”它不确定的内容。排查方法很土但有效加一层置信度判断。我在提示词里强行加上“如果某些细节无法确定请用‘可能’等模糊词不要直接下结论”。同时在后续写诗提示词里不让它过度引用不确定元素。这是一个工程上的妥协——与其追求绝对准确不如控制影响因素。5.2 写诗模型的“油腻”问题与控制方法晚霞类题材极容易触发模型的“优美词库”生成出一堆“金色的梦”“天空的诗篇”这类堆砌辞藻。我试过在提示词里写“禁止使用以下词汇梦、诗篇、画卷、美丽、迷人”有效果但依然会漏网。更有效的解法是从“风格示范”入手我在提示词里固定附上一首示例要求它保持类似的风格。这个方法比单纯禁令强很多因为大语言模型本质上是“模仿者”给它一个高品质参照物比给它一堆禁令更容易生成符合预期的内容。5.3 连续生成时的同质化问题跑久了之后发现连续生成的诗歌在结构上高度相似——都是“先写城市再写光线最后抒情”。这是典型的“模型坍缩”现象和训练数据分布及采样参数有关。我的对策是给写诗模块的采样参数加随机性response client.chat.completions.create( modelxxx, temperature0.9, top_p0.95, )同时维护一个“最近已用意象清单”在每轮生成前动态传给模型告诉它“请避免使用这些被用过的意象”。效果挺明显七十多首诗里明显的重复感被拉低了很多。常见问题排查速查表问题现象可能原因解决方式图片描述凭空编造元素视觉模型过度脑补提示词加“不确定就用模糊词”约束诗歌全是“金色梦想”式陈词滥调提示词触发通用词库加示例风格 明确禁用词连续生成内容高度相似采样参数太低/模型坍缩调高 temperature 至 0.9 左右接口偶尔超时或空返回服务端不稳定加重试机制 兜底描述分支情感分析和音乐匹配不协调阈值设置不合理拉大区间减少匹配跳变6. 经验总结、启发与可扩展的后续方向这个项目最大的启发在于AI 创作工具的价值不在于“生成一个完美成品”而在于“可控地生成一个可用的半成品”。如果我把所有期望都寄托在单个模型上那得到的基本是“平庸的完美”反而是通过模块化拆分、提示词工程和规则系统才能把失控风险控制在可接受范围内让结果带上“人的味道”。6.1 可扩展方向如果你看完也想动手搞个自己的“AI 内容生成器”这里提供三个可以直接落地的后续扩展方向扩展成“每日推荐”每天定时抓取你的相册最新照片自动生成一句配文或一首诗推送到你自己的订阅号或群聊加入“用户反馈循环”对生成结果打分后自动记录定期用这些数据微调或重新调整提示词和阈值规则换成“绘画风格”输出把写诗后的情绪分值用于匹配不同的绘画风格提示词接入绘图模型直接生成一张插画感卡片形成“从一张图到一幅新图”的完整生成闭环。6.2 最后说几句实在话玩这个项目的三天里我反复改了十几版提示词最终结论是AI 写诗目前做不到“读懂人心”但它可以成为一个很趁手的“表达放大器”。如果你能把它用在合适的位置——比如记录生活、辅助内容创作、做一个氛围感小工具——它就是有用的。但如果指望它替代真正的文学创作那暂时还不太现实。这个边界想清楚了玩起来就会非常舒服。我自己打算继续把这个项目往下迭代下一版会加入“用户反馈打分”让 AI 的诗歌风格逐渐适应用户个人偏好。这个方向我觉得比单纯“追求更聪明的模型”更有意思。
阅读完成 · 觉得有帮助?
咨询建站