跳转至

第 07 步:使用 Skill

这一节学什么

  • 不自己写 skill 时,怎样先消费一个现成 skill
  • SkillNode 在主路径里扮演什么角色
  • prompt skill 的结果怎样回到 final_answer,以及可选地回到 messages
  • 一个 prompt skill 的 SKILL.md 应该怎么写

你会运行什么

示例代码:

  • examples/getting_started/step_07_use_skill.py

这个步骤会直接消费一个已经写好的本地 prompt skill:

  • examples/getting_started/skills/prompt_briefing/

运行:

python examples/getting_started/step_07_use_skill.py

核心概念

这一节先建立一个使用心智:

  • Tool 更像单个动作
  • Skill 更像一整包能力或工作流
  • SkillNode 负责把 SKILL.md 背后的能力接到 Agent 运行树里

这个例子里,你先观察三件事:

  1. 只给 SkillNode 一个 SKILL.md
  2. SkillNode 自己完成 skill 加载、skill set 解析和执行托管
  3. 结果最后回到 Agent 的共享 state

运行后观察什么

  • messages
  • 如果 skill 开了 push_to_chat: true,结果会追加成一条 assistant message
  • final_answer
  • 这是 prompt skill 运行后的正常对外结果

这里要特别注意:

  • prompt skill 的结果会回写到顶层 final_answer
  • 如果你希望聊天层也能看到,就打开 push_to_chat: true
  • prompt skill 不会自动生成结构化 skill_result
  • BT skill 使用独立的正式 skill_result:BT/react 暴露为 run_bt_skill,单个 BT/direct 则不创建外层 ReAct

所以本节示例会同时打印:

  • Top-level final_answer
  • Latest assistant message
  • Top-level final_answer

你会看到:

  • 顶层 final_answer 会包含 prompt skill 的回答
  • 如果开启了 push_to_chat,同一结果也会出现在 messages
  • 普通 prompt skill 不会额外创建结构化结果归档

你可以把这一节理解成:

  • 先学“怎么用 skill”
  • 再拆开看“这个 prompt skill 是怎么写出来的”

一个 prompt skill 长什么样

这个示例使用的 skill 文件是:

  • examples/getting_started/skills/prompt_briefing/SKILL.md

它的内容大致长这样:

---
name: concise-brief
description: Turn the latest user request into a short implementation-oriented brief.
execution: prompt
push_to_chat: true
---

You are the `concise-brief` skill.

Read the latest user request and produce a compact brief with exactly three sections:

1. Goal
2. Recommended Path
3. Caveats

Requirements:

- Keep the whole answer under 120 words.
- Be concrete and implementation-focused.
- If the request mentions Jianmu concepts, keep the terminology precise.

可以先把 SKILL.md 拆成两层:

  1. frontmatter
  2. name 是 skill 的稳定标识
  3. description 会影响路由、摘要和 prompt 暴露
  4. execution: prompt 表示这是 prompt skill,不需要 tree.py
  5. prompt skill 的正常对外结果仍然是 final_answer
  6. push_to_chat 决定 skill 输出是否也追加回聊天消息
  7. Markdown 正文
  8. 这是模型真正要遵循的 skill 指令
  9. 适合写角色、流程、输出格式和约束

从运行时视角看,SkillNode 会先把选中的文件解析成 SkillSet。这个集合又会被概念上分成:

  • prompt_skills
  • bt_skills

本节只演示 prompt skill 这一侧,BT skill 放到 Step 10。

怎么改成自己的 prompt skill

最小做法不是写 Python 去生成 Markdown,而是直接复制一个目录:

my_skill/
└── SKILL.md

然后修改:

  • name
  • description
  • 正文 prompt

最后像本节示例一样,把 SKILL.md 传给 SkillNode:

SkillNode(
    name="MySkill",
    skill_files=[Path("my_skill/SKILL.md")],
    model_client=model_client,
)

如果你的 skill 只是稳定 prompt、输出格式或工作方法,通常用 prompt skill 就够了。 如果你开始需要显式节点控制流、多步骤状态读写或确定性本地逻辑,再到后面的 BT skill 章节。

下一步