Files
playbook/AGENT_PRIMER.md

157 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 如何工作?
```mermaid
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 有什么不同?
```mermaid
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:
```text
Prompt 1 → 模型决策 → 执行工具 → 获得结果
Prompt 2(加入新结果)← 更新任务状态
```
模型负责判断“下一步做什么”,外部程序负责真正运行 Loop、执行工具、保存状态和检查停止条件。模型本身不会在没有再次调用的情况下无限运行。
---
## 最后记住三句话
| 概念 | 一句话理解 |
| :--------- | :---------------------------------------------- |
| **Skill** | 为 Agent 提供某个领域可重复使用的专业工作方法。 |
| **Prompt** | 告诉模型这一轮知道什么、遵守什么、要做什么。 |
| **Loop** | 让 Agent 根据执行反馈不断决定下一步,直到停止。 |
三者组合起来,Agent 才能从“回答一个问题”进化为“持续完成一个任务”:
> **Skill 提供专业方法,Prompt 描述当前一步,Loop 推动任务向前。**