更新博客不必每次从空白编辑框开始。一份资料、几段代码或一个没想明白的问题,都可以先交给 agent 整理。网页后台留给校对、配图和最后的发布判断。
这条工作流有四步:原始资料 → agent 核实整理 → Markdown 草稿 → 网页校对发布。文章留在项目里,Astro 从文件生成静态页面。
把资料和写作要求一起交给 agent
资料可以直接在对话里提供,也可以放进 materials/inbox/。给出参考链接、摘录或文件,再说明希望整理成文章还是随记、面向谁讲清什么问题;不必先写成完整稿。
整理时先区分来源中的事实、作者原话与推断,能核实的技术细节查官方资料,并在成稿中标明来源。参考作者的经历不能改写成站点作者的亲历;没有发生过的客户案例、过程和成果也不能补出来。
输出默认保留 draft: true。资料不完整或说法尚未核实,就留在草稿并注明待确认的问题,不用流畅的句子掩盖空缺。用户明确要求发布、且内容核实完成时,可以设为 draft: false。
整理成文件,再去网页校对
agent 将稿件写到 src/content/blog/zh/ 或 src/content/blog/en/。运行 npm run dev 后,可在 http://127.0.0.1:4321/admin/ 打开它,修改措辞、调整段落、上传图片并预览。上传文件写进 public/uploads/。
Decap 的本地代理文档区分了文件模式和 Git 模式。这里选择文件模式,是为了让一次保存只改变内容文件,不顺带提交项目里其他尚未完成的修改。
代理只监听本机地址,直接写文件,不自动提交 Git,也不要求先建 .git。对话中的整理与网页里的编辑最终使用同一份 Markdown。
草稿是一项明确的数据
无论由 agent 整理,还是直接在后台新建,未完成的稿件都可以先保存。文件里对应的是这样一段数据:
title: 一条还在整理的想法
description: 先说明它讨论的具体问题。
publishDate: 2026-11-11
type: note
tags: [astro, 内容管理]
featured: false
draft: true
准备公开时关闭草稿,再保存。文章和随记使用相同字段,区别只在类型与内容长度,不必为短内容复制一套发布程序。封面与修订日期可以不填;没有封面的文章仍有完整入口。
publishDate 目前用于日期展示和排序。把它写成未来日期,不会自动获得定时发布能力;尚不该公开的内容仍应保持 draft: true。
内容查询也要遵守草稿状态
只在列表上隐藏草稿,会留下能直接访问的详情地址。当前实现同时在公开内容查询和详情静态路径生成时过滤草稿;订阅与语言替代链接也需要使用已发布内容。
const posts = await getCollection('blog', ({ data }) => !data.draft);
这是项目自己规定的发布规则,不能仅靠字段名推断。Astro 内容集合负责读取与校验数据,哪些内容生成网页仍由查询和路由决定。
校对完成,才进入公开输出
校对时除了文字,还要核对代码是否符合当前项目、引用是否支持结论、图片描述是否准确。本地开发页面会反映文件变动;已经导出的静态网站不会自己变。发布前运行 npm run check 和 npm run build,再检查正文、图片、语言入口和订阅链接。
产物位于 dist/。将来配置托管后,新的构建还需要部署出去。目前没有连接仓库或认证服务,生产后台会显示未配置;本地资料整理、写作与校对可以照常进行。
中英文也不必同时完成。同一个 slug 可以关联译文,只写一种语言时则保留单语内容。写作节奏由内容决定,目录结构负责把已经写好的部分组织起来。
最后,草稿状态只控制网页输出。项目文件、历史提交和独立上传的图片是另外的边界;不适合公开的资料,不应直接上传到公开资源目录。
