王晓华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日天气怎么样?适合去逛博物馆吗?"
-
"明天想去国家博物馆,天气和门票方面有什么建议?"
-
"这周末去北京游玩,怎么根据天气安排室内外行程?"
执行流程
-
**意图与实体提取**:从用户提问中精准提取【目标城市】(如:北京)、【目标日期】(如:4月20日)以及【目的地类型】(如:博物馆)。
-
**天气数据获取**:
-
查阅 `references/city_codes.md` 获取城市编码。
-
调用天气接口获取目标日期的天气预报(气温、风力、阴晴雨雪)。
- **目的地信息匹配**:
-
查阅 `references/attractions.md` 获取对应城市的热门景点、博物馆信息。
-
获取博物馆的开放状态、预约要求及游览建议。
- **综合策略生成**:
-
逻辑整合:将天气状况(如:下雨/大风)与目的地特性(如:室内展览/室外古建)结合。
-
调用 `scripts/travel.py` 生成结构化的出行规划。
- **结果输出**:以自然、口语化且条理清晰的格式回复用户(包含:天气提醒、博物馆预约提示、行程时间建议),必要时生成HTML攻略页面。
约束与异常处理
-
**数据依赖**:若未获取到目标日期的天气数据,需明确告知用户,并单独提供博物馆攻略。
-
**预约限制强调**:对于北京的热门博物馆(如故宫、国博),必须在回复中强调查验身份证件、提前预约的限制。
-
**网络异常**:接口调用失败时,返回友好的降级提示语。
-
**禁止原始数据堆砌**:禁止直接返回未经整理的JSON或API原始数据,必须转化为用户易懂的出行建议。
-
仅支持国内热门旅游城市查询,国外城市需提示暂不支持。
从上面内容中可以清晰地看出,我们完成了从最初泛化通用的技能功能描述,到聚焦"天气+博物馆"垂直出行场景的专业化技能能力展示的关键升级。这一转变不仅大幅提升了技能的触发准确率与执行精准度,让用户能够直观感知技能的核心价值与适用边界。更重要的是,它为团队建立了垂直领域技能的标准化开发范式---通过明确的场景定义、结构化的执行流程、统一的回复规范和完善的异常处理机制,确保不同开发者产出的技能体验保持高度一致。
同时,这种垂直化的技能设计也为后续能力扩展奠定了坚实基础。未来我们可以基于同一框架,快速迭代出"天气+公园""天气+商圈""天气+亲子乐园"等更多细分场景的出行技能,逐步构建起覆盖全场景的智能出行服务体系。
此外,标准化的技能文档也降低了团队协作成本,新加入的开发者能够快速理解技能逻辑并参与维护,而产品和测试人员也可以依据文档明确验收标准,提升整个开发流程的效率与质量。
