为什么我不再信任 AI 代理并构建了安全执行器
Source: Dev.to
引言
每个关于构建 AI 代理的教程几乎都会出现下面这句话的某个版本:
“添加一个系统提示,告知模型不要访问敏感数据。”
我遵循了这条建议一段时间,随后意识到我在让一个概率文本预测模型去强制执行安全边界。这不是安全——而是乐观。
AI 代理会以可预测、已有文档记录的方式失败:
- 工具误用 —— 代理调用了不该调用的工具。
- 通过工具输出进行提示注入 —— 代理浏览网页、调用工具后被欺骗。
- 机密泄露 —— API 密钥、令牌和个人身份信息会通过工具的输入输出泄露。
- 费用无限制 —— 代理陷入循环或出现错误时会产生无限费用。
这些并非新奇的攻击手段,而是任何生产系统都必须处理的乏味、可预测的失效模式。问题不在模型本身——它正是按设计那样工作。安全需求必须在确定性的代码中强制执行,而不是在模型的提示中。
Argus 的核心思想是让大语言模型(LLM)运行在一个强制安全的环境中,所有工具调用都必须经过代码审查。
Argus 的工作原理
在 Argus 中,每一次工具调用都会先经过 SecurityGateway,随后才会执行。
# Before the tool runs:
gateway.pre_tool_call(
tool_name="read_file",
arguments={"path": "/etc/passwd"},
agent_role="executor"
)
# The tool runs (or doesn’t, if blocked)
# After the tool returns:
gateway.post_tool_call(
tool_name="read_file",
result=tool_output,
agent_role="executor"
)
每一次调用会按顺序执行五项检查:
- 权限强制 —— 使用 Casbin(RBAC + ABAC)。每个代理角色都有明确的权限。
- 提示注入检测 —— 对照 14 条 OWASP LLM01:2025 模式进行匹配。
- 机密信息脱敏 —— 检测并剥离 API 密钥、令牌和个人身份信息。
- 外发验证 —— 对出站请求进行声明的白名单检查。
- 审计日志 —— 无论是被允许还是被阻止的调用,都会写入审计日志。
与 LangChain 的集成
from argus.adapters.langchain import wrap_tools
from argus.security.gateway import SecurityGateway, GatewayConfig
from argus.security.audit.daemon import AuditDaemon
from argus.security.audit.logger import AuditLogger
with AuditDaemon(socket_path="/tmp/audit.sock", log_path="audit.jsonl") as daemon:
audit_logger = AuditLogger("/tmp/audit.sock")
gateway = SecurityGateway(config=GatewayConfig(), audit_logger=audit_logger)
safe_tools = wrap_tools(your_tools, gateway=gateway, agent_role="executor")
适配器使用 代理模式(而非回调),确保每一次工具调用都通过网关路由。
费用上限
Argus 包含一个费用追踪器,利用 LiteLLM 响应中的真实 token 计数,使你能够设置硬性上限——当预算超出时自动中止执行。
安装
pip install git+https://github.com/yantandeta0791/argus
安装后可使用 argus demo 命令快速运行演示。
Argus 不能解决的事项
- Argus 在 工具边界 强制安全;它并不会让模型本身更聪明。
- 它 不 替代良好的系统提示设计。精心构造的提示仍能降低不良行为的概率。
可以把 Argus 看作 纵深防御:稳固的提示 + 强制的工具层安全 = 更可靠的代理。
未来方向
该仓库托管于 . 如果你在生产环境中遇到真实的代理安全事件,作者欢迎你提交评论或 issue,描述这些情景。