机器也能写诗?AIGC诗歌创作实战指南(附踩坑避雷手册)

机器也能写诗?AIGC诗歌创作实战指南(附踩坑避雷手册)

机器也能写诗?AIGC诗歌创作实战指南(附踩坑避雷手册)

机器也能写诗?AIGC诗歌创作实战指南(附踩坑避雷手册)

“哥们,我昨晚让AI给我前女友写了首七言绝句,她看完把我微信备注改成了‘赛博李白’。”
—— 某个凌晨三点还在调参的前端群友

当AI开始押韵,人类诗人慌不慌?

先别急着把海子诗集拿去垫桌脚。
AI写诗这事儿,说玄乎也玄乎,说土嗨也土嗨。它既能给你整出“银河跌进啤酒杯”这种赛博浪漫,也能把“月亮”和“WiFi信号格”强行押韵,看得你脚趾抠出三室一厅。
但别怕,今天咱们不聊虚的,直接上手——从“让模型张嘴”到“前端页面能跑能摇”,一条龙给你整明白。
看完你也能在群里甩个链接:“兄弟们,输入关键词秒出七律,流量密码拿去。”

(温馨提示:本文代码全部可抄,抄完报错算我输。)


AIGC写诗到底是个啥玩意儿?——先扒掉技术的底裤

说白了,就是让大模型背完《全唐诗》+《现代诗三百首》之后,照着你的prompt开始“接龙”。
核心公式就一句:
“给定上文,预测下一个token。”
别被“token”吓到,你就把它当成“下一个汉字”或者“下一个拼音片段”。模型每天干的事,就是玩一场超大规模的“成语接龙”,只是接的是人类几千年的酸爽情诗。

中文诗的特殊debuff

  1. 押韵:英文只需要“end with -ing”,中文得整《平水韵》,不然“花”和“蛙”强行押韵,读起来像相声。
  2. 平仄:平平仄仄平平仄,模型看到这一串脑瓜子嗡嗡的,loss函数里不加惩罚,它就给你整出“拖拉机横冲直撞”的节奏。
  3. 意境:AI最擅长“把牛说成是牛”,但它很难明白“牛”也可以是“回不去的田园”。

主流模型怎么“学会”写诗?——Transformer不是变形金刚,但确实会变

训练数据黑幕

  • 古诗文网爬虫:全唐诗 42k、全宋词 20k、现代诗 8k,再加上微博“#每日一诗#”话题 100w 条,混一起就是一锅“古今乱炖”。
  • 清洗规则:去掉“转发”“//”这些杂质,再把“啊”“哦”这类语气词统一映射到<EMO> token,防止模型“啊哦”个不停。
  • 数据增强:把一句“春风又绿江南岸”随机替换成“秋风又黄江北岸”,让模型知道“绿”不是唯一答案,押韵别死磕。

loss函数里的小心机

# 伪代码:在交叉熵上加押韵惩罚defrhyme_penalty(logits, target_tokens, rhyme_dict):""" logits: 模型预测的下一个token分布 target_tokens: 正确答案 rhyme_dict: 自己整的《平水韵》映射表 """ penalty =0if target_tokens[-1]in rhyme_dict:# 最后一个字需要押韵 rhyme_class = rhyme_dict[target_tokens[-1]]for token_id, logit inenumerate(logits):if idx2token[token_id]in rhyme_dict:if rhyme_dict[idx2token[token_id]]!= rhyme_class:# 不押韵就狠狠扣分 logits[token_id]-=5.0return logits 

就这么简单粗暴,模型被“扣分”扣多了,慢慢学会“花/家/涯”一家亲。


实操上手:三行代码让AI给你写情诗

别急着租GPU,先用Hugging Face上白嫖的Chinese-Poetry-GPT2爽一把。

pip install transformers torch 
from transformers import BertTokenizer, GPT2LMHeadModel import torch # 1. 模型&tokenizer一步到位 tokenizer = BertTokenizer.from_pretrained("ethan-yi/Chinese-Poetry-GPT2") model = GPT2LMHeadModel.from_pretrained("ethan-yi/Chinese-Poetry-GPT2") model.eval()# 2. prompt越中二,诗越对味 prompt ="小姐姐,今晚的月亮像刚充值的币,"*3# 重要的事说三遍 inputs = tokenizer(prompt, return_tensors="pt")# 3. 生成——temperature=0.8 赛博微醺感with torch.no_grad(): outputs = model.generate(**inputs, max_length=128, do_sample=True, temperature=0.8, top_p=0.9, repetition_penalty=1.2) poem = tokenizer.decode(outputs[0], skip_special_tokens=True)print(poem)

