← 术语图鉴

钩子

Hook · 也叫 PreToolUse / 工具调用前的检查 / hooks

在 Agent 的某个动作之前或之后自动执行的一段代码;插在工具调用之前,就能拦下不该做的事。

你可能会说:

  • “能不能在 Agent 动手之前,先拦一道?”
  • “提示词里写了"不许读别的文件",为什么它还是去读了?”

它是什么

Agent 每次调用工具(读文件、执行命令、发请求)之前,框架会先看有没有钩子要检查这一步。钩子是普通代码,看得到工具名和参数,可以放行、拒绝,或者记一笔。

它和提示词的区别在于:提示词是请求,模型多半会照做,但也可能做不到;钩子是代码,不管模型怎么想,都会执行。必须做到的限制,比如不许读目录之外、不许执行命令,放在钩子里。

钩子只适合"能不能做"这类边界清楚的规则,不适合做业务判断:回答好不好、语气对不对,交给提示词和评测。写好的钩子,要用测试证明它拦得住。

打个比方

像门口的闸机:墙上贴着"闲人免进"是提醒,闸机认卡才放行是规矩。

在这个网站里

兄弟项目里的知识库 Agent,用一个工具调用前的钩子检查每次读取的路径:落在语料目录之外就拒绝。它配了 17 条单元测试,还实测拦下了读取系统文件的请求(第 18、24 课)。E2E 导师也有一个钩子,每次调用工具前再核对一遍工具名。

容易搞混的地方

常见误解

提示词里写清楚"不许做",就等于设了限制

正确理解

提示词是请求,钩子才是限制。必须做到的,写成代码,再用测试证明。

常见误解

钩子加得越多越安全

正确理解

每多一道代码闸门,Agent 能做的事就少一些。钩子只拦安全和副作用,判断类的规则交给提示词和人。

你可以这样告诉 AI

复制下面这段,贴给你的 AI

哪些操作是必须拦下的?请写成工具调用前的钩子,检查工具名和参数,并写测试覆盖越界的情况。哪些只是希望它做到的,留在提示词里。

先知道

  • 智能体——一个会自己决定下一步做什么的程序:大模型负责思考,工具负责动手,循环往复直到完成任务。
  • 工具调用——模型不直接动手,而是说"我要调用某某工具、参数是这些",由你的程序去执行,再把结果交还给它。

对比着看

  • 提示词——你交给模型的全部文字:要求、背景、参考、限制。模型只能根据它看到的这些来写。

接着看

  • 最小权限——只给完成这件事所必需的权限,多一项都不给;需要时再加,用完就收回。
  • 评测——一组带标准答案的问题:每次改提示词、换模型之后都跑一遍,用通过率判断是变好还是变坏。

在这些课里出现