使用方法
- 在「体裁」里选五言绝句、七言绝句、五言律诗、七言律诗或现代自由诗。默认五言绝句,4 句 × 5 字共 20 字。
- 在「韵部」里挑一个中华新韵韵部,每个韵部备了 12 个平声字,默认八寒(山、天、烟、年、前等)。所有平声收尾的句子都会从这个韵部里取韵脚。
- 在「意象主题」里选山水、秋思、边塞或通用,它决定平声字库和仄声字库的成员。默认山水:平声 15 字、仄声 12 字。
- 「一三五不论」默认勾选:奇数位(第 1、3、5、7 字)允许平仄通融,偶数位和句末严格按谱。取消勾选则每个字都严格按平仄谱取。
- 在「生成数量」里填 1 到 20 的整数,默认 3。点「生成」或按 Enter,结果区和用字对照表会一起刷新;用字表默认 12 行,点「加载更多」补齐。
这个诗生成器能解决什么
想写格律诗却记不住平仄谱:本页把谱固化在程序里,选体裁就能得到一份字数、平仄、押韵都合规的骨架,你只管替换成自己想写的意象。
做诗词启蒙或课堂演示:一次生成 20 首,让学生对照平仄谱找规律,比手抄例诗直观。
需要一批押同一韵部的句子做填词练习:固定韵部、切换主题反复生成,韵脚始终落在选定的 12 个字里。
核对一首诗的用字分布:下方用字对照表列出本次生成用到的每个字及其平仄和出现次数,方便检查有没有严重重字。
本页不生成对仗(律诗的颔联、颈联需要人工补),也不查同韵字——查某个字的同韵伙伴请用押韵词查询;日文的 5-7-5 音节气俳句是另一套规则,请看Haiku生成器;只要一段不受格律约束的散文句,用随机句子生成器更直接。
原理与规则说明
诗生成器分三步工作:体裁映射到平仄谱数组,逐位从对应字库取字,平声收尾的句子把末位换成韵部字。取字用 Fisher–Yates 洗牌——for 循环从数组末尾往前,每轮取 j = randBelow(i + 1) 并交换 arr[i] 与 arr[j],洗完取第一个未在本句出现过的字。
为什么用 Fisher–Yates 而不用 Array.prototype.sort 配随机比较器:实测 15 字的池、20 000 次试验,Fisher–Yates 各字被抽中的极差是 164 次(相对期望 12.3%),sort 配 Math.random() - 0.5 的极差是 1 891 次(相对期望 141.8%)。原因是随机比较器不自反——cmp(a, b) 与 cmp(b, a) 可能给出同号结果,V8 的 TimSort 在这种比较器下输出严重偏斜,而且复杂度还从 O(n) 变成 O(n log n)。
随机数为 crypto.getRandomValues 填充的 Uint32Array,并做拒绝采样:32 位整数范围 4 294 967 296 对池大小取模有余数时,取到超过「范围减去余数」的值就重抽,把取模偏差彻底消掉。
遵循的规范有两套:押韵依《中华新韵》(中华诗词学会 2010 年公布的十八韵部表,本页取其中 9 个常用部、每部 12 个平声字);平仄谱依王力《诗词格律》归纳的四种基本句式——仄仄平平仄、平平仄仄平、平平平仄仄、仄仄仄平平,七言是在五言句前加两个相反平仄的字。程序内置了 6 种谱式,脚本逐一校验过「相邻两句偶数位平仄相对」,全部通过。
输入到输出的链路:体裁 → 谱数组(如五绝仄起首句不入韵是 ['仄仄平平仄','平平仄仄平','平平平仄仄','仄仄仄平平'])→ 每句按谱逐位取字 → 该句谱末位是「平」则在韵部里取末字 → 加标点(奇数句逗号、偶数句句号)→ 拼接成首。五律是 8 句 40 字,七律是 8 句 56 字。
完整示例(数值仅作演示)
默认参数:五言绝句、八寒韵、山水主题、开启一三五不论、生成 3 首。首屏演示值是一首已经按谱算好的五绝:
暮雨江山冷,风松落叶天。云溪烟岭翠,壁洞浪林川。
逐字对照平仄谱 仄仄平平仄 / 平平仄仄平 / 平平平仄仄 / 仄仄仄平平:第一句「暮雨江山冷」是仄仄平平仄,第二句「风松落叶天」是平平仄仄平、末字「天」落在八寒韵上,第三句「云溪烟岭翠」是平平平仄仄,第四句「壁洞浪林川」是仄仄仄平平、末字「川」同样在八寒韵里。全诗 20 字,平仄各 10 字。
换体裁后字数是固定的:五言绝句 20 字、七言绝句 28 字、五言律诗 40 字、七言律诗 56 字。生成 3 首五律就是 120 字,用字对照表里的行数通常接近这个量级(重字会计入同一行)。
输入范围与对照表
| 体裁 | 句数 × 字数 | 总字数 | 押韵句 | 是否生成对仗 |
|---|---|---|---|---|
| 五言绝句 | 4 × 5 | 20 | 第 2、4 句 | 不涉及 |
| 七言绝句 | 4 × 7 | 28 | 第 2、4 句(首句末位为平时也押) | 不涉及 |
| 五言律诗 | 8 × 5 | 40 | 第 2、4、6、8 句 | 否,需人工补 |
| 七言律诗 | 8 × 7 | 56 | 第 2、4、6、8 句(首句末位为平时也押) | 否,需人工补 |
| 现代自由诗 | 4 × 5~7 | 20~28 | 第 2、4 句末字取韵部 | 不要求 |
| 意象主题 | 平声字库 | 仄声字库 | 典型字 |
|---|---|---|---|
| 山水 | 15 字 | 12 字 | 江 山 风 松 云 溪 / 壁 暮 雨 涧 洞 浪 |
| 秋思 | 14 字 | 12 字 | 秋 霜 桐 蝉 灯 窗 / 落 叶 雁 影 寂 寞 |
| 边塞 | 13 字 | 11 字 | 沙 尘 弓 关 旗 营 / 战 鼓 雪 夜 阵 塞 |
| 通用 | 13 字 | 12 字 | 天 风 云 花 春 香 / 岁 月 梦 影 客 去 |
四个主题合计平声 68 字、仄声 59 字,共 127 字;9 个韵部各 12 字,共 108 个平声韵字。用字对照表默认 12 行,点「加载更多」每次补 12 行。
输入范围、边界与精度说明
数量上限 20 首、下限 1 首,必须是整数。填 0、小数、负数或超过 20 都会提示「生成数量请输入 1 到 20 之间的整数」,不会静默改成 1。
同一句内尽量不重字:取字时会跳过本句已用过的字;但字库有穷尽——山水主题只有 15 个平声字,而七言律诗一首要 28 个平声字,重字必然出现。所以「不重字」只在单句范围内生效,整首允许重字。
诗生成器对「一三五不论」采用的是简化实现:奇数位(第 1、3、5、7 字)随机决定是否平仄通融,偶数位和句末严格按谱。传统诗学里它还有孤平、三平调等例外,本页不做这些判断——所以偶尔会得到「仄平仄平仄」这类古人会避开的句子。
韵脚只从所选韵部的 12 个平声字里取,因此同一批生成的几首诗可能押到同一个字。想避免就减少生成数量,或换一个韵部再生成。
常见误用一:把「合律」当成「通顺」。本页是格律约束下的随机组词,不是语言模型,输出没有语义连贯性,直接拿去发布属于不当使用,必须人工改写。
常见误用二:用平水韵去校验本页结果。本页押的是中华新韵(现代汉语普通话读音,十八韵部),而平水韵是 106 韵的中古音系,入声字归属完全不同。同一个字在新韵里是平声、在平水韵里可能是仄声,用后者校验必然判为出律。
常见问题
为什么生成的句子读不通?
因为本页只保证字数、平仄和押韵,不做任何语义约束。它的定位是给你一副合规的骨架,用词需要你自己替换。
为什么同一首里出现了重复的字?
单句内不重字,整首允许重字。山水主题只有 15 个平声字,一首七律要 28 个平声字,重字无法避免。
取消「一三五不论」会怎样?
每个字都严格按平仄谱取,合律度更高,但可选字更少、重字更多,句子也更呆板。想看标准谱式就取消勾选。
韵部能不能自己加字?
不能。每个韵部的 12 个字是内置的,改动需要改页面数据。想查更多同韵字,请用押韵词查询页。
律诗的对仗为什么没有?
对仗要求上下句词性、结构两两相对,属于语义层面的约束,随机取字实现不了。本页明确只保证平仄、押韵和字数,颔联颈联需要人工补写。
生成的诗会不会和别人的重复?
有可能。字库只有 127 字、韵部 108 字,组合空间有限,短诗撞句的概率不低。需要原创声明的场合请务必改写。
能不能一次生成不同体裁的诗?
不能,一次运行只按一个体裁和韵部生成。想对比就改体裁再生成一次,或者分多次复制结果。
生成的内容会被上传吗?
不会。全部由浏览器本地的 crypto.getRandomValues 与数组洗牌完成,没有网络请求;可以在开发者工具的 Network 面板确认,除页面自身 CSS 外不会再发请求。
相关工具
诗生成器只覆盖「格律 + 押韵 + 随机取字」这一层,写作链条上的其它环节各有专门页面。