从苏轼的《海棠》到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 文化传承的新范式

这种技术应用为传统文化注入新活力:

  1. 教育领域:学生可以通过修改prompt参数,直观感受不同诗词风格的差异
  2. 创作辅助:作家获得灵感启发,突破创作瓶颈
  3. 文化传播:生成符合现代审美的古典风格内容,吸引年轻群体

4.3 伦理思考与技术局限

尽管前景广阔,但需要注意:

  • 版权问题:生成的诗词是否构成对原诗人的风格抄袭
  • 情感真实:AI缺乏真实人生体验,可能流于形式模仿
  • 格律错误:在复杂词牌(如《沁园春》)上仍会出现平仄失误

未来可结合知识图谱技术,让AI真正理解意象背后的文化典故,而不仅是表面词汇的排列组合。

更多推荐