这个blog之前是用WordPress搭在linode上的,其实一直都有想迁移到Github Pages上的想法,但是因为文章的迁移比较麻烦,需要把使用到的文档格式、图片、链接、Latex公式之类的东西都转换一遍,一直动力不足。

最近有了一个新的想法,用AI来搞这个苦差事!我完全没有自己去了解相关的技术和工具,所有的事情都是和Cursor(模型是claude-4.5-sonnet)一轮一轮沟通需求来完成的,断断续续总共大概花了几个小时的时间,不得不说,效果令人印象深刻,几点比较深的感触:

  • 描述需求不需要有负担,不用太具体也完全可以,模型会自己通过现有的内容去理解
  • 模型现在的指令跟随已经非常准确了,在繁琐的文本编辑任务上已经完全可用
  • Cursor已经可以编码运行并检查执行效果,然后自己修改代码重试了,几轮下来可以自行解决大部分的文本操作任务
  • gpt-5在Cursor里的效果确实不如claude-4.5?
  • 效果不好的时候也还是要碰碰运气,也许多重试几次就能大力出奇迹(数据的checkpoint能力非常重要)

最离谱的是,文章后面的内容,也是我让模型通过总结这个过程来生成的。

为什么要迁移

在开始之前,先说说为什么要从 WordPress 迁移到 GitHub Pages:

  1. 静态网站的优势:更快的加载速度、更低的维护成本、不用担心数据库和 PHP 的安全问题
  2. 版本控制:所有文章都是 Markdown 文件,可以用 Git 管理,便于追踪变更历史
  3. 写作体验:Markdown 比 WordPress 的编辑器更适合技术文章的写作
  4. 免费托管:GitHub Pages 完全免费,而且稳定可靠
  5. 更好的代码高亮:Jekyll 对代码块的支持比 WordPress 更好

但是,迁移这样一个有 63 篇文章、193 张图片、跨度 13 年的技术博客,是一个不小的工程。正好可以试试 AI 编程助手能帮上多大忙。

准备工作

导出 WordPress 数据

首先从 WordPress 后台导出了所有内容,得到一个 XML 文件:kongfy039sblog.wordpress.2025-10-01.xml

技术栈选择

和 Claude 讨论后,确定了以下技术栈:

  • 静态站点生成器:Jekyll 4.3(GitHub Pages 原生支持)
  • 主题:Minimal Mistakes(功能强大、文档完善)
  • 评论系统:Disqus(兼容原有评论)
  • 数学公式:MathJax 3
  • 代码高亮:Rouge

环境准备

Claude 帮我确认了需要的环境:

  • Ruby 2.7+ 和 Bundler
  • Node.js(用于运行转换工具)
  • wordpress-export-to-markdown 转换工具

第一阶段:内容转换

WordPress XML 转 Markdown

使用 wordpress-export-to-markdown 工具将 WordPress XML 转换为 Jekyll 可用的 Markdown 文件:

npx wordpress-export-to-markdown \
  --input=backup/kongfy039sblog.wordpress.2025-10-01.xml \
  --output=_posts \
  --post-folders=false \
  --save-attached-images=true \
  --save-scraped-images=true

这个过程 Claude 全程指导,包括:

  • 确认转换参数的选择
  • 处理转换过程中的编码问题
  • 验证转换结果的完整性

结果:成功转换了 63 篇文章,生成 193 张图片文件。

初始结构设置

Claude 帮我创建了标准的 Jekyll 目录结构:

blog/
├── _config.yml          # Jekyll 配置
├── _posts/              # 63 篇文章
├── _layouts/            # 布局模板
├── _includes/           # 可复用组件
├── assets/
│   ├── images/          # 193 张图片
│   └── css/             # 样式文件
├── Gemfile              # Ruby 依赖
└── index.html           # 首页

第二阶段:链接和图片修复

这是整个迁移过程中最繁琐的部分,也是 AI 最能发挥作用的地方。

内部链接修复