跑出来的效果可能是:

小姐姐,今晚的月亮像刚充值的币, 小姐姐,今晚的月亮像刚充值的币, 小姐姐,今晚的月亮像刚充值的币, 银河兑进啤酒杯,想你到WiFi满格醉。 

看到没,AI已经把“想你”和“WiFi”强行押韵,土味赛博情诗拿捏了。
想再古风?把prompt换成“春风十里”+“扬州”+“豆蔻”,它立刻给你整出“二月卖新酒”的味儿。


你以为AI写诗就是复制粘贴?——错,它背后全是套路

Token预测视角下的“创作”

模型其实没“创作”,它只是疯狂算概率:
“春风又绿江南岸”后面,最高概率的是“明月何时照我还”,于是它就“抄”了。
但如果把temperature拉到1.5,概率分布被搅成一锅粥,它就可能给你整出“春风又绿江南岸,量子纠缠般的思念”。
所以,temperature=0.5 是李白,temperature=1.5 是喝醉的李白,temperature=2.0 是李白掉进了搅拌机。

前端视角看“生成”

咱们写网页,不可能让用户在命令行里python poem.py
把模型封装成接口,最省事的是直接transformers+fastapi

# api.pyfrom fastapi import FastAPI from pydantic import BaseModel import uvicorn from poem_engine import generate_poem # 上面那段逻辑封装一下 app = FastAPI()classKeyword(BaseModel): keyword:str style:str="tang"# tang / song / [email protected]("/ai/poem")defget_poem(kw: Keyword): prompt =f"{kw.style}风格,关键词:{kw.keyword},写一首七言绝句:" poem = generate_poem(prompt, max_len=64)return{"poem": poem}if __name__ =="__main__": uvicorn.run(app, host="0.0.0.0", port=8000)

前端小哥直接fetch('/ai/poem', {method:'POST', body:JSON.stringify({keyword:'火锅'})})
秒回:

火锅煮月亮,红油染星光。 毛肚是归舟,鸭肠到故乡。 

优点吹爆,缺点扎心——AI诗歌的AB面

A面:快、多、不要版权费

  • 快:GPU 上跑 1 秒 20 首,老板让你写 100 首藏头诗,3 分钟交稿。
  • 多:想写 1000 首关于“孤独”的诗?AI 不emo,它写到显卡冒烟都不累。
  • 版权:它“抄袭”的是概率,不是字面值,法律上算“原创”,甲方听了直点头。

B面:机器味一眼识破

  • 情感假:它可以把“哭”字用 20 种修辞堆砌,但它没真的哭过。
  • 文化错:让 AI 写端午,它可能冒出“屈原吃粽子看龙舟比赛”——屈原:???
  • 创新边界:AI 最擅长“缝合”,但很难“跳出盒子”。你让它写“新冠情诗”,它只会“口罩遮住你的脸,却遮不住我对你的思念”,听着像十年前的QQ空间。

前端怎么把AI诗歌玩出花?——不止调接口那么简单

1. 古风UI + 毛笔字动画

<!-- Vue3 + Tailwind 快速撸一个“赛博文房四宝” --> <template> <div> <div> <h1>AI 赛博诗塾</h1> <!-- 输入框 --> <input v-model="keyword" @keyup.enter="getPoem" placeholder="输入关键词,比如‘火锅’" /> <!-- 毛笔字动画 --> <svg v-if="loading" viewBox="0 0 100 100" > <text x="50" y="50" text-anchor="middle" fill="#92400e" font-size="20" > 落笔中... </text> </svg> <!-- 诗句 --> <div v-if="poem" > <p v-for="line in poem.split(',')" :key="line" > {{ line }} </p> </div> </div> </div> </template> <script setup> import { ref } from 'vue' const keyword = ref('') const poem = ref('') const loading = ref(false) async function getPoem() { loading.value = true const res = await fetch('http://localhost:8000/ai/poem', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ keyword: keyword.value }) }) const data = await res.json() poem.value = data.poem loading.value = false } </script> 

