惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Simon Willison's Weblog
Simon Willison's Weblog
H
Help Net Security
F
Fortinet All Blogs
H
Heimdal Security Blog
S
Schneier on Security
L
LangChain Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
NISL@THU
NISL@THU
P
Palo Alto Networks Blog
J
Java Code Geeks
博客园 - 【当耐特】
The Last Watchdog
The Last Watchdog
W
WeLiveSecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
I
InfoQ
Recorded Future
Recorded Future
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
腾讯CDC
C
Check Point Blog
量子位
M
MIT News - Artificial intelligence
GbyAI
GbyAI
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
小众软件
小众软件
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
V2EX - 技术
V2EX - 技术
T
Threatpost
Engineering at Meta
Engineering at Meta
Attack and Defense Labs
Attack and Defense Labs
T
Tailwind CSS Blog
S
Securelist
The Cloudflare Blog
博客园 - 叶小钗
L
LINUX DO - 最新话题
T
Troy Hunt's Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
爱范儿
爱范儿

Mobility

从薅 token 到管 skill:我的 pks 工具落地实践 把笔记、微信读书、知乎装进 Obsidian:我基于llm-wiki知识中枢搭建实录 免费AI视频生成器:我如何用零成本做出带旁白字幕的多场景AI视频 Agnes免费模型真能白嫖视频?我改造了ViMax来试试 教你薅token(二):构建agent无关的skills管理工作流 教你薅token:构建agent无关的AI工作流 Vercel封禁163邮箱后,我是怎么恢复博客的 用LLM管理安全开发规范:一次llm-wiki实践 Vaadin框架教程:Java工程师的前端开发秘籍 hexo多语言方案总结及最佳实践 知乎增强工具-评论时间精确到秒 怎么理解数据库的四个隔离级别 kubernetes是什么-实用向教程 怎么更科学的用知乎摸鱼 读书笔记《系统之美》,如何面对现实中的复杂问题 分布式系统设计中的通用方法 高并发解决方案很难吗?轻松聊清楚高并发设计 SSP,DSP,RTB,ADX都是什么? 讲讲互联网广告的概念与发展 从redolog,undolog到隔离级别,刨根问底,讲清楚事务和ACID java项目低学习成本使用kubernetes的实践经验 剧变中的2021-一个中年工程师的年终总结 kubernetes环境下做金丝雀发布的一种思路 prometheus教程: 一篇文章讲懂prometheus 实现一个简单的java版本高性能获取ip地址所属国家工具 iterm2配置ssh书签, 实现记住密码和自动登录 怎样做一个好的技术分享 云原生究竟是什么 读书笔记 稻盛和夫《干法》-思考应该怎样去工作 review的个人价值 户口?大厂?高薪?生活?聊聊应届程序员的职业选择 RPC接口将所有输入输出封装成类是合理设计吗 程序员做业务开发的价值 设计模式的原则,设计模式究竟是什么 我提升开发效率的经验 通过合理的设计降低软件开发复杂度 信息传播过程中的衰减 看房小记-2020北京学区 读书感悟:文明、现代化、价值投资与中国 读书笔记-我曾走在崩溃的边缘 [翻译][关于分布式架构和系统设计]分布式系统的模式-综述 redis的对象 redis里的数据结构 设计模式备忘录 聊聊程序员的职业生涯,我对程序员这个职业的理解 通过mysql批量操作不生效问题聊聊java里mysql的batch 【实践经验】单元测试怎么写 关于rocketmq的readQueue和writeQueue 数据分析的利器-clickhouse介绍 通过位运算转换大小写 activemq多线程消费的不同处理方式 高并发下作余额扣减的一些经验 java细节:三目运算符和自动拆箱 设计一个开源的北京地铁路线规划小工具 java版本 redis cluster的数据迁移 jstorm源码解析之循环任务AsyncLoopThread activemq特性之持久化 activemq的安装及基本使用 activemq系列-概述 hexo教程:博客系统搭建及部署到github jstorm的监控metrics数据输出到第三方存储介质 camel系列之camel debugger的使用 jstorm源码解析之bolt异常处理 log4j动态添加appender 【翻译】java里编写基准测试的一些经验 java线程池:获取运行线程数并控制线程启动速度 maven里的mirror和repository: 配置多repository 使用maven shade plugin 打可执行Jar包 activemq plugin开发指南及示例 通过加入classpath的形式实现命令行运行java程序时引入第三方jar包 解决fatjar的 “java.lang.SecurityException: Invalid signature file digest for Manifest main attributes” 问题 通过实际操作理解redis cluster原理 一种实现在hbase中存储set的思路 log4j2.xml配置示例及与log4j的区别 不实现equals方法的情况下比较java list 使用lua脚本和jedis实现redis的hmsetnx命令,操作hash表时不覆盖原有数据 vitualbox虚拟机安装centos 7 及ssh访问、自启动等配置 在java独立进程(standalone app)中嵌入hawtio监控 java日志系统简介: 从tomcat大量打印debug日志说起 Java kryo/protobuf/protostuff序列化 or Json 性能对比 java分布式锁入门实战 leetcode第三题: 输出不包含重复字母的最长子串 java多线程实现三个字母顺序输出 一次kafka空间激增排查:kafka的数据压缩、批量发送等 java里128有何魔力? 聊聊Integer的缓存 storm/jstorm生态与周边工具,storm连接activemq,kafka,hdfs等 jstorm UI 介绍 五分钟学会写storm代码: jstorm/storm编码原理与普通java程序的区别 activemq web console的权限配置 storm ui 中一些关键属性的含义 activemq 5.6 连接池的内存泄露问题 关于apache camel的消息转发效率 一篇不错的lda模型入门文档 wordcount代码 hadoop基本的学习资料
用 AI Agent 完成 Hexo 主题迁移:从 Next 到 Butterfly 的全自动化实践
流沙 · 2026-05-28 · via Mobility