WordPress 的文章内部引用使用的是完整 URL,需要转换为 Jekyll 的相对路径。

问题示例

[这篇文章](https://kongfy.wordpress.com/2014/11/10/machine-learning/)

目标格式

[这篇文章](/2014/11/machine-learning小结1/)

我只需要告诉 Claude:”需要把所有内部博客链接转换为相对路径”,它就:

  1. 自动搜索所有包含 WordPress URL 的文件
  2. 分析 Jekyll 的 permalink 格式
  3. 批量修复了 48 个文件中的所有内部链接
  4. 保留了所有外部链接不变

图片路径修复

WordPress 的图片路径也需要更新:

原格式

![](/path/to/wordpress/images/pic.jpg)

目标格式

![](/assets/images/pic.jpg)

Claude 自动处理了:

  • 识别所有图片引用
  • 更新到 Jekyll assets 目录
  • 保持图片文件名不变
  • 修复了 45 个文件的图片路径

验证完整性

完成后,Claude 还帮我写了验证脚本,确保:

  • 所有文章的 front matter 格式正确
  • 没有残留的旧链接
  • 所有图片文件都存在
  • Markdown 语法没有错误

第三阶段:数学公式迁移

我的博客有很多机器学习和分布式系统的文章,包含大量数学公式。这是最有挑战性的部分。

WordPress LaTeX 格式转换

WordPress 使用特殊的 LaTeX 语法:

  • [latex]formula[/latex] - 块级公式
  • $latex formula$ - 行内公式

需要转换为标准 MathJax 格式:

  • 行内公式:$formula$
  • 块级公式:$$formula$$

Claude 的处理策略

  1. 智能识别:扫描所有文章,识别出 24 篇包含数学公式的文章
  2. 格式转换:自动转换所有 LaTeX 标记
  3. 添加标识:在文章 front matter 中添加 mathjax: true
  4. 配置 MathJax:创建 _includes/head/custom.html 配置文件

转换示例

# 修复前
[latex]\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}[/latex]

# 修复后
$$\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}$$

数学公式显示问题

迁移后发现一个新问题:某些公式应该居中显示但没有居中。

问题分析

  • 使用 $\displaystyle ...$ 的公式是展示样式,但不会居中
  • 改用 $$...$$ 后出现转义字符处理问题

最终解决方案: 使用 \[...\] 格式(标准 LaTeX 块级公式语法):

  • ✅ 公式独占一行
  • ✅ 公式居中显示
  • ✅ 转义字符处理稳定
  • ✅ 在首页摘要中也能正确渲染

Claude 自动修复了 5 篇文章中的 19 个块级公式。

修复示例

# 修复前(不居中)
$\displaystyle \max_{v\in C_1}f(v) < \max_{v\in C_2}f(v)$

# 修复后(居中)
\[\max_{v\in C_1}f(v) < \max_{v\in C_2}f(v)\]

第四阶段:代码高亮配置

选择高亮方案

Jekyll 默认使用 Rouge 进行语法高亮。我想要类似 Sublime Text 的 Monokai 主题。

Claude 给出了几种方案:

  1. 使用 Minimal Mistakes 主题自带的皮肤
  2. 生成自定义 Rouge CSS
  3. 完全手写样式

我选择了方案 2,Claude 帮我:

# 生成 Monokai Sublime 主题
rougify style monokai.sublime > assets/css/syntax.css

然后创建快速切换主题的脚本:

#!/bin/bash
# switch-highlight-theme.sh
THEME=$1
if [ -z "$THEME" ]; then
  echo "Usage: ./switch-highlight-theme.sh [theme-name]"
  echo "Available: github, monokai, monokai.sublime, gruvbox, etc."
  exit 1
fi

rougify style "$THEME" > assets/css/syntax.css
echo "✅ Switched to $THEME theme"

这样以后想换主题只需要:

./switch-highlight-theme.sh github

第五阶段:评论系统集成

Disqus 配置

