~ / tech / projects / ai-poetry
ai-poetry/index.mdx
cat index.mdx
🤖

天权 · 古典诗词生成 Agent

用 85 万首古诗词语料微调 Qwen3,搭了一个三模型协作的 Poetry Agent(生成 + 推敲 + 校验),格律正确率从单模型 58% 拉到 95%。现在在测试 training-free 方案——用新一代基模 + 格律 harness 直接约束解码。

status: ● Active
date: 2024-11
category: agent
LLM SFT DPO Agent NLP 诗词
README.md

这个项目是什么

天权是一个古典诗词生成系统。核心是一个三模型协作的 Poetry Agent:一个模型理解用户意图并改写 prompt(Agentic),一个模型生成诗词(Shi),一个模型推敲修复格律错误(Tuiqiao),中间用我自研的格律检测器串联起来。

在 Shih80Bench(62 条近体诗评测集)上,这套 Agent 系统的格律正确率达到 95.2%,相比单模型最佳的 58.4% 提升了 37 个百分点。

不过,这是天权的第一代——基于 Qwen3 微调。它刚发布没多久,Qwen3.5 和 GLM-5 就出来了,新一代基模的诗词生成能力比上一代强了很多。所以现在正在测试一个 training-free 方案:用 GLM-5.1 + 格律 harness(方寸)做 tool-use。方寸是我们自研的格律工具,有本地 CLI,可以封装成 LLM tool——告诉模型格律是否正确、哪里出律要改、有什么推荐替换选项。前期试过约束解码,发现对语义连贯性破坏很大;tool-use 的方式让模型自己决定怎么改,效果好得多。目前格律合格率还行,但美感上还差一截。

为什么做这个

起因很直接:我从 2012 年开始写古典诗词,2018 年接触格律,2021 年加入国学社后写了大量近体诗,对格律有肌肉记忆级的熟悉度。但当时所有 LLM 写出来的诗都不合格律——ChatGPT 写七律能把第三联写成不对仗的、平仄全错的东西,还自信地告诉你「这首诗符合七律格式」。我觉得这不是一个「模型不够大」的问题,而是一个「没人认真教过它规则」的问题。

另一个动力来自社团:国学社有不少社员想学写诗但被格律门槛吓退了。如果有一个工具能生成格律正确的示范作品,甚至能帮你修改现有作品里的格律错误,对创作者来说是很有帮助的。

我做了什么

独立完成了从数据到部署的全流程。

2024.11
项目立项
定义需求:格律正确的诗词生成 + 修改建议
2026.02.05
数据准备
85 万首古诗词语料,构造 186 万条 SFT 训练数据
2026.02.06
Qwen3-4B SFT
4 GPU LoRA 训练,构建 Shih80Bench 评测基准
2026.02.12
0.5B 小模型实验 + DPO
4310 偏好对,验证 DPO 对格律的提升效果
2026.02.24
4B DPO 8 epoch
格律正确率 58.4%,单模型最佳
2026.02.24
推敲模型 tuiqiao-v0.1
5% 补全数据、1 epoch、18 分钟训练
2026.02.24
Poetry Agent 上线
三模型协作,格律正确率 95.2%
2026.05
Training-free 方案探索
GLM-5.1 + 格律 harness (方寸) tool-use,免微调

数据层:从 85 万首古诗词原始语料出发,构造了四类 SFT 数据——诗生成 817K、词生成 95K、补全 456K、对仗 491K,总计 186 万条。格律检测器 checker.py 是我从南洋吟游那边迁移过来的核心基础设施,支持平仄、押韵、对仗、体裁识别的全量校验。

训练层:先在 Qwen3-4B 上做 SFT,格律正确率 48.8%。然后用 4310 对偏好数据做 DPO,8 epoch 长训后拉到 58.4%。推敲模型 tuiqiao 只用了 5% 的补全数据(22K 条)、1 个 epoch、18 分钟训练——成本极低但效果很好。

Agent 层:最关键的架构决策是把”生成”和”修复”拆成两个模型。Shi 模型负责生成候选(温度 0.7,每次 4 首),格律检测器筛选,有错误的送给 Tuiqiao 做推敲(mask 错字位置,让模型补全),最多 3 轮。77% 的最终输出经过了推敲修复。

推敲模型的灵感来自贾岛”僧敲月下门”的典故——初稿出了格律错误,不全盘否定,而是精准 mask 错误位置,让专门的修复模型来”推敲”替换。这个做法听起来朴素,但它是整个系统从 58% 到 95% 的核心驱动力。

单模型直出 (4B DPO 8ep)
  • 格律正确率 58.4%
  • 体裁正确率 85.8%
  • 韵部正确率 88.1%
  • 无修复机制,错了就是错了