背景:一个繁琐到让人崩溃的任务

最近想给自己的 Hexo 博客换个主题。用了好几年的 Next 主题,虽然经典,但想换个更现代的风格。

看起来很简单对吧?但实际操作过的朋友都知道,Hexo 主题迁移是一个极其繁琐的过程:

  1. 配置文件长达 1000+ 行,需要逐项对比新旧主题的配置格式
  2. 功能映射复杂:Next 的 leancloud_visitors 对应 Butterfly 的 busuanzi,Next 的 reading_progress 对应 Butterfly 的 preloader
  3. 两个站点要同步:中英文站都要改,而且配置略有不同
  4. Font Awesome 版本兼容:Butterfly 默认配的 FA 7.1.0 根本不存在于 cdnjs
  5. YAML 格式敏感:缩进、换行符都可能导致配置失效

如果手动操作,估计要花一整天,而且很容易出错。

这次我尝试了一个不同的方式:让 AI Agent(Hermes)全程接管这个任务

AI Agent 的工作流程

整个过程,AI Agent 自主完成了以下工作:

  1. 环境分析:检查当前 Hexo 版本(7.0.0)、Node.js 版本(v24.14.0)、两个站点的配置差异
  2. 版本调研:查询 GitHub API,获取最新 Hexo 版本(8.1.2)和 breaking changes
  3. 依赖升级:批量更新 hexo 及所有插件到最新版本
  4. 主题对比:分析 Next 和 Butterfly 的功能覆盖度,生成对比表格
  5. 配置迁移:将 Next 的 1000+ 行配置逐项映射到 Butterfly 格式
  6. 问题排查
    • 发现 FA 7.1.0 在 cdnjs 上 404,降级到 6.7.2
    • 发现知乎图标需要 fab 前缀
    • 发现英文站菜单路径错误
    • 发现 GA、百度统计、站长验证等关键配置丢失
  7. 测试验证:构建测试、本地预览服务器、检查 HTML 输出
  8. 代码提交:自动生成 commit message 并 push

关键技术点

1. Font Awesome 版本兼容性问题

这是最隐蔽的一个 bug。Butterfly 主题的 plugins.yml 配置了 FA 7.1.0:

1
2
3
fontawesome:
name: '@fortawesome/fontawesome-free'
version: 7.1.0