原博客使用 Disqus 评论系统,需要保留原有评论。

Claude 帮我:

  1. _config.yml 中配置 Disqus shortname
  2. 确保 Minimal Mistakes 主题的评论功能启用
  3. 生成 URL 映射文件用于评论迁移

Disqus URL 映射

由于 URL 结构变化,需要告诉 Disqus 新旧 URL 的对应关系:

https://kongfy.wordpress.com/2014/11/10/machine-learning/, https://blog.kongfy.com/2014/11/machine-learning小结1/
https://kongfy.wordpress.com/2015/03/16/kosaraju/, https://blog.kongfy.com/2015/03/有向图强连通分支/
...

Claude 自动生成了包含所有 63 篇文章的映射文件。

第六阶段:主题和布局优化

选择主题皮肤

Minimal Mistakes 提供了多种皮肤,我选择了 contrast(高对比度):

minimal_mistakes_skin: "contrast"

配置导航和页面

Claude 帮我创建了:

  • 关于页面(_pages/about.md
  • 分类归档页(_pages/categories.md
  • 标签归档页(_pages/tags.md
  • 年份归档页(_pages/year-archive.md

配置导航菜单:

# _data/navigation.yml
main:
  - title: "文章"
    url: /year-archive/
  - title: "分类"
    url: /categories/
  - title: "标签"
    url: /tags/
  - title: "关于"
    url: /about/

首页布局优化

默认的首页显示全文,我想改成显示摘要。Claude 建议:

  1. 在文章中添加 <!--more--> 标记
  2. 使用自定义首页布局

我选择了方案 2,Claude 创建了 _layouts/home.html

---
layout: archive
---

{{ content }}

<h3 class="archive__subtitle">{{ site.data.ui-text[site.locale].recent_posts | default: "Recent Posts" }}</h3>

{% if paginator %}
  {% assign posts = paginator.posts %}
{% else %}
  {% assign posts = site.posts %}
{% endif %}

{% assign entries_layout = page.entries_layout | default: 'list' %}
<div class="entries-{{ entries_layout }}">
  {% for post in posts %}
    {% include archive-single.html type=entries_layout %}
  {% endfor %}
</div>

{% include paginator.html %}

第七阶段:部署到 GitHub Pages

仓库配置

Claude 指导我配置 GitHub Pages:

  1. 创建仓库 kongfy/blog
  2. 配置自定义域名 blog.kongfy.com
  3. 创建 CNAME 文件
  4. 配置 DNS 记录

自动部署

GitHub Pages 支持 Jekyll 自动构建,但有插件限制。Claude 帮我:

  1. 确认所有使用的插件都在 GitHub Pages 白名单中
  2. 配置 _config.yml 的生产环境设置
  3. 创建部署文档 GITHUB_DEPLOY.md

最终配置

# _config.yml
url: "https://blog.kongfy.com"
repository: "kongfy/blog"
baseurl: ""

# 生产环境配置
environment: production

# GitHub Pages 插件
plugins:
  - jekyll-feed
  - jekyll-seo-tag
  - jekyll-sitemap
  - jekyll-paginate
  - jekyll-include-cache

本地测试

部署前,Claude 提醒我进行完整的本地测试:

# 清理缓存
bundle exec jekyll clean

# 构建生产版本
JEKYLL_ENV=production bundle exec jekyll build

# 本地预览
bundle exec jekyll serve

检查清单:

  • ✅ 所有文章显示正常
  • ✅ 数学公式渲染正确
  • ✅ 代码高亮主题正确
  • ✅ 图片都能加载
  • ✅ 内部链接都有效
  • ✅ 导航菜单正常工作
  • ✅ 分页功能正常

数据统计

经过大约 2 天的工作,完成了整个迁移过程:

内容统计

  • 文章总数:63 篇
  • 图片数量:193 张
  • 跨度时间:2012-2020(13 年)
  • 涉及分类:C/C++、Python、Linux、机器学习、分布式系统、算法等

修复统计

  • 修复内部链接:48 个文件
  • 修复图片路径:45 个文件
  • 转换数学公式:24 个文件
  • 修复块级公式:5 个文件,19 处
  • 添加代码语言标识:若干处(未精确统计)

配置统计

  • 创建配置文件:7 个
  • 创建页面:4 个(About、Categories、Tags、Archive)
  • 创建布局文件:2 个
  • 创建脚本:1 个(主题切换脚本)
  • 生成文档:7 个

AI Agent 的能力展现

通过这次完整的博客迁移项目,我对 AI 编程助手的能力有了更深刻的认识。

Claude 擅长的任务

1. 批量重复性工作

最出色的能力。修复 48 个文件的内部链接、45 个文件的图片路径、24 个文件的数学公式,这些工作如果手动做需要几天时间,而且容易出错。Claude 几分钟就能完成,准确率接近 100%。

2. 技术选型和架构设计

能够基于需求给出合理的技术栈建议:

  • Jekyll vs Hugo vs Hexo 的对比
  • Minimal Mistakes vs 其他主题的选择
  • 评论系统、数学公式渲染方案的权衡

建议都很中肯,考虑了易用性、生态、长期维护等因素。

3. 问题诊断和调试

遇到问题时,Claude 能够:

  • 快速定位问题根源
  • 给出多个解决方案
  • 分析每个方案的优劣
  • 提供具体的实现步骤

比如数学公式显示问题,Claude 从 Markdown 渲染、MathJax 配置、Jekyll 处理流程等多个角度分析,最终找到最佳方案。

4. 文档生成

基于实际操作过程,自动生成结构化、详细的文档。这些文档不是简单的操作记录,而是包含:

  • 问题背景和分析
  • 解决方案和原理
  • 示例代码和配置
  • 注意事项和最佳实践

质量很高,可以直接作为项目文档使用。

5. 代码理解和修改

能够理解:

  • Jekyll 的目录结构和配置规则
  • Liquid 模板语法
  • Minimal Mistakes 主题的架构
  • Kramdown Markdown 的特殊语法
  • MathJax 配置选项

在此基础上进行精确的代码修改。

6. 全局把控

整个迁移过程涉及多个阶段,每个阶段都有依赖关系。Claude 能够:

  • 规划合理的执行顺序
  • 在适当的时候提醒后续任务
  • 记住之前的决策和配置
  • 保持整体一致性

总结

这次使用 Cursor 和 Claude 4.5 进行博客迁移的经历非常愉快。整个过程中,我感觉像是在和一个经验丰富的同事结对编程:

  • 需要我做决策时,它会给出建议和分析
  • 需要执行任务时,它高效且准确
  • 遇到问题时,它能够快速诊断并给出方案
  • 完成后,它会自动整理文档

最终结果:

  • ✅ 63 篇文章完整迁移
  • ✅ 193 张图片全部保留
  • ✅ 所有内部链接正常工作
  • ✅ 数学公式完美渲染
  • ✅ 代码高亮美观
  • ✅ 评论系统正常运行
  • ✅ 完整的文档体系

原本预计需要一周的工作,在 AI 的帮助下两天就完成了,而且质量更高。

AI Agent 正在改变软件开发的方式。它不会取代程序员,但会让程序员变得更强大。关键在于学会如何与 AI 协作,将它作为强大的工具,而不是完全依赖或完全排斥。

对于那些还没有尝试 AI 编程助手的开发者,我强烈建议试一试。你会发现,编程可以更高效、更有趣。

对于已经在使用的开发者,继续探索人机协作的最佳模式。我相信我们正处在一个激动人心的时代,AI 和人类的协作将创造出更多可能性。


博客地址https://blog.kongfy.com

项目仓库https://github.com/kongfy/blog

工具推荐

欢迎交流和反馈!如果你也在考虑博客迁移,或者想了解更多 AI 编程助手的使用经验,欢迎留言讨论。

Comments