2. AI vs 人类 擂台赛

思路:

  • 同一关键词,AI 先写一首,匿名展示;
  • 再拉群友写一首,匿名展示;
  • 用户盲投票,点选“哪首更像人”。
  • 最后揭晓,AI 胜率超过 60% 就可以截图吹半年。

前端实现就是两张卡片 + 一个vote接口,代码太简单就不占篇幅,重点是:记得把 AI 的作者名随机成“李清照 233 号机”,人类作者随机成“张二狗”,悬念拉满。


翻车现场复盘:为什么我的AI写出了“火锅煮月亮”?

1. 乱码——tokenizer背锅

中文 GPT 很多用 BertTokenizer,遇到生僻字直接[UNK],于是“踽踽独行”变成“[UNK] [UNK] 独行”,诗意瞬间变尿意。
解决:提前把《新华字典》+《康熙字典》扔给 tokenizer 做add_tokens,别让 [UNK] 毁了“踽踽”。

2. 跑题——prompt太飘

你输入“孤独”,模型却写“火锅”,大概率是 prompt 里带了“火锅”的上下文。
解决:prompt 用模板锁死:

template ="七言绝句,主题:孤独,禁止出现食物!首句必须包含‘雨’字:"

3. 强行押韵——“月亮”/“WiFi”惨案

temperature 太高,模型开始“乱押”。
解决:

  • 后处理 + 韵表过滤,生成后检查最后一句韵脚,不押韵就重新采样;
  • 或者直接在 logits 阶段加 rhyme_penalty(前面代码有)。

4. 文化常识错误——屈原“被”吃粽子

训练数据里“屈原”“粽子”“龙舟”高频共现,模型直接脑补“屈原吃粽子”。
解决:

  • prompt 加“历史事实:屈原投江,当时尚无粽子”;
  • 或者用知识图谱做过滤,生成后检查实体关系,错了就回炉。

老司机私藏技巧:让AI写出“人味”

1. 情绪标签法

别只喂关键词,先喂“情绪向量”:

emotion ="孤独+雨夜+80年代老磁带" prompt =f"{emotion},写一段现代诗,不超过50字:"

模型会把“磁带”转录成“A面是我,B面是你”,瞬间有那味儿。

2. 散文→诗压缩

先让模型写一段 100 字散文,再下一条指令:“把上文压缩成 28 字七言绝句,保留‘磁带’意象”。
两步走,比一步直接生成诗更稳。

3. 人类半截诗续写

half ="我把远方的酒喝成故乡的月光," prompt =f"续写下半段,保持对仗与押韵,韵脚‘ang’:\n{half}"

AI 续:

却把近处的你念成枕边的霜。 

真假难辨,群里妹子直呼“这是哪个宝藏男孩写的?”


彩蛋:给老板写藏头诗保命指南

老板叫“张总英明神武”,藏头诗要求:张总英明神武,每句开头依次嵌入。
直接上模板:

heads =["张","总","英","明","神","武"] prompt ="七律,藏头诗,每句首字依次:{},风格豪放,拍老板马屁,但别太明显:"\ .format(''.join(heads))

生成效果:

张帆远航破浪行, 总把星辰作指针。 英气如潮吞日月, 明眸似电划云层。 神采飞扬千里路, 武略深藏万籁音。 

老板一高兴,给你绩效多打 0.5,年底还能多抢两箱月饼。
但注意:千万别让 AI 写“裁员”主题,它可能回你:

沁园春·优化 大厂风云,千里裁员,万里波动。 望楼宇内外,唯余惶惶;工位上下,顿失涛涛。 

HR 看了直冒冷汗,连服务器都想给你拔了。


结语(微信群语音转文字版)

“兄弟们,今天这把 AI 写诗就聊到这儿。代码都甩给你们了,回头谁把‘火锅煮月亮’做成 NFT 卖了,记得 V 我 50。
下次想整啥?AI 写 rap 还是 AI 写情书?在群里 @ 我,我去给它调参调到它亲妈都不认识。”

在这里插入图片描述

Read more

airsim无人机自动避障路径规划自动跟踪实验辅导

