Post banner image

给 Firefly 主题加上 AI 总结功能

1323 字
7 分钟
给 Firefly 主题加上 AI 总结功能

AI 摘要

EmberAI

总结由AI生成,仅供阅览

功能介绍#

为 Firefly 主题添加了 AI 文章总结功能。该功能会在构建前自动扫描所有文章,对缺少 AI 总结的文章调用 AI 接口生成总结,并将总结结果写入文章的 Front-matter 中,最终在文章详情页展示一个美观的 AI 总结框。

功能特性#

特性说明
自动化生成构建前自动扫描并生成缺失的 AI 总结
幂等性多次运行不会重复生成已有的总结
并发控制支持配置并发请求数,避免 API 限流
多服务商兼容支持 OpenAI 及兼容接口(DeepSeek、Ollama、智谱等)
环境变量优先优先读取系统环境变量,适配 CI/CD 部署
容错处理未配置 API Key 不会影响正常构建

修改的文件清单#

本次改动涉及以下文件:

文件路径类型说明
scripts/generate-ai-summary.js新增AI 总结生成脚本(核心功能)
src/components/features/AiSummary.astro新增AI 总结展示组件
src/content.config.ts修改Content Collections Schema 中添加 ai 字段
src/pages/posts/[...slug].astro修改文章详情页引入 AI 总结组件
package.json修改添加 ai-summary 脚本和构建命令
.env.example新增环境变量示例文件

详细说明#

1. scripts/generate-ai-summary.js(新增)#

AI 总结生成的核心脚本,主要功能:

  • 扫描 src/content/posts/ 下的所有 .md / .mdx 文件
  • 检查每个文件的 Front-matter 是否已有 ai 字段
  • 对缺少总结的文章,提取正文纯文本并调用 AI API 生成总结
  • 将生成的总结写入原文件的 Front-matter 的 ai 字段
  • 支持 --force(强制重新生成)和 --dry-run(预览模式)参数

2. src/components/features/AiSummary.astro(新增)#

AI 总结的 UI 展示组件,特点:

  • 展示在文章封面图之后、正文之前
  • 带有 AI 图标和”AI 总结”标题
  • 使用主题色的左边框和背景色,视觉区分明确
  • 支持深色/浅色主题自适应
  • 仅当 Front-matter 中有 ai 字段时才渲染

3. src/content.config.ts(修改)#

在 posts 集合的 Schema 中添加了 ai 字段:

ai: z.string().optional().default(""),

4. src/pages/posts/[...slug].astro(修改)#

在文章详情页中引入 AiSummary 组件并添加条件渲染:

import AiSummary from "@/components/features/AiSummary.astro";
// 在文章内容区域添加
{
entry.data.ai && (
<AiSummary summary={entry.data.ai} />
)
}

5. package.json(修改)#

添加了以下脚本:

{
"scripts": {
"ai-summary": "node scripts/generate-ai-summary.js",
"build": "node scripts/generate-ai-summary.js && node scripts/generate-icons.js && ..."
}
}

构建命令会在执行其他步骤之前先运行 AI 总结脚本。

6. .env.example(新增)#

提供了环境变量的配置模板和说明文档。


用户接入指南#

前提条件#

  • Node.js >= 22
  • pnpm 包管理器
  • 一个支持 OpenAI 兼容接口的 AI 服务(OpenAI、DeepSeek、Ollama 等)

步骤一:配置 API Key#

有两种方式配置 API Key,二选一

方式一:本地开发使用 .env 文件#

在项目根目录创建 .env 文件:

OPENAI_API_KEY=your-api-key-here
OPENAI_BASE_URL=https://api.openai.com/v1

方式二:CI/CD 部署使用环境变量(推荐)#

在 GitHub Actions、Cloudflare Pages、Vercel 等部署平台中设置环境变量:

环境变量名是否必填说明
OPENAI_API_KEY必填AI API 的 Key
OPENAI_BASE_URL可选API 地址(默认 https://api.openai.com/v1
AI_MODEL可选模型名称(默认 gpt-4o-mini
AI_MAX_CONTENT_LENGTH可选截取正文的最大字符数(默认 4000
AI_SUMMARY_MAX_TOKENS可选生成总结的最大 token 数(默认 300
AI_CONCURRENCY可选并发请求数(默认 3

优先级:系统环境变量 > .env 文件。在 CI/CD 平台设置的环境变量会自动覆盖 .env 中的同名变量。

步骤二:运行脚本#

手动运行#

Terminal window
pnpm ai-summary

构建时自动运行#

Terminal window
pnpm build

构建命令已包含 AI 总结脚本,会自动在构建前生成缺失的总结。

步骤三:验证效果#

运行完成后,检查文章的 Front-matter 中是否已自动添加 ai 字段:

---
title: 我的文章
ai: 这篇文章主要讨论了...
---

启动开发服务器查看效果:

Terminal window
pnpm dev

常用操作#

预览模式(不实际调用 AI)#

Terminal window
pnpm ai-summary -- --dry-run

强制重新生成所有总结#

Terminal window
pnpm ai-summary -- --force

重新生成单篇文章的总结#

手动删除该文章 Front-matter 中的 ai 字段,然后运行:

Terminal window
pnpm ai-summary

不配置 API Key 会怎样?#

未配置 API Key 时,脚本会输出提示信息并跳过 AI 总结生成,但不会阻止构建。你的博客仍然可以正常构建和部署,只是不会有 AI 总结。


兼容的 AI 服务商#

只要支持 OpenAI 兼容接口的服务都可以使用:

服务商OPENAI_BASE_URL 示例
OpenAIhttps://api.openai.com/v1
DeepSeekhttps://api.deepseek.com/v1
智谱 AIhttps://open.bigmodel.cn/api/paas/v4
Ollama(本地)http://localhost:11434/v1
其他兼容服务对应的 API 地址

Front-matter 示例#

处理前#

---
title: 我的博客文章
published: 2026-07-01
description: 这是一篇示例文章
tags:
- 示例
---

处理后#

---
title: 我的博客文章
published: 2026-07-01
description: 这是一篇示例文章
tags:
- 示例
ai: 这篇文章是一篇示例文章,演示了 Firefly 主题的基本功能...
---

注意事项#

  1. API Key 安全:不要将 API Key 硬编码到代码中,务必使用 .env 文件或平台环境变量
  2. .env 已在 .gitignore:本地的 .env 文件不会被提交到 Git 仓库
  3. 总结长度:默认生成的总结不超过 100 字(约 300 tokens),保持简洁
  4. 幂等性:已有的 ai 字段不会被覆盖,只有缺失时才会生成
  5. 错误容忍:单篇文章的 AI 调用失败不会影响其他文章的处理和整体构建

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

给 Firefly 主题加上 AI 总结功能
https://blog.tuuki.top/posts/firefly-ai-post-summary/
作者
Ember
发布于
2026-07-01
许可协议
CC BY-NC-SA 4.0

文章目录