Skip to main content

BlogLoom Skill 设计思路与功能实现

面向对象:参与 BlogLoom 工程化设计、需要了解或扩展 AI Skill 能力的开发者。 对应实现目录:blog-backend/src/main/resources/skill/blogloom-skill/,下载入口 GET /admin/skill/download。

一、背景

1.1 要解决的问题

BlogLoom 是「本地 Markdown 博客 → 平台」的内容闭环,但用户在迁移/维护时有大量重复动作:
  • 本地已积累大量 Markdown,需要批量导入并自动归入知识库目录;
  • 每篇文章要补全标题、标签、分类、摘要、专栏、封面、创建/更新时间等属性;
  • 线上文章需要保持与本地同步,改标题/改可见性/置顶/换专栏等操作零散且繁琐。
传统做法是「用户手动在后台逐篇粘贴 + 逐个填属性」,效率低且易错。

1.2 为什么用 Skill

把「导入/编辑/查询」沉淀为可被 AI Agent 直接调用的技能包:用户只需一句自然语言(如”把这个目录的博客同步上去”),Agent 自动阅读 Skill、选择 SOP、执行工具完成操作。

1.3 设计目标


二、核心设计思路

2.1 三层分离

Skill 内部严格分三层,职责单一、互不污染:

2.2 双层工具模型

工具层再分两层,对应「REST 原子工具 → 业务编排工具」的递进封装: 判定口诀:只调 1 个接口、无业务判断 → 原子层;≥2 个接口或含参数推导/结果聚合/重试 → 编排层。

2.3 统一 CLI 契约

所有工具(含原子层暴露的只读工具)共用同一调用形式:
  • --tool:选择具体工具;
  • --params:承载全部业务参数(合法 JSON 对象);
  • --pretty:仅控制输出缩进;
  • 统一输出:{"ok": true|false, "tool": "...", "data": {...}, "error": null|"..."}。

2.4 参数与鉴权

  • 缺参时一次性列出所有缺失项,减少 Agent 无效轮次;
  • 参数路径用 .get() 逐级取,接口少字段时走缺参分支而非 KeyError。

2.5 核心决策:复用平台接口,不重复造轮子

因此 Skill 不自行实现目录创建或节点搬移,行为与页面完全一致,维护成本最低。

2.6 封面图识别规则(重点)

封面图不取正文第一张图,而是要求显式标记:只有 alt 为 coverImg 的图片才作为封面。
后端由 KnowledgeCoverExtractor.extract(content) 统一实现,KnowledgeImportWorker 调用;Skill 侧 pick_first_picture 保持同一规则。

三、Skill 标准及扩展规范

3.1 目录结构(强制)

3.2 标准扩展顺序

新增一项产品能力时,按以下顺序落地:
  1. 在 rest_tools.py 登记一一映射的只读 REST 工具;
  2. 在 blogloom-skill.py 的 build_tool_registry 封装业务工具及多接口编排;
  3. 新增/更新 SOP,并挂载到 SKILL.md 场景路由表;
  4. 补充工具清单、参数映射、编排及错误边界测试;
  5. 运行单测与 Skill 结构校验。

3.3 打包与注入规范


四、Skill 功能情况

4.1 工具清单

REST 原子工具(rest_tools.py) 业务编排工具(blogloom-skill.py)

4.2 能力覆盖矩阵

4.3 错误约定


五、如何使用 Skill

5.1 获取与准备

  1. 后台进入「文章管理」,点击右上角 「Skill 下载」(或直接请求 GET /admin/skill/download),得到 blogloom-skill.zip;
  2. 解压后进入目录,安装依赖并载入环境变量:
  1. 把整个 blogloom-skill/ 目录交给支持 Skill 的 AI Agent(Agent 会自动读 SKILL.md 并按需读取 references/ SOP)。
Token 过期时,重新下载 Skill 即可刷新。

5.2 手工命令行验证

5.3 Markdown 文章格式约定

每篇文章就是一个普通的 .md 文件,格式分两部分:文件最顶部一个 ```json 元数据代码块(声明文章属性),其后是正常 Markdown 正文。封面图不是元数据字段,而是在正文里用 ![coverImg](图片URL) 显式标记。
格式规则:

5.4 快捷提示语示范

直接对 Agent 说一句自然语言即可,Agent 会自动命中对应 SOP:

六、相关实现索引


下一步