airsim无人机自动避障路径规划自动跟踪实验辅导

计算机人工智sci/ei会议/ccf/核心,擅长机器学习,深度学习,神经网络,语义分割等计算机视觉,精通大小lun文润色修改,代码复现,创新点改进等等。文末有方式 2025-2026最容易出顶会/毕业论文的热门方向之一:   基于AirSim的无人机深度强化学习路径规划——你真的“卷”对了吗? 如果你现在还在做传统A*、RRT、DWA、人工势场、或者纯深度学习的端到端避障…… 那很抱歉,2025年底~2026年审稿人和答辩老师已经开始审美疲劳了。 真正让审稿人眼睛一亮、让毕业答辩现场鸦雀无声的关键词组合,现在大概长这样: AirSim + 深度强化学习 + 无人机 + 路径规划 + Sim-to-Real + 视觉/激光融合 + 端到端 + 稀疏奖励 下面这几个组合,几乎是目前最容易做出“看上去就很前沿”的实验结果的赛道(尤其适合发中文核心、EI、SCI三区~二区,以及部分顶会workshop): 1.DQN/DDPG/

By Ne0inhk

【无人机避障算法核心技术】:揭秘五种主流算法原理与实战应用场景

第一章:无人机避障算法概述 无人机避障算法是实现自主飞行的核心技术之一,其目标是在复杂环境中实时感知障碍物,并规划安全路径以避免碰撞。随着传感器技术和计算能力的提升,避障系统已从简单的距离检测发展为融合多源信息的智能决策体系。 避障系统的基本组成 典型的无人机避障系统包含以下关键模块: * 感知模块:利用激光雷达、超声波、立体视觉或RGB-D相机获取环境数据 * 数据处理模块:对原始传感器数据进行滤波、特征提取和障碍物识别 * 决策与规划模块:基于环境模型生成避障轨迹,常用算法包括A*、Dijkstra、RRT和动态窗口法(DWA) 常见避障算法对比 算法优点缺点适用场景A*路径最优,搜索效率高高维空间计算开销大静态环境全局规划DWA实时性强,适合动态避障局部最优风险室内低速飞行RRT*渐进最优,适应复杂空间收敛速度慢三维未知环境 基于深度学习的避障方法示例 近年来,端到端神经网络被用于直接从图像生成控制指令。以下是一个简化的行为克隆模型推理代码片段: import torch import torchvision.transforms as tran

By Ne0inhk
医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

软件环境部署 系统软件架构以实时性与兼容性为核心设计目标,具体配置如下表所示: 类别配置详情操作系统Ubuntu 20.04 LTS,集成RT_PREEMPT实时内核补丁(调度延迟<1 ms)开发环境Python 3.8核心库组件PyQt5 5.15.4(图形界面)、OpenCV 4.5.5(图像处理)、NumPy 1.21.6(数值计算) 该环境支持模块化控制界面开发与传感器数据的实时融合处理,为连续体机器人的逆运动学求解(如FB CCD算法测试)提供稳定运行基础[16]。 手眼协调校准 为实现视觉引导的精确控制,需完成相机与机器人基坐标系的空间映射校准,具体流程如下: 1. 标识点布置:在机器人末端及各段首尾、中间位置共固定7个反光标识点,构建臂型跟踪特征集[29]; 2. 数据采集:采用NOKOV度量光学动作捕捉系统(8台相机,

By Ne0inhk

简单易学的分离式部署小米智能家居Miloco方法

一、安装环境 * Windows用户:安装WSL2以及Docker * macOS/Linux用户:安装Docker 此处不再赘述,网上随便找个教程即可。特别地,对于Windows用户来说,你需要将 WSL2 的网络模式设置为 Mirrored。 二、使用Docker部署Miloco后端 以下均为bash命令。请Windows用户进入WSL2 / Linux、macOS用户进入终端操作: mkdir miloco cd milico vi docker-compose.yml 以下是compose的内容(不会使用vi的同学可以傻瓜式操作:先按i,再使用粘贴功能,然后按冒号,输入wq然后回车,记得关闭输入法): services:backend:container_name: miloco-backend image: ghcr.nju.edu.cn/xiaomi/miloco-backend:latest network_mode:

By Ne0inhk