Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.7 KiB
Agent 科普:Skill、Prompt 与 Loop
读懂 TSL Playbook 前的 5 分钟预备知识
很多人已经会用 AI 对话:输入一个问题,等待模型回答。但 Agent(智能代理)不只是“更会聊天的模型”。它能够读取资料、调用工具、观察结果,并根据任务进度继续行动。
要理解这种工作方式,先认识三个概念:
- Skill:Agent 处理某类任务时会打开的“说明书”。
- Prompt:某一次模型调用收到的任务、规则和上下文。
- Loop:让 Agent 根据真实反馈持续行动的控制机制。
第一部分:Skill —— 给 Agent 一套专业工作方法
什么是 Skill?
先看一个生活中的例子。
你让一个会做饭的人做红烧肉。如果只告诉他菜名,他可能会凭经验去做;如果再给他一张可靠的菜谱,上面写着要准备什么、先做什么、火候多大以及出问题时怎么办,他就更容易稳定地做好这道菜。
对 Agent 来说,Skill 就像这张菜谱。 它不是任务的最终答案,而是一份“怎样完成这类任务”的说明。它通常会告诉 Agent:
- 哪类任务要打开它;
- 第一步做什么,接下来做什么;
- 不确定时去哪里查;
- 可以使用哪些工具;
- 什么情况下应该停下来询问用户。
Skill 不会让模型突然变得更聪明,也不会改变模型本身。它只是让 Agent 在处理某类任务时有步骤可循、知道去哪里查,尽量少靠猜。
Agent 什么时候会使用 Skill?
Agent 不会把所有 Skill 一直“摊在桌面上”。它通常先看一份简短目录,知道有哪些 Skill、每个 Skill 适合做什么。收到任务后,如果出现下面的情况,才会打开对应的 Skill:
- 用户明确点名某个 Skill;
- Agent 发现当前任务正好符合某个 Skill 的用途;
- 系统或项目规则要求这类任务必须使用指定 Skill。
这个动作发生在 Agent 真正回答或开始操作之前。同一个任务做到不同阶段时,也可能需要打开不同的 Skill。
打开 Skill 后,Agent 会照着里面的步骤工作,需要时再去查询资料或使用工具。
Skill 如何工作?
flowchart LR
A([用户提出任务]) --> B[看看有哪些 Skill]
B --> C{找到合适的<br/>Skill 了吗}
C -->|用户点名 / 任务匹配 / 规则要求| D[打开对应 Skill]
D --> E[按照步骤工作]
E --> F[需要时查资料<br/>或使用工具]
F --> G([完成任务])
C -->|没有| H[用通用能力处理]
H --> G
classDef start fill:#e8f3f8,stroke:#2b7489,color:#173b48,stroke-width:2px;
classDef decision fill:#fff4dc,stroke:#c88719,color:#5b3a00,stroke-width:2px;
classDef skill fill:#f0eafd,stroke:#8250df,color:#3f2675,stroke-width:2px;
classDef action fill:#eaf2fd,stroke:#3178c6,color:#173f73,stroke-width:2px;
classDef done fill:#e8f6ec,stroke:#2ea043,color:#175c2d,stroke-width:2px;
class A start;
class C decision;
class B,D skill;
class E,F,H action;
class G done;
以 TSL Playbook 中的 tsl-syntax-reference 为例:当用户要求编写或解释 TSL 代码时,Agent 会先打开这个 Skill,按照里面的说明查询 TSL 语法资料,确认正确写法后再生成代码,而不是因为“TSL 看起来像 Pascal”就凭经验猜。
这个例子体现了 Skill 的核心价值:
Skill 不替 Agent 完成任务,而是告诉 Agent 如何更可靠地完成某一类任务。
简单来说,Skill 负责告诉 Agent“这类事情应该怎么做”。任务发生变化时,Agent 可以在后续步骤中再使用新的 Skill。
第二部分:Prompt + Loop —— 从一次回答到持续完成任务
Prompt 是什么?
Prompt 是一次模型调用所接收的输入,可能包括:
- 用户当前提出的任务;
- 系统规定的角色与行为边界;
- 已有的对话和执行历史;
- 工具返回的结果;
- 当前任务状态和剩余目标。
因此,Prompt 不是模型调用本身,而是这次调用所使用的任务说明和上下文。
一次性的 Prompt 通常是:用户输入任务,模型给出回答,然后结束。如果任务需要读取文件、修改代码、运行测试并根据报错继续修复,仅靠一次回答往往不够,这时就需要 Loop。
一次性 Prompt 与 Loop 有什么不同?
flowchart TD
subgraph ONE[一次性 Prompt]
direction LR
P1[输入任务] --> P2[模型回答] --> P3([结束])
end
subgraph LOOP[Loop]
direction LR
L1[设定目标] --> L2[观察当前状态]
L2 --> L3[决定下一步]
L3 --> L4[行动或调用工具]
L4 --> L5[更新状态]
L5 --> L6{目标完成了吗}
L6 -->|完成| L7([输出结果])
L6 -->|没有| L2
end
classDef prompt fill:#eaf2fd,stroke:#3178c6,color:#173f73,stroke-width:2px;
classDef loop fill:#f0eafd,stroke:#8250df,color:#3f2675,stroke-width:2px;
classDef decision fill:#fff4dc,stroke:#c88719,color:#5b3a00,stroke-width:2px;
classDef done fill:#e8f6ec,stroke:#2ea043,color:#175c2d,stroke-width:2px;
class P1,P2,L1 prompt;
class L2,L3,L4,L5 loop;
class L6 decision;
class P3,L7 done;
Loop 可以由用户手动推进,例如模型回答后,用户再说一句“继续”。在真正的 Agent 系统中,Loop 通常由外部程序管理:程序反复调用模型、执行工具并更新状态,直到任务完成、需要用户确认、发生错误或达到执行上限。
Loop 如何工作?
这里最容易误解的一点是:Prompt 和 Loop 不是二选一,Prompt 就在 Loop 里面。
Agent 每执行一轮,都会把新的观察结果和任务状态加入上下文,再组装下一轮 Prompt:
Prompt 1 → 模型决策 → 执行工具 → 获得结果
↓
Prompt 2(加入新结果)← 更新任务状态
模型负责判断“下一步做什么”,外部程序负责真正运行 Loop、执行工具、保存状态和检查停止条件。模型本身不会在没有再次调用的情况下无限运行。
最后记住三句话
| 概念 | 一句话理解 |
|---|---|
| Skill | 为 Agent 提供某个领域可重复使用的专业工作方法。 |
| Prompt | 告诉模型这一轮知道什么、遵守什么、要做什么。 |
| Loop | 让 Agent 根据执行反馈不断决定下一步,直到停止。 |
三者组合起来,Agent 才能从“回答一个问题”进化为“持续完成一个任务”:
Skill 提供专业方法,Prompt 描述当前一步,Loop 推动任务向前。