
1. 引言在 AI Agent智能体领域Agent Skill智能体技能是一个核心概念。简单来说Skill 就是赋予 Agent 的“超能力”——让一个原本只会“聊天”的大模型能够执行具体的任务比如查询天气、发送邮件、操作数据库、调用外部 API 等。如果把 Agent 比作一个“数字员工”那么 LLM大语言模型就是他的“大脑”而Skill 就是他的“双手和工具”。没有 SkillAgent 只是一个空有知识却无法行动的“理论家”。本文将带你从零开始深入理解 Agent Skill 的本质、结构、实现方式并通过完整的代码示例和架构图让你彻底掌握这一关键技术。2. 什么是 Agent Skill2.1 核心定义Agent Skill是一段可执行的代码或配置它定义了 Agent 如何与外部世界交互。它通常包含以下几个要素名称技能的唯一标识如get_weather。描述用自然语言说明该技能的功能供 LLM 理解何时调用它。输入参数执行该技能需要哪些信息如城市名、日期。执行逻辑具体的代码实现调用 API、查询数据库等。输出结果执行后返回给 LLM 的数据。2.2 为什么需要 Skill大语言模型本身有两大局限知识截止模型训练数据有截止日期无法获取实时信息。无法行动模型只能生成文本不能直接操作外部系统。Agent Skill 完美解决了这两个问题实时性通过调用天气 API 获取最新天气。行动力通过调用邮件 API 发送真实邮件。3. Agent Skill 的架构设计下面是一个典型的 Agent 调用 Skill 的流程图是否用户输入: 北京今天天气怎么样LLM 推理是否需要调用 Skill解析意图与参数匹配 Skill: get_weather提取参数: city北京执行 Skill 代码调用天气 API返回结果: 晴, 25°CLLM 组织自然语言回复用户看到: 北京今天天气晴朗...直接回复流程说明用户提问。LLM 判断是否需要使用技能。如果需要LLM 会输出一个结构化的“函数调用”请求如 JSON。Agent 框架解析这个请求找到对应的 Skill 并执行。Skill 执行完毕将结果返回给 LLM。LLM 将结果组织成自然语言回复给用户。4. 代码实战从零实现一个 Agent Skill 系统下面我们用 Python 实现一个完整的 Agent Skill 系统包含天气查询和计算器两个技能。4.1 定义 Skill 基类fromabcimportABC,abstractmethodfromtypingimportAny,DictclassBaseSkill(ABC):所有技能的基类propertyabstractmethoddefname(self)-str:技能名称passpropertyabstractmethoddefdescription(self)-str:技能描述供 LLM 理解passpropertyabstractmethoddefparameters(self)-Dict[str,Any]:参数定义遵循 JSON Schema 格式passabstractmethodasyncdefexecute(self,**kwargs)-str:执行技能的具体逻辑pass4.2 实现天气查询 SkillimportjsonimporthttpxfromtypingimportAny,DictclassWeatherSkill(BaseSkill):propertydefname(self)-str:returnget_weatherpropertydefdescription(self)-str:return获取指定城市的实时天气信息propertydefparameters(self)-Dict[str,Any]:return{type:object,properties:{city:{type:string,description:城市名称如 北京、上海}},required:[city]}asyncdefexecute(self,city:str)-str:# 模拟调用天气 API实际可替换为真实 API# 这里使用 wttr.in 的免费 API 做演示try:asyncwithhttpx.AsyncClient()asclient:responseawaitclient.get(fhttps://wttr.in/{city}?format%C%t)ifresponse.status_code200:returnf{city}当前天气:{response.text}else:returnf无法获取{city}的天气信息exceptExceptionase:returnf查询天气时出错:{str(e)}4.3 实现计算器 SkillimportmathimportreclassCalculatorSkill(BaseSkill):propertydefname(self)-str:returncalculatorpropertydefdescription(self)-str:return执行数学计算支持加减乘除、幂运算、三角函数等propertydefparameters(self)-Dict[str,Any]:return{type:object,properties:{expression:{type:string,description:数学表达式如 2 3 * 4, sin(30), 2^10}},required:[expression]}asyncdefexecute(self,expression:str)-str:# 安全地计算数学表达式# 注意生产环境应使用更安全的沙箱allowed_names{k:vfork,vinmath.__dict__.items()ifnotk.startswith(__)}allowed_names.update({abs:abs,round:round})# 替换 ^ 为 **exprexpression.replace(^,**)try:resulteval(expr,{__builtins__:{}},allowed_names)returnf{expression}{result}exceptExceptionase:returnf计算错误:{str(e)}4.4 构建 Agent 核心引擎fromtypingimportList,Dict,AnyimportjsonclassAgent:简单的 Agent 实现def__init__(self,skills:List[BaseSkill]):self.skills{skill.name:skillforskillinskills}defget_skill_definitions(self)-List[Dict]:生成 LLM 可理解的技能定义列表definitions[]forskillinself.skills.values():definitions.append({type:function,function:{name:skill.name,description:skill.description,parameters:skill.parameters}})returndefinitionsasyncdefprocess_llm_response(self,response:Dict)-str:处理 LLM 返回的函数调用请求iftool_callsnotinresponse:returnresponse[content]results[]fortool_callinresponse[tool_calls]:skill_nametool_call[function][name]argumentsjson.loads(tool_call[function][arguments])ifskill_nameinself.skills:skillself.skills[skill_name]resultawaitskill.execute(**arguments)results.append(result)else:results.append(f未知技能:{skill_name})return\n.join(results)4.5 完整运行示例importasyncioasyncdefmain():# 注册技能skills[WeatherSkill(),CalculatorSkill()]agentAgent(skills)# 模拟 LLM 返回的函数调用实际项目中由 LLM 生成# 场景1查询天气llm_response_1{content:None,tool_calls:[{function:{name:get_weather,arguments:{city: 北京}}}]}result_1awaitagent.process_llm_response(llm_response_1)print(f天气查询结果:{result_1})# 场景2数学计算llm_response_2{content:None,tool_calls:[{function:{name:calculator,arguments:{expression: sin(30) * 2 5^2}}}]}result_2awaitagent.process_llm_response(llm_response_2)print(f计算结果:{result_2})# 场景3直接回复无需技能llm_response_3{content:你好我是你的智能助手。,tool_calls:None}result_3awaitagent.process_llm_response(llm_response_3)print(f直接回复:{result_3})if__name____main__:asyncio.run(main())运行输出天气查询结果: 北京 当前天气: Sunny 25°C 计算结果: sin(30) * 2 5^2 26.0 直接回复: 你好我是你的智能助手。5. 高级 Skill 设计模式5.1 链式技能Chain of Skills一个技能的输出可以作为另一个技能的输入形成处理流水线用户输入技能1: 文本翻译技能2: 情感分析技能3: 摘要生成最终回复5.2 条件技能Conditional Skills根据上下文动态选择不同的技能执行路径classRouterSkill(BaseSkill):路由技能根据输入内容决定调用哪个子技能asyncdefexecute(self,input_text:str)-str:if天气ininput_text:returnawaitWeatherSkill().execute(city北京)elif计算ininput_text:returnawaitCalculatorSkill().execute(expression11)else:return无法处理该请求5.3 带状态的技能Stateful Skills技能可以维护内部状态实现多轮对话中的上下文记忆classTodoListSkill(BaseSkill):def__init__(self):self.todos[]asyncdefexecute(self,action:str,item:strNone)-str:ifactionadd:self.todos.append(item)returnf已添加:{item}elifactionlist:return待办事项:\n\n.join(f-{t}fortinself.todos)elifactionremove:ifiteminself.todos:self.todos.remove(item)returnf已移除:{item}returnf未找到:{item}6. 主流框架中的 Skill 实现6.1 LangChain 中的 Toolfromlangchain.toolsimporttooltooldefget_weather(city:str)-str:获取指定城市的天气returnf{city}天气晴朗25°C# 注册到 Agentfromlangchain.agentsimportinitialize_agent,AgentTypefromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4)agentinitialize_agent(tools[get_weather],llmllm,agentAgentType.OPENAI_FUNCTIONS)6.2 AutoGen 中的 ToolfromautogenimportConversableAgent,register_functiondefget_weather(city:str)-str:returnf{city}天气: 晴, 25°CassistantConversableAgent(nameAssistant,llm_config{config_list:[{model:gpt-4}]})register_function(get_weather,callerassistant,executorassistant,description获取天气信息)7. 最佳实践与注意事项7.1 设计原则单一职责每个 Skill 只做一件事做好一件事。描述清晰Skill 的描述要足够详细帮助 LLM 准确判断何时调用。参数校验对输入参数做严格校验避免异常输入导致崩溃。错误处理Skill 执行失败时返回友好的错误信息而不是抛出异常。7.2 安全考虑沙箱执行对代码执行类 Skill如计算器使用沙箱隔离。权限控制敏感操作如删除文件、发送邮件需要用户确认。速率限制对 API 调用类 Skill 添加频率限制。输入过滤防止注入攻击特别是 SQL 查询类 Skill。7.3 性能优化缓存结果对重复查询如天气使用缓存。异步执行所有 Skill 都应支持异步避免阻塞 Agent 主流程。超时控制为每个 Skill 设置合理的超时时间。8. 总结Agent Skill 是构建智能体应用的核心组件它让 LLM 从“纸上谈兵”变成了“能征善战”。通过本文的学习你应该已经掌握了什么是 Agent Skill赋予 Agent 执行具体任务的能力。架构设计LLM 推理 → 意图解析 → Skill 匹配 → 执行 → 结果返回。代码实现从基类到具体技能再到 Agent 引擎的完整实现。高级模式链式、条件、带状态等设计模式。框架集成LangChain、AutoGen 等主流框架的使用方式。现在你可以开始为自己的 Agent 设计各种强大的 Skill 了无论是查询数据库、调用 API、还是操作文件系统Skill 都能让你的 Agent 无所不能。