深入浅出:STEERING、MCP、SKILLS、Agent Hooks 与 SPECS——AI Agent 开发的五大核心范式

张开发
2026/6/5 20:27:50 15 分钟阅读
深入浅出:STEERING、MCP、SKILLS、Agent Hooks 与 SPECS——AI Agent 开发的五大核心范式
最近在构建一系列AI Agent 系统的过程中我频繁接触到几个核心概念STEERING、MCP、SKILLS、Agent Hooks和SPECS。它们分别代表了 Agent 开发中不同维度的设计思想。但在学习过程中我发现一个常见困惑这些概念到底对应什么文件代码写在哪是配置还是代码今天这篇文章我尝试从“落地”的角度把这五个概念讲清楚。写在前面为什么需要这些概念在 AI Agent 从概念验证走向生产落地的过程中我逐渐意识到一个问题单纯的 Prompt 工程已经无法支撑复杂业务场景。你需要让 Agent 知道该做什么、不该做什么让 Agent 能调用各种外部工具让 Agent 能完成复杂的多步骤任务让 Agent 的行为可观测、可干预让团队能协作开发、规范测试这五个概念正是从不同角度回答了同一个问题如何让 Agent 既强大又可靠先看一张图这五个概念在项目里长什么样my-agent-project/ ├── .cursor/ │ └── mcp.json # MCP 配置告诉编辑器有哪些工具可用 ├── specs/ │ └── agent.spec.yaml # SPECSAgent 的“产品需求文档” ├── skills/ │ └── customer_onboarding.skill.ts # SKILLAgent 的“能力模块” ├── hooks/ │ └── auth_hooks.ts # Agent Hooks运行时“拦截器” ├── steering/ │ └── default.yaml # STEERING行为控制的“方向盘” └── src/ └── agent_runtime.py # 运行时框架读取所有配置并运行简单来说SPECS、SKILL、MCP 配置→ 你在编辑器里写的代码/配置文件STEERING、Agent Hooks→ Agent运行时执行的动态逻辑一、SPECSAgent 的“产品需求文档”SPECS是一个 YAML/JSON 文件用来定义 Agent 的“接口契约”。你可以把它理解为 Agent 的产品需求文档——只不过它是机器可读的。代码写在哪# specs/agent.spec.yamlagent:name:客服助手version:1.0.0# 定义 Agent 有什么能力capabilities:-name:创建工单input:[问题描述,用户ID]output:[工单号]# 定义用户说什么话时触发什么能力intents:-examples:[系统报错了,有bug,功能不能用]handler:创建工单# 定义对话流程conversation_flows:-name:报bug流程steps:-问:请描述您遇到的问题-等用户回答-调用:创建工单-回复:工单已创建编号是{工单号}谁在用角色怎么用产品经理写 SPECS定义 Agent 应该做什么工程师按 SPECS 实现代码QA按 SPECS 写测试用例AI 编辑器读取 SPECS提供代码补全关键价值SPECS 让 Agent 开发从“黑盒”变成“白盒”。有了 SPECS你可以版本管理v1.0 → v2.0自动生成测试多人协作不打架二、MCPModel Context ProtocolAgent 的“USB 接口”MCP是 Anthropic 提出的一个标准化协议用来连接 AI 模型与外部工具、数据源。你可以把它理解为 Agent 世界的USB 接口——任何符合 MCP 协议的工具都可以即插即用。代码写在哪MCP 分为两部分配置和实现。配置告诉系统有哪些工具可用// .cursor/mcp.json 或项目根目录的 mcp.json{mcpServers:{filesystem:{command:npx,args:[-y,modelcontextprotocol/server-filesystem,/workspace]},github:{command:npx,args:[-y,modelcontextprotocol/server-github],env:{GITHUB_TOKEN:your_token}}}}在哪用在编辑器中Cursor/VS Code 读取 mcp.json让你在聊天时就能调用工具在 Agent 运行时Agent 框架通过 MCP Client 连接这些 Server调用工具关键价值MCP 解决了“工具碎片化”问题。过去每个 Agent 框架都要为每个工具写适配代码现在只要工具遵循 MCP 协议就能被任何支持 MCP 的 Agent 使用。三、SKILLSAgent 的“能力模块”SKILLS是一个可复用的能力单元。如果说 MCP 定义了“如何调用一个工具”那 SKILLS 定义了“如何用一组工具完成一个任务”。比如“新客户注册”这个 SKILLS可能需要调用“获取用户信息”工具调用“验证邮箱”工具调用“创建 CRM 账号”工具调用“发送欢迎邮件”工具代码写在哪// skills/customer_onboarding.skill.tsexportconstcustomerOnboardingSkill:Skill{name:新客户引导,description:处理新客户注册流程,// 什么情况下触发这个 SKILLtriggers:[{keywords:[新客户,注册,开通账号]}],// 具体的执行步骤你写的代码workflow:async(context){// 步骤1收集信息constuserInfoawaitaskUser([姓名,公司,邮箱]);// 步骤2验证邮箱constisValidawaitcallMCPTool(verify_email,{email:userInfo.email});if(!isValid){return{error:邮箱无效};}// 步骤3创建账号constaccountawaitcallAPI(/api/crm/create,userInfo);// 步骤4发送欢迎邮件awaitcallMCPTool(send_email,{to:userInfo.email,template:welcome});return{success:true,accountId:account.id};}};SKILLS vs 普通 Prompt维度普通 PromptSKILLS写法自然语言描述代码实现确定性依赖模型理解明确的执行流程可测试性难以测试可以单元测试复用每次重新写一次定义到处用关键价值SKILLS 把“复杂任务”变成“可复用的积木”。你可以像搭积木一样组合 SKILLS构建更强大的 Agent。四、STEERING控制 Agent 的“方向盘”STEERING是 Agent 的运行时行为控制机制。它不是写在文件里的静态配置而是 Agent 在运行时根据上下文动态调整的策略。代码写在哪STEERING 通常有两部分静态配置默认行为和动态逻辑运行时调整。静态配置# steering/default.yamlsteering:goal:帮助用户完成客户信息录入boundaries:# Agent 不能做的事disallowed:[删除数据,修改历史]# Agent 只能用这些 APIallowed_apis:[crm_query,customer_create]preferences:tone:专业且友好priority:准确性 速度动态逻辑运行时# src/steering_logic.pyclassSteeringController:def__init__(self,config):self.configconfigasyncdefget_steering(self,context):# 根据用户类型动态调整ifcontext.user_typevip:return{priority:速度优先,# VIP 用户要快tone:亲切}else:return{priority:准确性优先,# 普通用户要准确tone:专业}关键价值没有 STEERING 的 Agent 就像没有方向盘的汽车——它能跑但你可能不知道它会跑去哪里。STEERING 让你在运行时对 Agent 保持控制。五、Agent HooksAgent 的“生命周期拦截器”Agent Hooks是在 Agent 执行生命周期的关键节点插入的自定义逻辑。这个概念借鉴了 React Hooks 和 Webhook 的思想。代码写在哪# hooks/auth_hooks.py# 这个函数会在用户输入进入 Agent 前执行asyncdefpre_process_hook(input,context):# 过滤敏感词inputfilter_sensitive_words(input)# 注入用户信息context.user_profileawaitget_user_profile(context.user_id)returninput# 这个函数会在调用工具前执行asyncdefpre_action_hook(action,params,context):# 权限校验ifnothas_permission(context.user,action.name):raiseException(没有权限)returnparams# 这个函数会在工具执行后执行asyncdefpost_action_hook(result,action,context):# 记录日志awaitaudit_log.write({user:context.user_id,action:action.name,result:result})returnresult注册 Hooks# src/agent_runtime.pyagentAgent(pre_process_hookpre_process_hook,# 注册你的钩子函数pre_action_hookpre_action_hook,post_action_hookpost_action_hook)生命周期示意图关键价值Hooks 让你可以在不修改 Agent 核心代码的情况下注入业务逻辑。权限、缓存、审计这些横切关注点都可以通过 Hooks 优雅地实现。六、一张图总结这五个概念的关系七、总结一句话记住每个概念概念一句话总结在项目里的样子SPECSAgent 的产品需求文档specs/agent.spec.yamlSTEERINGAgent 的方向盘运行时控制steering/*.yaml 动态逻辑SKILLS可复用的能力积木skills/*.skill.ts代码文件Agent Hooks生命周期的拦截器hooks/*.py回调函数MCPAgent 的 USB 接口mcp.json配置 Server 实现写在最后这五个概念不是孤立的它们共同构成了企业级 Agent 开发的工程化基础。如果你是刚接触 Agent 开发建议在你的开发工具上按这个顺序上手先用MCP连接几个工具感受 Agent 如何调用外部能力再写一个简单的SKILLS体验如何组合工具完成任务然后用STEERING控制 Agent 的行为边界接着用Hooks添加日志、权限等横切关注点最后用SPECS规范整个项目让团队可以协作开发希望这篇文章能帮你理清这五个概念并在实际项目中用起来。欢迎在评论区分享你的实践经验和困惑

更多文章