什么是 Agent
什么是 Agent
如果只用一句话概括:Agent 是能围绕目标持续行动的 AI 系统。
普通聊天模型主要负责“回答”。你问一句,它回一句;你让它解释代码,它根据已有上下文生成解释。Agent 不一样,它被放进一个可以调用工具的环境里:能读文件、跑命令、搜索资料、写脚本、观察结果,再根据结果决定下一步。
这就是为什么学习 ctf-skills 前必须先理解 Agent。因为这个项目不是写给人类直接照抄的题解,而是写给 Agent 的“行动说明”。
LLM 和 Agent 的区别
LLM 是大语言模型。它擅长理解文本、生成文本、总结信息、推理下一步。
但模型本身不会真的打开文件,不会真的访问网站,也不会真的执行 python solve.py。它只能在已有上下文里生成看起来合理的内容。
Agent 是一个系统。它通常包含模型、工具、上下文、权限控制和执行循环。
它不只是“说下一步应该做什么”,还可以请求宿主程序调用工具,然后读取工具返回结果。
Skill 是给 Agent 看的专业说明。它告诉 Agent 在某类任务中应该如何开始、如何判断、何时切换方向。
ctf-skills 就是一组 CTF 方向 Skill。
Agent 的组成
一个实用 Agent 至少包含五个部分:
| 部分 | 作用 |
|---|---|
| 模型 | 理解任务、生成计划、阅读结果 |
| 工具 | 执行外部动作,例如读文件、运行命令 |
| 上下文 | 当前任务中模型能看到的信息 |
| 规则 | 系统提示词、安全边界、权限要求 |
| 循环 | 观察、计划、行动、反馈、停止 |
没有工具时,模型只能“建议”。有工具后,Agent 可以“验证”。这一步非常关键。
CTF 里经常需要验证:文件到底是什么类型、服务到底返回什么、脚本跑出来是不是 flag、程序崩溃点是否稳定。只靠模型猜,很容易出错;能调用工具后,Agent 才能把猜测变成证据。
一个 CTF 例子
假设你给 Agent 一个压缩包,里面有一个未知文件。
普通模型可能会说:
这可能是逆向题,建议使用 strings 或 IDA 分析。
Agent 可以做得更具体:
- 解压题目包。
- 调用
file判断文件类型。 - 如果是 ELF,调用
checksec看保护。 - 调用
strings找可疑字符串。 - 如果发现输入校验逻辑,转向
ctf-reverse。 - 如果发现明显栈溢出,再转向
ctf-pwn。
这不是因为 Agent “更懂 CTF”,而是因为它能边做边看结果。
Agent 不是魔法
常见误解
Agent 不是自动解题机器。它会误判题型,会写错脚本,会相信错误输出,也可能因为上下文太乱而走偏。
在 CTF 中,Agent 最大的价值不是替人思考,而是把重复、繁琐、需要工具验证的步骤组织起来。人仍然要负责判断:它的路线有没有证据?它是不是越界?它是不是在浪费时间?
为什么 ctf-skills 需要 Agent
ljagiello/ctf-skills 的核心设计不是“教人从零学 Web/Pwn/Crypto”,而是给 Agent 提供方向路线。
它回答的是这些问题:
- 题目刚开始时,如何分类?
- 哪些信号说明应该进入
ctf-web? - 哪些信号说明应该从 Reverse 转向 Pwn?
- 某个方向第一轮应该检查哪些东西?
- 解出后如何写出可复现 writeup?
所以,读这个项目时要换一个视角:你不是在读传统教材,而是在读 Agent 的操作手册。
小结
Agent 是“模型 + 工具 + 上下文 + 规则 + 执行循环”的组合。它能在 CTF 中帮你整理线索、调用工具、写脚本、验证结果,但它不能替代授权边界和人的判断。
理解 Agent 之后,再看 ctf-skills,你就会明白它为什么以 Skill 形式组织,而不是写成普通文章。