智能体可以使用 Model Context Protocol (MCP) 服务器、企业 API 或自定义脚本访问众多工具。如果让代理一次接触大量工具说明,可能会导致上下文膨胀,从而增加令牌费用和延迟时间,并降低 LLM 的推理性能。
为了优化性能,您可以使用代理技能(一种用于打包工具和程序说明的标准)来实现工具的逐步公开。智能体不会将整个工具目录都放在上下文中,而是最初只接触一小部分技能。LLM 会指示代理在相关时动态加载特定技能软件包。
管理技能生命周期
由于加载和管理技能使用工具调用,因此语义治理政策可以管理整个技能生命周期。如果您的代理是使用 Google 代理开发套件 (ADK) 构建的,则它会使用以下核心工具来管理技能:
| ADK 技能工具 | 说明 |
|---|---|
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'])等工具调用时,语义治理政策会检查参数。由于malicious-agent-helper不在许可名单中,因此政策会发布DENY判定,在执行之前阻止该操作。
后续步骤
- 在使用语义治理政策的最佳实践中,了解如何制定有效的规则。
- 在配置语义治理政策中配置政策。