+ Poetry Agent (三模型协作)
  • +格律正确率 95.2% (+37pp),格律诗 100%
  • +体裁正确率 95.2% (+9pp)
  • +韵部正确率 90.3% (+2pp)
  • +推敲修复了 77% 的输出
核心驱动力不是更强的模型,而是把'生成'和'修复'拆开

过程中的思考

这个项目最反直觉的发现是:推敲模型的训练成本极低,但贡献了绝大部分提升。 5% 的数据、1 个 epoch、18 分钟——换来的是系统从 58% 到 95% 的跃升。这说明格律修复是一个比格律生成简单得多的任务:告诉模型”这个位置的字平仄错了,换一个”,比告诉它”从头写一首格律正确的诗”容易太多。

另一个思考是关于 微调 vs. training-free。天权一代基于 Qwen3 做了大量 SFT + DPO,Qwen3.5 和 GLM-5 出来后,基模本身的诗词能力上了一个台阶。现在用 GLM-5.1 加方寸格律 harness 做 tool-use,免微调就能达到不错的格律正确率——模型生成初稿,方寸告诉它哪里出律、推荐改什么,模型自己修改。前期试过约束解码方案,直接在 logits 层面强制平仄,发现对语义连贯性破坏很大,生成出来的东西根本不像话。tool-use 让模型保留自主权,效果好得多。

但微调绝对不是白做的——恰恰相反,美感上微调模型远超 training-free 方案。我们评估认为,天权一代以 4B 的体量,巅峰水平能达到 5 年以上经验的资深创作者水准,平均也有中上,远超 training-free 的 GLM-5.1。Gemini 3.1 Pro 也是一个有趣的对照:它的格律准确率已经相当不错,指令遵循能力更是”杀死比赛”级别的——能把各种各样的内容写成像模像样的古典诗词——但美感上可能比不过我们的 4B 模型。这说明格律是可以靠工具约束解决的,但美感只能靠数据喂出来。

所以现在的思路不是”微调 or training-free”二选一,而是看场景:追求美感和风格一致性用微调模型,追求灵活性和快速迭代用 training-free + tool-use。天权的价值在于:它让我彻底理解了这条分界线在哪里。

一些数字

0
训练语料
0
SFT 数据
0%
格律正确率
0min
推敲模型训练

天权作品选

闲情已寄秋江北,往事如云梦泽南。 ——《次韵林雨夜十一月十一日八首 其八》

岸草暗移灯影乱,天星低照水衣明。 ——《社课 旅夜》

小院闲行。落絮沾衣月满庭。 ——《减字木兰花》

更多作品见天权练笔集

Q&A

Q: 为什么不直接用更大的模型?95.2% 是 4B 模型做到的,换 70B 会不会直接解决?

可能会好一些,但不会根本解决。格律是硬约束——平仄对错是二值的,不是”差不多”就行。大模型可能会减少错误率,但只要有一个字错了,整首诗就不合格律。Agent 的核心价值不是模型大小,而是”检测-修复”这个闭环。你可以把里面的模型换成任何大小的,架构本身是通用的。

Q: 格律正确了,但诗写得好吗?

比想象中好。天权一代虽然只有 4B 参数,但巅峰水平能达到 5 年以上经验的资深创作者水准,平均也有中上。这是微调的核心价值——85 万首古诗词的 SFT 让模型内化了大量的意象搭配、句式结构和美学偏好,这不是 prompting 或 tool-use 能替代的。作为对比,GLM-5.1 用 training-free 方案虽然格律能过,但美感明显差一档。Gemini 3.1 Pro 指令遵循很强、什么题材都能写得像模像样,但论诗词的内在韵味,也不如我们微调后的 4B。格律可以靠工具约束,美感只能靠数据喂出来。

Q: 天权和南洋吟游的格律校验引擎是什么关系?

同一套核心代码。南洋吟游的 checker 是最早写的,用于网站上的作品格律检测和教学。天权把它拿来做了两件事:一是生成 SFT 训练数据时做质量过滤,二是 Agent pipeline 里的实时校验。checker 还被 Neo-Classic 论文用来生成评测题目。可以说这个格律引擎是整个诗歌技术生态的地基。

Q: 「天权」这个名字也是北斗七星?

对,北斗第四星。天权在斗身正中,古人叫它”文曲”或”纽星”——纽是枢纽、连接的意思。天权连接着斗口(灵枢/天枢,知识)和斗柄(开阳,行动),定位是”创造”——从知识到作品的转化。灵枢管知识,天权管创作,开阳管执行。三颗星各司其职。

cd .. · ← back to tech
~ — press / to open terminal