从苏轼的《海棠》到AI作诗:用Python爬虫+GPT-4o,5分钟教你生成专属古风诗句
从苏轼的《海棠》到AI作诗:用Python爬虫+GPT-4o,5分钟教你生成专属古风诗句
"只恐夜深花睡去,故烧高烛照红妆"——苏轼笔下这株深夜绽放的海棠,穿越千年依然鲜活。如今,我们不仅能通过爬虫技术从诗词数据库中捕捉这份古典美学,更能用GPT-4o让AI模仿苏轼的笔触创作新诗。这不仅是技术的跨界实验,更是对传统文化传承方式的创新探索。
1. 技术准备:构建诗词创作工具箱
1.1 环境配置与依赖安装
要搭建这个AI诗词创作系统,我们需要三个核心组件:爬虫工具获取训练数据、自然语言处理库清洗文本,以及OpenAI API连接GPT-4o。以下是快速搭建环境的命令:
pip install requests beautifulsoup4 openai pandas
注意:建议使用Python 3.8以上版本,某些自然语言处理库对新版Python支持更好。如果遇到SSL证书错误,可以尝试安装certifi包更新根证书。
1.2 诗词数据库爬取实战
我们从《全唐诗》和《宋词三百首》电子版网站抓取原始数据。这个爬虫需要处理反爬机制,以下是关键代码片段:
import requests
from bs4 import BeautifulSoup
def scrape_poems(url):
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
poems = []
for item in soup.select('.poem-item'):
title = item.select_one('.title').text
author = item.select_one('.author').text
content = '\n'.join([p.text for p in item.select('.content p')])
poems.append({'title':title, 'author':author, 'content':content})
return poems
提示:实际应用中应当设置合理的请求间隔(如3-5秒),避免对目标服务器造成过大压力。完整项目建议使用Scrapy框架实现分布式爬取。
1.3 数据清洗与特征提取
原始爬取数据往往包含注释、标点等噪声。我们使用正则表达式进行清洗,并提取关键特征:
import re
def clean_poem(text):
# 去除注释(如:'[1]'这类标注)
text = re.sub(r'\[\d+\]', '', text)
# 标准化标点
text = text.replace(',', ',').replace('。', '.')
# 移除多余空白
return ' '.join(text.split())
清洗后的数据结构化存储为CSV,包含标题、作者、朝代、字数、韵脚等特征字段,为后续的AI训练提供高质量语料。
2. 提示工程:教会AI苏轼的笔触
2.1 古典诗词风格解析
要让GPT-4o模仿苏轼风格,需要分解其创作特征:
- 意象选择:海棠、烛火、明月、江河等自然意象
- 修辞手法:拟人("花睡去")、对比("夜深"vs"高烛")
- 情感表达:含蓄内敛,常借景抒情
- 格律特点:七言为主,平仄相间
2.2 构建多层级Prompt模板
我们设计渐进式提示词,逐步引导AI输出符合要求的诗句:
1. 角色设定:
你是一位宋代文人,擅长以自然意象寄托人生感悟
2. 风格要求:
模仿苏轼《海棠》的创作风格,使用拟人修辞
3. 具体指令:
以"春日庭院"为主题创作七言绝句
4. 输出格式:
标题+四句诗文+创作说明
2.3 调参技巧与效果优化
通过API参数微调可获得更佳效果:
| 参数 | 推荐值 | 作用说明 |
|---|---|---|
| temperature | 0.7-0.9 | 控制创造性,值越高输出越随机 |
| max_tokens | 500 | 限制生成文本长度 |
| frequency_penalty | 0.5 | 降低重复用词概率 |
| presence_penalty | 0.3 | 鼓励使用新意象 |
实测发现,配合示例few-shot learning(提供3-5个苏轼诗作示例)能显著提升风格模仿准确率。
3. 系统集成:一键生成专属诗句
3.1 完整代码实现
将爬虫、数据处理和AI生成模块整合为端到端解决方案:
import openai
def generate_poem(theme, style="苏轼"):
prompt = f"""模仿{style}的诗歌风格创作一首以{theme}为主题的诗:
- 七言绝句格式
- 使用2个以上自然意象
- 结尾含蓄表达情感"""
response = openai.ChatCompletion.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
temperature=0.8,
max_tokens=500
)
return response.choices[0].message.content
3.2 交互式应用开发
用Gradio快速构建可视化界面:
import gradio as gr
demo = gr.Interface(
fn=generate_poem,
inputs=[gr.Textbox(label="主题"), gr.Dropdown(["苏轼","李白","杜甫"], label="风格")],
outputs=gr.Textbox(label="生成诗句"),
title="AI古诗词生成器"
)
demo.launch()
运行后会生成本地Web应用,用户只需输入主题和选择诗人风格,点击按钮即可获得定制诗句。
3.3 输出结果示例
输入主题"秋夜独酌",风格选择"苏轼",得到输出:
《秋夜对月》
金樽空对桂花影,
玉露暗湿青衫冷。
醉问姮娥可寂寞?
清光犹照旧时井。
注:模仿苏轼借酒抒怀的风格,通过"金樽"、"桂花"、"玉露"等意象营造秋夜氛围,末句以井喻心,表达物是人非之感。
4. 进阶探索:AI诗词的边界与可能
4.1 风格混合实验
尝试让AI融合不同诗人风格,如"苏轼的意象+李白的豪放+李清照的婉约",通过调整prompt中的风格权重系数,可以产生有趣的杂交风格。例如:
"以苏轼对自然细节的观察为基础,结合李白夸张的想象,描写泰山日出"
生成结果往往能突破单一风格的局限,展现出新颖的表达方式。
4.2 文化传承的新范式
这种技术应用为传统文化注入新活力:
- 教育领域:学生可以通过修改prompt参数,直观感受不同诗词风格的差异
- 创作辅助:作家获得灵感启发,突破创作瓶颈
- 文化传播:生成符合现代审美的古典风格内容,吸引年轻群体
4.3 伦理思考与技术局限
尽管前景广阔,但需要注意:
- 版权问题:生成的诗词是否构成对原诗人的风格抄袭
- 情感真实:AI缺乏真实人生体验,可能流于形式模仿
- 格律错误:在复杂词牌(如《沁园春》)上仍会出现平仄失误
未来可结合知识图谱技术,让AI真正理解意象背后的文化典故,而不仅是表面词汇的排列组合。
更多推荐

所有评论(0)