12.3 智能体中Skill的约束与自进化实战

王晓华AE开发入门书《智能体工程驱动AI Agent开发》全文试读-CSDN博客

目录

[12.3.1 Prompt中对Skill使用约束](#12.3.1 Prompt中对Skill使用约束)

[12.3.2 添加额外的Skill](#12.3.2 添加额外的Skill)

[12.3.3 基于自定义智能体Skill的自进化实战](#12.3.3 基于自定义智能体Skill的自进化实战)


Skill的调用是智能体实现能力扩展、标准化执行任务的核心环节,在前文完成Skill标准化定义、动态载入架构设计及InvokeSkillTool工具开发的基础上,本节将重点阐述智能体中Skill的实际调用逻辑与执行规范。

通过双层Prompt约束明确技能优先调用原则,结合Skill加载引擎与现有工具链,实现Skill从需求匹配、激活到执行的全流程可控。下面将从调用约束、执行流程及实际运行示例,详细拆解智能体中Skill的完整调用机制。

12.3.1 Prompt中对Skill使用约束

在实际落地使用过程中,我们基于前文定义的标准化Skill完成了基础的技能调用验证,为确保技能被优先执行,系统通过双层Prompt约束强制规范技能调用逻辑,从全局到子任务层面均明确技能优先的执行规则:

第一层 --- 主system prompt(skill_loader.py的get_metadata_prompt()):

【Skill强制使用】

【重要】优先使用技能:当用户需求与某个技能的描述匹配时, 必须优先调用invoke_skill工具激活该技能,再按技能指令执行。

不要跳过技能直接使用基础工具完成任务。

第二层 --- 每个子任务的system prompt(agentV5.py的skill_priority_hint):

【Skill优先规则】

可用技能: weather-skill

在执行任务前,先判断用户需求是否匹配某个技能。

如果匹配,必须优先调用invoke_skill工具激活该技能,按技能指令执行。

不要跳过技能直接使用基础工具。

第二层是在system_content中拼接完所有分支(单任务/中间任务 /

end_task)之后统一追加的,所以所有子任务都会带上这条规则。

通过这两层强制Prompt声明,主控智能体与子智能体在处理任务时都会严格遵循Skill优先的处理逻辑,实际运行日志也直观呈现了这一标准执行流程:

2026-04-19 08:18:46,057 - INFO - 子任务1 Step 1 执行 2 个工具 (搜索 1/3)

2026-04-19 08:18:46,057 - INFO - 子任务1 Step 1 工具: invoke_skill, 输入: {'skill_name': 'weather-skill', 'user_query': '北京4月20日天气预报'}

2026-04-19 08:18:46,057 - INFO - ============================================================

2026-04-19 08:18:46,057 - INFO - Skill >>> 激活技能: weather-skill

2026-04-19 08:18:46,057 - INFO - Skill >>> 用户问题: 北京4月20日天气预报

2026-04-19 08:18:46,058 - INFO - Skill >>> 指令已加载(904 字符)

2026-04-19 08:18:46,058 - INFO - ============================================================

2026-04-19 08:18:46,058 - INFO - ============================================================

2026-04-19 08:18:46,058 - INFO - 子任务1 >>> Skill已激活: weather-skill

2026-04-19 08:18:46,058 - INFO - 子任务1 >>> Skill用户问题: 北京4月20日天气预报

2026-04-19 08:18:46,058 - INFO - ============================================================

读者可以自行使用。

12.3.2 添加额外的Skill

除了我们自己编写的Skill,对于智能体能力的进一步扩展,我们无须修改核心代码,只需通过下载第三方提供的、符合Anthropic规范的Skill即可实现。

前文设计的SkillLoader加载引擎支持多目录扫描,且完全兼容Anthropic Skill标准,因此第三方Skill只要包含规范的SKILL.md文件及可选的scripts/、references/、assets/目录结构,下载后放入智能体预设的Skill扫描目录,即可被自动发现、解析并注册,快速为智能体新增对应功能,实现能力的灵活、低成本扩展。

读者可以自行从对应的网站下载特定的Skill,并将其部署到我们前面设置的Skill文件夹中,如图12-2所示。

图12-2 部署后Skill的位置

在这里我们下载了一个前端设计Skill,用于旅游导览的设计和使用,并且设置在使用时可以自行调用,最终生成的页面如图12-3所示。

图12-3 使用Skill设计的导览网页前端

可以看到,此时我们设计的网页HTML前端相对于原始的只展示结果的方面,已经有了较大的进展,读者可以自行比较。在具体执行上,我们可以显式地通知大模型,在进行前端页面生成时不要使用Skill。

12.3.3 基于自定义智能体Skill的自进化实战

在前期的实践中,我们通过两个独立Skill的协同配合完成了网页设计任务,虽然能够实现既定的基础功能,但随着任务的深入推进,这套方案仍有较大的优化空间。我们可以在现有技能的基础上进一步迭代升级,注入垂直领域的专属定制化逻辑,让技能在细分场景下的专业执行能力得到持续进化。

最简单高效的优化方法,是依托我们已经自定义开发完成的智能体,将现有的多个Skill进行整合合并,以此构建一个全新的聚合型Skill。这种方式可以剔除技能之间重复的执行逻辑与指令内容,精简技能体系,让我们能够抛开冗余环节、聚焦于核心目标内容的实现。

在具体使用过程中,我们仅需要对智能体的模型上下文长度进行合理配置即可。本次优化采用GLM 5.1模型进行编程开发,该模型支持最大128K的上下文窗口,我们可以优先完成该参数的设置,为技能合并与复杂任务的执行提供充足支撑。

下面是供智能体进行Skill自进化的文本:

...

print("=" * 60)

reply = agent.invoke(

"你现在阅读你自己目录下C://Users//xiaohua//Desktop//llmAgentBook//initspace//skills中两个Skill文件,然后仿照这个格式,在原有的skills文件夹中构建一个完整的travel-skill技能包。"

"完成以后使用这个travel-skill写入skills文件夹中,然后结合北京4月20日天气预报,以及对应的博物馆信息,做一份博物馆旅游html攻略")

print(reply)

print("=" * 60)

...

下面则是拆解后的示例:

当前任务计划

🔄 1 读取指定目录下的两个Skill文件并分析其格式规范 (in_progress)

2 结合北京4月20日天气预报及博物馆信息,规划travel-skill技能包的数据结构 (pending)

3 仿照原有格式编写完整的travel-skill技能包文件并写入skills文件夹 (pending)

4 调用travel-skill技能包,整合天气与博物馆数据生成HTML旅游攻略 (pending)

读者可以自行尝试完成。使用自进化后的技能包生成的HTML旅游攻略部分页面如图12-4所示。

图12-4 自进化后生成的导览页面

新生成的、进化后的Skill.md内容如下:


name: travel-skill

description: 结合实时天气预报与目的地(如博物馆)信息,为用户规划智能出行策略。当用户询问特定日期的游玩建议、行程规划或特定地点(如博物馆)的出行指南时自动触发。


智能出行规划技能 (结合天气与博物馆)

适用场景

用户提出结合了天气与出行目的地的规划需求时使用,例如:

  • "北京4月20日天气怎么样?适合去逛博物馆吗?"

  • "明天想去国家博物馆,天气和门票方面有什么建议?"

  • "这周末去北京游玩,怎么根据天气安排室内外行程?"

执行流程

  1. **意图与实体提取**:从用户提问中精准提取【目标城市】(如:北京)、【目标日期】(如:4月20日)以及【目的地类型】(如:博物馆)。

  2. **天气数据获取**:

  • 查阅 `references/city_codes.md` 获取城市编码。

  • 调用天气接口获取目标日期的天气预报(气温、风力、阴晴雨雪)。

  1. **目的地信息匹配**:
  • 查阅 `references/attractions.md` 获取对应城市的热门景点、博物馆信息。

  • 获取博物馆的开放状态、预约要求及游览建议。

  1. **综合策略生成**:
  • 逻辑整合:将天气状况(如:下雨/大风)与目的地特性(如:室内展览/室外古建)结合。

  • 调用 `scripts/travel.py` 生成结构化的出行规划。

  1. **结果输出**:以自然、口语化且条理清晰的格式回复用户(包含:天气提醒、博物馆预约提示、行程时间建议),必要时生成HTML攻略页面。

约束与异常处理

  • **数据依赖**:若未获取到目标日期的天气数据,需明确告知用户,并单独提供博物馆攻略。

  • **预约限制强调**:对于北京的热门博物馆(如故宫、国博),必须在回复中强调查验身份证件、提前预约的限制。

  • **网络异常**:接口调用失败时,返回友好的降级提示语。

  • **禁止原始数据堆砌**:禁止直接返回未经整理的JSON或API原始数据,必须转化为用户易懂的出行建议。

  • 仅支持国内热门旅游城市查询,国外城市需提示暂不支持。

从上面内容中可以清晰地看出,我们完成了从最初泛化通用的技能功能描述,到聚焦"天气+博物馆"垂直出行场景的专业化技能能力展示的关键升级。这一转变不仅大幅提升了技能的触发准确率与执行精准度,让用户能够直观感知技能的核心价值与适用边界。更重要的是,它为团队建立了垂直领域技能的标准化开发范式---通过明确的场景定义、结构化的执行流程、统一的回复规范和完善的异常处理机制,确保不同开发者产出的技能体验保持高度一致。

同时,这种垂直化的技能设计也为后续能力扩展奠定了坚实基础。未来我们可以基于同一框架,快速迭代出"天气+公园""天气+商圈""天气+亲子乐园"等更多细分场景的出行技能,逐步构建起覆盖全场景的智能出行服务体系。

此外,标准化的技能文档也降低了团队协作成本,新加入的开发者能够快速理解技能逻辑并参与维护,而产品和测试人员也可以依据文档明确验收标准,提升整个开发流程的效率与质量。

相关推荐
传奇开心果编程几秒前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
SL_staff3 分钟前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
IT_陈寒9 分钟前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
滕州市燕猫虎计算机科技工作室个体工商户11 分钟前
IDEA:Command line is too long
java·ide·intellij-idea
fd320014 分钟前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
卡布鲁24 分钟前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js
碳基修炼40 分钟前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
华章酱42 分钟前
MySQL幻读是怎么出现的
数据库·mysql·幻读
步行cgn42 分钟前
Spring p 命名空间注入详解
java·前端·spring
YatHinLay1 小时前
MyBatis 流式查询实战:ResultHandler 处理海量数据
java