AURA 0.3.6 为现有 Agent 栈提供运行时治理,涵盖循环检测、个人敏感信息脱敏、密钥代理及参数校验。它针对重复调用耗尽预算、日志泄露隐私和提示词暴露凭证等生产问题。
为什么生产环境中的 LLM Agent 会陷入循环、泄露 PII、烧光预算?AURA 0.3.6 又是如何在不侵入现有 Agent 技术栈的前提下,为其加入运行时治理的?
如果你已经把自主 Agent 部署到生产环境,多半遇到过下面至少一种悄无声息的灾难:
**凌晨 3 点的死循环:**Agent 遇到了意料之外的 API 响应,于是稍微调整参数,反复调用同一个工具,最终陷入两个状态之间的来回振荡($A \leftrightarrow B$)。等到硬性超时触发时,已经烧掉了 200 美元的 OpenAI token 费用。
**追踪日志中的 PII:**Agent 在处理客户查询时,取回了一条未经脱敏的数据库记录,其中包含社会安全号码(SSN)或信用卡号,然后直接把原始文本写进集中式遥测系统或 LLM 的上下文窗口。
**密钥泄露:**为了调用 API,系统把原始 bearer token 或 AWS secret key 放进 LLM 的 prompt 上下文。一次 prompt injection,就足以让这个 token 泄露。
**Schema 漂移:**模型幻觉出了不合法的参数类型,导致下游工具执行崩溃,却没有留下审计记录来说明请求数据为什么校验失败。
大多数 Agent 框架,无论是 LangGraph、CrewAI、AutoGen,还是自定义的 while True: 循环,关注的都是编排和推理。它们的设计目标是让 Agent 跑起来。
但它们很少在设计时就考虑:如何在边界上治理运行时行为。
这正是 AURA Harness 要解决的问题。
AURA 是一个开源的 Python 运行时封装层,用来包裹 Agent 循环。
它不会替换你的框架、编排器或模型,也不需要你用一套新的 DSL 重写 Agent。AURA 就像一层膜,守在 Agent 的边界上:
**Ingress(入口):**注入经过验证的操作人员上下文,以及已声明的会话变量。
**Egress(出口):**在调用执行之前,落实工具策略、Schema 校验和凭证代理。
**Observers(观察器):**基于一条只追加的因果事件主链,并行监控执行轨迹。
**Audit(审计):**在会话关闭时,生成通过 SHA-256 哈希链串联、可检测篡改的 JSONL 审计凭据。
今天,我们发布了 v0.3.6。下面逐一介绍新功能,以及这些模式为什么值得每一位构建可靠 Agent 系统的开发者关注。
重复调用工具并不总是坏事。对于一个长时间运行的研究型 Agent,在 40 轮交互中调用 15 次 web_search,完全是正常行为。
粗粒度的全局限流器往往不起作用:它们会误拦正常会话,却漏掉危险的局部死锁。
在 AURA 0.3.6 中,break observer preset 已升级,支持基于滑动窗口的轨迹局部性分析($K=8$),以及多种循环拓扑检测:
from aura.api import agent
# Declare agent governance policy
bot = agent(
"support-investigator",
observers=[
{
"preset": "break",
"config": {
"window_size": 8,
"max_identical_actions": 3, # 1-cycle: A -> A -> A
"max_oscillation_cycles": 2, # 2-cycle: A <-> B <-> A <-> B
"max_choreography_cycles": 2, # 3-cycle: A -> B -> C -> A -> B -> C
"max_error_churn": 3, # Identical error fingerprint churn
"thought_similarity_threshold": 0.85, # Reasoning inertia (>85% text match)
"burn_velocity_guard": True, # FinOps token tracking
"max_cycle_token_waste": 1500, # Trip alert on token threshold
"action": "pause", # alert_only | pause | circuit_break
},
}
],
)
它在实际运行中能捕捉到这些问题:
**动作固着(单状态循环):**Agent 因为没理解上一次的输出,连续 3 次使用完全相同的参数执行同一个工具。
**状态振荡(双状态循环):**Agent 陷入来回切换的陷阱。例如,执行 git status、暂存改动、检查状态、恢复暂存的改动,然后不断重复。
**执行编排循环(三状态循环):**多个步骤形成循环($A \to B \to C \to A \to B \to C$)。例如,反复搜索、编辑文件、运行测试,而测试每次都以完全相同的模式失败。
**推理惯性:**模型的思考停滞不前,不断生成实质相同的推理文本,相邻轮次的文本相似度超过 85%,却没有取得进展。
**FinOps token 防护:**AURA 会跟踪重复序列中的 token 消耗。如果某个循环的消耗超过设定阈值,就会立即触发 burn_rate_spike 告警。
**EU AI Act 第 14 条所需的密码学证明:**告警触发时,AURA 会将主链上不可变的 SHA-256 事件哈希(cycle_entry_hash、cycle_recurrence_hash)直接写入告警数据,为合规审计人员提供算法死锁的不可抵赖证明。
在 GDPR、HIPAA 和 CCPA 的要求下,把敏感客户数据发送给第三方模型提供商,会带来棘手的合规问题。
AURA 0.3.6 引入了两层 PII 脱敏引擎,既可以在步骤边界运行,也可以作为流水线中显式声明的操作:
from aura.api import agent
data_agent = agent(
"data-sanitizer",
sequencer={
"steps": [
{"id": "fetch_record", "tool": "db.get_customer"},
{
"id": "mask_pii",
"type": "op",
"ref": "middleware.pii_mask",
"config": {
"strategy": "pseudonymize", # redact | mask | pseudonymize
"entities": ["EMAIL_ADDRESS", "PHONE_NUMBER", "CREDENTIAL_TOKEN"],
"strict": False,
},
},
{"id": "llm_summary", "tool": "ai.summarize"},
]
},
)
除了直接将内容替换为 [REDACTED],AURA 还可以生成确定性的、仅在当前会话内有效的假名 token,例如 EMAIL_PSEUDO_a1b2c3d4。
这样,多轮推理中就能保留实体的对应关系:LLM 知道第 1 轮中的客户 A 和第 4 轮中的客户 A 是同一个人,却始终看不到客户 A 的真实邮箱地址。
**第 1 层(内置,零依赖):**采用正则匹配和算法校验,支持通过 Luhn 校验识别信用卡号,以及识别符合 RFC 的邮箱地址、E.164 电话号码、SSN、IPv4/IPv6 和 API key。
**第 2 层(可插拔):**可选接入具备上下文识别能力的 NER 模型提供方,例如 Presidio、Skillware 或自定义模型。
Agent 设计中一个常见的反模式,是直接把原始 API key 提供给模型,或者指示模型从环境变量中读取密钥。
在 AURA 0.3.6 中,Agent 声明 capability 时只使用密钥引用,绝不使用原始密钥:
from aura.api import agent, EnvSecretBroker
# Environment holds the real token, but the agent profile only knows the ref
agent_profile = agent(
"stripe-billing-bot",
capabilities=[
{
"id": "billing_charge",
"tools": ["stripe.charge"],
"inject": [
{
"ref": "STRIPE_SECRET_KEY",
"as": "headers.Authorization",
"prefix": "Bearer ",
}
],
}
],
)
broker = EnvSecretBroker()
with agent_profile.session(secret_broker=broker) as run:
# The agent emits tool intent without credentials
run.emit("tool.call", {"tool": "stripe.charge", "args": {"amount": 5000}})
# Egress injects the Authorization header right before execution.
# The spine, summary, and exported OTel spans automatically redact the secret.
模型始终看不到 API key,prompt 中始终不包含 token,导出的审计日志也会自动脱敏所有密钥值和敏感字段名。
当 Agent 调用外部工具时,意料之外的参数格式可能导致静默失败,或破坏下游数据库中的数据。
AURA 0.3.6 支持在 egress 边界执行声明式 JSON Schema 检查:
# Profile configuration
variables:
schema_refs:
sql_query:
type: object
required: [query, timeout_seconds]
properties:
query:
type: string
pattern: "^SELECT " # Enforce read-only queries at schema level
timeout_seconds:
type: integer
maximum: 30
如果 Agent 发出了未经允许的 INSERT,或者遗漏了 timeout_seconds 参数,AURA 的边界膜就会以 constraint.violated 阻止执行,在审计报告中记录一条 SCHEMA_VIOLATION,避免这次调用触达生产基础设施。
用 AURA 包裹任意工作流,就是这么简单:
from aura.api import agent
# 1. Define agent with break observer and spectrum level
my_agent = agent(
"autonomous-devops",
spectrum={"level": "full"}, # Auto-wires monitor & break observers
)
# 2. Run your existing agent loop inside an AURA session coat
with my_agent.session() as session:
session.emit("turn.start", {"thought": "Investigating disk space on server..."})
# Tool call guarded by egress constraints and cycle observers
session.emit("tool.call", {"tool": "exec_cmd", "args": {"cmd": "df -h"}})
session.emit("tool.result", {"tool": "exec_cmd", "result": "/dev/sda1 92% full"})
session.emit("turn.end", {"summary": "Disk space critical on sda1"})
# 3. Session closes atomically:
# - Generates tamper-evident SHA-256 hash-chained JSONL trail
# - Generates structured audit report with findings and scorecard
# - Exports OpenTelemetry spans for Datadog / Honeycomb
会话关闭时,AURA 会生成一份审计报告:
{
"verdict": "pass",
"scorecard": {
"policy": { "declared_rules": 2, "violations": 0 },
"observers": { "alerts": 0, "loop_cycles": 0 },
"middleware": { "applied": 1, "pii_redactions": 2 }
},
"findings": [],
"hash_chain_valid": true
}
**AI 工程团队:**希望获得循环防护、限流和 egress 控制,同时继续使用自己喜欢的 Agent 框架。
**FinOps 与平台负责人:**无法承受 Agent 在失控的推理循环中,一夜烧掉数千美元。
**合规与安全团队:**需要不可抵赖的审计轨迹、PII 清理和凭证隔离,以满足 SOC 2、HIPAA 或 EU AI Act 对人工监督的要求。
AURA 采用 MIT 许可证,已在 PyPI 发布:
pip install aura-harness==0.3.6
GitHub 仓库:github.com/ARPAHLS/aura
文档:github.com/ARPAHLS/aura/tree/main/docs
示例(14 个完整导览):github.com/ARPAHLS/aura/tree/main/examples
如果你正在构建自主 Agent,不妨试试,也欢迎告诉我们:你在实际运行中遇到了哪些循环模式!
如需进一步采取措施,你可以考虑屏蔽此人和/或举报滥用行为。