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原始数据,必须转化为用户易懂的出行建议。

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

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

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

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

相关推荐
风月说与山鬼16 分钟前
四、Tailwind CSS——间距与尺寸
前端·css·tailwind css
en.en..21 分钟前
C语言 static函数与头文件封装规范
java·c语言·前端
计算机魔术师26 分钟前
旅途中用手机远程控制电脑?电脑不在身边,ToDesk/UU远程/TeamViewer移动端深度实测
前端
步行cgn28 分钟前
Spring Boot 项目打包部署详解
java·spring boot·后端
小小龙学IT35 分钟前
Qt 数据库编程(Qt SQL 模块)深度解析
数据库·sql·qt
风月说与山鬼40 分钟前
三、Tailwind CSS——排版与文字样式
前端·css·tailwind css
pnoker1 小时前
拆解 IoT DC3:六层微服务架构
java·物联网·spring cloud·微服务·架构
TDengine (老段)1 小时前
TDengine vs InfluxDB — 全方位对比
大数据·数据库·物联网·时序数据库·tdengine·涛思数据·iotdb
eokred1 小时前
图片预览组件的另一种设计:Headless、可组合、开箱即用
前端·react