智能体可以使用 Model Context Protocol (MCP) 服务器、企业 API 或自定义脚本来访问多种工具。如果让代理一次性接触大量工具说明,可能会导致上下文膨胀,从而增加 token 成本和延迟,并降低 LLM 的推理性能。
为了优化性能,您可以使用 Agent Skills(一种用于打包工具和程序说明的标准)来实现工具的逐步公开。智能体最初只会接触到一小部分技能,而不是将整个工具目录都放在上下文中。当 LLM 认为某个技能包相关时,会指示代理动态加载该技能包。
管理技能生命周期
由于加载和管理技能使用工具调用,因此语义治理政策可以管理整个技能生命周期。如果您的代理是使用 Google 代理开发套件 (ADK) 构建的,则它会使用以下核心工具来管理技能:
| ADK Skill 工具 | 说明 |
|---|---|
list_skills |
向模型显示所有可用的技能包。 |
load_skill |
将特定技能及其关联的工具动态导入到当前上下文。 |
load_skill_resource |
检索技能运行所需的数据或资源。 |
run_skill_script |
执行技能中定义的底层逻辑。 |
语义治理政策会拦截这些技能管理工具调用,并根据您的自然语言限制条件 (NLC) 对其进行评估。这样,您就可以应用限制来控制在特定条件下加载哪些技能。
示例:技能和工具生命周期政策
以下示例展示了语义治理政策如何在技能生命周期内防范安全风险,例如指令注入或供应链入侵。
防止在受污染的会话中加载工具
场景:智能体已获得加载和运行技能的授权。管理员希望防止代理加载执行出站操作的工具,前提是聊天记录包含可能包含注入指令的不受信任的上下文。例如,智能体可能会在抓取网页内容后加载 send_email 工具。
- 限制: “如果当前对话历史记录包含从入站电子邮件、网页或上传的文档中提取的内容,则不加载任何可以发送消息或写入外部系统的技能。”
- 逻辑:当 LLM 提议调用
load_skill(skill_name='send_email')时,语义治理政策会检查对话记录。如果之前的对话轮次提取了不受信任的数据(例如电子邮件内容),则该政策会拒绝load_skill调用。因此,该技能中打包的出站工具在相应会话期间永远不会对客服人员可用。
限制依赖项安装(供应链)
场景:开发代理使用技能来安装软件包。有权访问技能库的攻击者修改了指令,使其始终安装恶意软件包以及所请求的依赖项。
- 限制: “仅允许 npm_install 工具针对已获批列表中的软件包(即 react、express、lodash 或 axios)运行。”
- 逻辑:当 LLM 提出
npm_install(packages=['lodash', 'malicious-agent-helper'])等工具调用时,semantic governance policy 会检查参数。由于malicious-agent-helper不在许可名单中,因此该政策会发布DENY判定,在执行之前阻止该操作。
后续步骤
- 如需了解如何制定有效的规则,请参阅使用语义治理政策的最佳实践。
- 在配置语义治理政策中配置政策。