但 cdnjs 上根本没有这个版本!导致所有品牌图标(GitHub、StackOverflow、知乎)都不加载。

AI Agent 通过以下步骤定位问题:

  • 检查生成的 HTML,发现加载的是 FA 7.1.0
  • 请求 cdnjs API,确认 7.1.0 返回 404
  • 测试 FA 6.7.2,确认包含所有需要的图标
  • 在配置中覆盖 CDN 地址

2. YAML 配置迁移的陷阱

Hexo 的配置文件是 YAML 格式,对缩进和换行符非常敏感。AI Agent 在迁移过程中遇到了几个问题:

  • CRLF vs LF:Butterfly 默认配置是 CRLF 换行,用 sed 替换时匹配失败
  • 重复键:patch 工具导致 scroll_percent 出现两次
  • 值丢失:YAML 缩进不对导致配置值没有正确写入

最终用 Python 直接操作文件内容才解决了这些问题。

3. 多站点同步

中英文站的配置大部分相同,但有几处差异:

  • 英文站的 language 需要改为 en
  • 英文站的菜单需要指向中文站
  • 英文站的 Valine placeholder 需要用英文

AI Agent 自动识别这些差异并分别处理。

效果对比

指标 手动操作 AI Agent
耗时 4-8 小时 30 分钟
出错率 高(容易遗漏配置) 低(系统化检查)
问题排查 需要逐个 Google 自动定位根因
代码提交 手动写 commit message 自动生成

AI Agent 的优势

这次实践让我深刻体会到 AI Agent 在这类繁琐、重复性工作中 的巨大优势:

1. 系统化思维

AI Agent 不会像人一样”想到哪改到哪”。它会:

  • 先分析当前状态
  • 制定完整计划
  • 逐步执行并验证
  • 发现问题及时修复

2. 跨领域知识

主题迁移涉及多个技术领域:

  • Hexo 配置
  • Font Awesome 版本管理
  • YAML 格式处理
  • Git 工作流
  • 前端资源加载

AI Agent 能够在这些领域之间自由切换,而人类开发者通常只精通其中一两个。

3. 持久注意力

人类在处理 1000+ 行配置文件时,注意力会逐渐下降,容易遗漏。AI Agent 不会疲劳,每个配置项都会被检查到。

4. 自动化验证

AI Agent 不仅会修改配置,还会:

  • 运行构建测试
  • 启动本地服务器验证
  • 检查 HTML 输出
  • 确认关键配置生效

适用场景

基于这次经验,我认为 AI Agent 特别适合以下类型的工作

  1. 配置迁移:不同系统之间的配置格式转换
  2. 依赖升级:批量更新多个包并处理兼容性问题
  3. 代码重构:大规模的代码格式调整
  4. 文档整理:从多个来源整合信息
  5. 环境搭建:新项目的初始化配置

局限性

当然,AI Agent 也有局限:

  1. 创意性工作:UI 设计、文案撰写等仍需人类主导
  2. 业务决策:是否升级、选择哪个主题等决策需要人类判断
  3. 复杂调试:某些运行时问题需要人工介入

总结

这次用 AI Agent 完成 Hexo 主题迁移的实践,让我看到了 LLM(大语言模型)在软件工程领域的巨大潜力

AI Agent 不是来取代开发者的,而是来增强我们的能力。它把我们从繁琐、重复的工作中解放出来,让我们能够专注于更有价值的事情。

如果你也有类似的”体力活”,不妨试试让 AI Agent 来帮忙。你会发现,AI 辅助开发 不是未来,而是现在。

相关技术栈

  • AI Agent:Hermes Agent
  • LLM:DeepSeek V4 Pro / MiMo v2.5
  • 静态站点生成器:Hexo 8.1.2
  • 主题:Butterfly 5.5.4
  • 图标库:Font Awesome 6.7.2
  • 评论系统:Valine (LeanCloud)
  • 统计分析:Google Analytics / 百度统计

本文由 AI Agent 辅助撰写,记录了一次真实的主题迁移实践。

原文地址:https://lichuanyang.top/posts/48979/

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Mobility

订阅公众号

  • 微信

    微信