# 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{找到合适的
Skill 了吗} C -->|用户点名 / 任务匹配 / 规则要求| D[打开对应 Skill] D --> E[按照步骤工作] E --> F[需要时查资料
或使用工具] 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 推动任务向前。**