ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Agent Control Specification(ACS)深度指南:AGT 5.0 统一策略决策层的设计、部署与接入实战

Agent Control Specification(ACS)深度指南:AGT 5.0 统一策略决策层的设计、部署与接入实战 Agent Control SpecificationACS深度指南AGT 5.0 统一策略决策层的设计、部署与接入实战【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkitACSAgent Control Specification是 Agent Governance ToolkitAGT5.0 的统一策略层一个无状态、确定性、fail closed 的 Agent 安全策略决策运行时以一份清单manifest声明输入、模型、工具、输出全生命周期的策略绑定由宿主在既定干预点提交完整 JSON 快照换取归一化裁决。本文以policy-engine/下的 README 与 规范文档 为骨架结合仓库源码与示例讲解 ACS 的核心模型、清单字段、八个干预点、裁决语义、注释器、信息流控制、可观测性与 SDK 接入方法读完即可把一个 Agent 循环完整纳入 ACS 治理。为什么需要一个统一策略层Agent 不再只生成文本——它会检索数据、调用工具、跨系统执行动作。治理问题因此变成谁来决定 Agent 被允许做什么。当前治理是碎片化的策略散落在提示词、框架钩子与应用代码里各系统执行不一致安全团队缺乏集中可见性。ACS 给 AGT 一个可移植的决策契约让策略不再散布于整个技术栈。ACS 是什么一个契约覆盖整个 Agent 循环ACS 是便携、生命周期感知的 Agent 策略契约。单一清单声明在输入、模型、工具、输出上校验什么、每个策略在何时评估、决策如何结构化与组合、为审计捕获哪些证据。AGT 宿主解析清单在每个干预点构建快照并执行返回的裁决。核心思想是一个策略工件覆盖完整 Agent 循环Input - Model - Tool Call - Tool Result - Output示例清单与字段精讲一个最小可用的清单绑定一个 Rego 策略并守护一个干预点agent_control_specification_version: 0.4.0-alpha.1 metadata: name: email-agent policies: email_policy: type: rego bundle: ./policy query: data.email_agent.verdict intervention_points: pre_tool_call: policy_target: $.tool_call.args policy_target_kind: tool_args tool_name_from: $.tool_call.name policy: id: email_policy tools: send_email: type: Tool id: send_email clearance: internal字段语义完整契约见 spec/SPECIFICATION.mdpolicy_target快照中待评估值的路径必须使用快照根$snap、$、$.name。policy_target_kind可选的描述性标签会被复制进策略输入。tool_name_from仅在pre_tool_call/post_tool_call两个工具点合法指定承载当前工具名的快照路径解析结果必须是字符串工具名不在tools目录中会以runtime_error:tool_unknownfail closed。tools投影工具元数据目录条目可携带任意字段包括clearance、security_labels。完整版的八个干预点清单可以参考 bank_agent 示例清单它把agent_startup、input、pre_model_call、post_model_call、pre_tool_call、post_tool_call、output、agent_shutdown全部绑定到同一份 Rego bundle每个点用独立的 query如data.agent_control_specification.bank_agent_rego.pre_tool_call_verdict并声明了classifier注释器——这是一个清单覆盖全生命周期的直接范例。路径语法快照如何被寻址清单中所有路径使用统一语法.name选择对象成员[n]选择零基数组元素禁止负数[name]选择含点或方括号的成员名读取不做类型强转。路径根有明确分工规范第 3 节根解析到$snap当前干预点的原始宿主快照$、$.name$snap与$snap.name的别名$pi规范策略输入$target$pi.policy_target.value$tool$pi.tool无工具投影时为null不同字段被限定使用不同根policy_target和tool_name_from只能使用快照根注释器from可使用$pi排除$pi.annotations、$target、$tool、$snap系根transform的path必须根植于$target。越界即 fail closedruntime_error:manifest_invalid/runtime_error:transform_target_forbidden。必选路径解析失败返回runtime_error:path_missing路径段遇到不兼容 JSON 类型返回runtime_error:path_type_mismatch。ACS 与 AGT 的三层集成AGT 是 ACS 决策核心周围的宿主与策略执行点PEP集成横跨三层层集成角色AGT 宿主适配器agent-os中的框架适配器拦截 Agent 循环为每个干预点构建快照、调用策略层并执行返回的裁决agt-policies桥Pythonagent_control_specification包在 AGT 宿主调用与 ACS 运行时之间做中介并归一化裁决供宿主消费ACS 原生运行时基于 Rust 核心、由 maturin 从sdk/python构建的 Python SDK执行确定性决策运行时消费原生 ACS/AGT 清单并解析 ACSextends。遗留治理文件夹发现仅通过单向的agt migrate v4-to-v5命令可用。核心属性无状态、确定性、fail closed属性运行时契约无状态运行时不保留影响后续裁决的可变状态宿主每次调用都提供完整快照确定性相同的清单、快照、模式与 dispatcher 输出必然产生相同的裁决与转换后的策略目标Fail closed运行时失败一律返回deny使用保留的运行时错误 reason且不应用任何 transform规范第 1.1 节把这些表述为 MUST 级不变式单次调用栈内传递的状态被允许影响裁决的进程级/模块级注册表不被允许warn意图被归一化为allow加warnings[]条目escalate意图被归一化为携带approval块的可提升 deny。八个干预点干预点用途agent_startup运行开始前评估 Agent/会话启动元数据inputAgent 循环开始前评估外部请求入站pre_model_call模型调用前评估模型请求消息、上下文与工具定义post_model_call宿主对模型响应采取行动前评估该响应pre_tool_call执行前评估一次具体的工具调用post_tool_call工具结果返回 Agent 或调用方前评估该结果output评估组装好的最终面向用户的响应agent_shutdown评估 Agent/会话关闭元数据与摘要pre_tool_call与post_tool_call是仅有的工具干预点也是仅有的接受tool_name_from的点。评估顺序固定规范第 6 节先解析policy_target工具点再投影工具构建带空annotations的初步策略输入按注释器名字典序收集注释构建最终策略输入调用策略 dispatcher归一化裁决最后校验并在 enforce 模式下应用 transform。任何一步失败都以匹配的保留 reason 返回deny。与上游 ACS 的差异以下行为属于 spec/SPECIFICATION.md本引擎唯一的权威契约的规范部分差异AGT 契约裁决变更移除 effects以transform裁决类型取代证据裁决与遥测携带可选 evidence 字段Cedarpolicies.type内置cedar策略类型审批清单顶层增加approval段用于升级后端配置清单解析AGT 的文件夹发现、作用域与合并在本引擎之前完成清单预解析Manifest Schema 全解块含义agent_control_specification_version非空版本字符串当前规范描述0.4.0-alpha.1metadata自由形式的清单元数据extends有序的父清单路径或 HTTPS URL供 ACS 兼容AGT 宿主提交解析后的清单policies命名策略定义支持rego、cedar、test、custom四种类型intervention_points以八个干预点名为键的封闭映射每个条目绑定一个策略tools投影工具元数据目录条目可携带任意字段含clearance、security_labelsannotators命名注释器声明类型为classifier、llm或endpointapprovalAGT 所有的升级后端配置干预点条目字段字段含义policy_target待评估值的快照路径policy_target_kind可选描述性标签复制进策略输入annotations按点声明的注释器及其from路径的 opt-in 映射policy绑定id必填可选query与宿主定义适配器字段tool_name_from仅工具干预点快照中当前工具名的路径extends的解析遵循规范第 2.2 节文件加载器把路径条目限定在顶层清单根目录树内URL 条目仅限 HTTPS、不携带环境凭证、施加有限超时/体积/重定向限制且对回环地址、RFC 1918 私网、链路本地、共享地址空间、IPv4 映射等形式的地址一律 fail closed防止 SSRF 打到云元数据端点。合并是加性的冲突定义、引用环、缺失文件、URL 拉取失败、父子版本不一致都会 fail closedintegritysha256-base64与sha25664 位十六进制摘要互斥。URL 来源清单禁止声明文件系统路径字段与主机环境密钥字段如api_key_env详见 docs/acs-retarget.md。四种策略类型策略类型运行时行为rego准备为RegoPolicyInvocation启用opafeature 且 OPA 可用时由 OPA dispatcher 执行cedar启用cedarfeature 时作为内置策略调用执行Cedar 内置 dispatcher 在启用该构建 feature 时链接 Cedar Rust cratetest固定测试替身路径仅供运行时测试非生产引擎custom宿主 dispatcher 路径由必填的adapter字符串标识一个策略绑定通过policy.id选择策略rego策略必须在绑定或定义上提供query。Cedar 策略通过policy_set内联或policy_path文件/目录给出可选entities_path、schema_path与query绑定可覆写principal/action/resource/context映射默认映射为Agent::agent id、Action::干预点名、Tool::name非工具点为PolicyTarget::kind。Cedar 授权结果映射为裁决策略作者可通过advice注解产出warn/escalate/transform形状校验见 spec/schema/cedar_advice.schema.json。工件验证与裁决结构Rust 核心暴露validate_acs_artifacts所有语言 SDK 都委托给该实现返回形状在 Rust、Python、Node、.NET 间完全一致valid加针对清单 schema、类型化 ACS 语义与 OPA Rego 解析的结构化诊断。use agent_control_specification::validate_acs_artifacts; let result validate_acs_artifacts(manifest_yaml, rego_modules, None);裁决成员成员含义decision必填值为allow、deny、warn、escalate或transformreason可选低基数代码策略输出不得使用运行时错误前缀message可选面向宿主文本transform可选仅transform决策必需evidence可选不透明证据对象传播到遥测result_labels可选标签宿主可随产出数据持久化归一化规则规范第 13 节warn归一化为allow加warnings[]条目escalate归一化为携带approval块的deny可提升 deny。输出非对象、decision缺失或非法、reason带runtime_error:前缀、transform 与 decision 不匹配、evidence非对象、result_labels非字符串数组一律runtime_error:policy_output_invalidfail closed。transform是唯一改变策略目标的决策形态body 为{path, value}path必须根植于$target运行时只替换策略目标内该位置的值绝不触碰快照、注释、投影工具或宿主状态。越界路径返回runtime_error:transform_target_forbidden无法解析或值无法设置返回runtime_error:transform_invalid。在enforce模式下宿主应用转换在evaluate_only模式下宿主校验但不应用、不返回转换后目标适合在真实流量上影子运行新策略。每次成功评估还会派生两个动作身份input_identity与enforced_identity规范策略输入的 SHA-256 摘要十六进制小写、sha256:前缀审批路径绑定到enforced_identity从机制上封堵 TOCTOU 与一次审批授权不同动作的风险。注释器Annotators核心声明注释器类型通过宿主拥有的实现分发。运行时按注释器名字典序解析每个点特定from路径到初步策略输入调用 dispatcher并把返回值只写入annotations.name绝不允许覆盖snapshot、policy_target、tool、intervention_point等根成员。注释器输出超大、畸形、或含保留前缀 reason 时以runtime_error:annotation_failedfail closed超时以runtime_error:annotation_timeoutfail closed。ACS 不内置分类器/评判引擎注释器执行总是宿主提供。集成路径参考 classifier dispatcherpolicy-engine/integrations/annotators/src/lib.rs含live_aacs_classifier.rs等示例参考 LLM judge dispatcher同上目录示例 live_llm_judge.rsLLM provider 预设指南policy-engine/docs/llm-annotator-providers.md参考 endpoint dispatcherpolicy-engine/integrations/annotators默认llmdispatcher 的 provider 预设覆盖 OpenAI 兼容 Chat Completions、Azure OpenAI、Amazon Bedrock Converse、GeminigenerateContent与 Ollama chat凭证必须来自显式清单字段或命名环境变量provider 响应须归一化为 JSON 注解后再进入策略执行畸形响应/缺凭证/缺标签一律按注释器错误 fail closed。system_prompt_file、system_prompt_url与bundle_url属已移除形态声明即runtime_error:manifest_invalid。信息流控制IFCACS 把 IFC 实现为无状态标签流策略模型宿主跟踪来源并在input.snapshot.ifc.source_labels提供源标签清单在工具目录中声明 sink 元数据。核心不做内置 IFC 检查、不存标签状态、不传播污点——宿主是状态化策略执行点。IFC 路径角色input.snapshot.ifc.source_labels宿主提供源标签的策略输入位置必须是标签字符串数组input.tool.clearance清单投影的工具 sink 许可级input.tool.security_labels清单投影的工具 sink 标签policy-engine/examples/ifc_agent可运行的 Rust Rego IFC 演示policy-engine/docs/ifc-label-flow.md标签流与宿主责任的完整设计笔记ifc_agent 清单 声明了两个工具public_egressclearance: public与trusted_archiveclearance: confidential策略通过 policy/lib/ifc.rego 里的默认格public internal confidential secret判定流向。no-write-down 规则要求 sink 许可级支配每个源标签标签不可比较或缺失/未知一律视为拒绝推荐 reason 为ifc_clearance_violation。result_labels是运行时无状态 IFC 的返回通道策略可返回描述该 sink 产出数据敏感度的标签数组宿主在数据实际产出时随数据持久化并在后续评估作为snapshot.ifc.source_labels回填——标签流跨轮次正确而不需要运行时持有状态。配套的 Cedar 实现见 policy/cedar-lib/ifc.cedar。可观测性结构化遥测与 OpenTelemetryRust 核心通过TelemetrySink发出结构化遥测事件类型包括decision、annotator_dispatch、policy_evaluation、evaluation_timing、intervention_point.transformed、annotator_failed、policy_failed。性能遥测模式wire 值Off0无外部/阶段计时事件、External1注释器分发与策略评估成本事件、Full2External 加每次评估计时。遥测默认脱敏。事件携带稳定字段reason code、错误类、动作身份、策略 id、注释器名、决策、模式、时长、证据工件、证据指针键名但绝不包含原始策略目标、工具参数、模型输出、注解负载、transform 值、证据指针 URL、密钥与个人数据。每个 SDK 都提供可插拔遥测 sink宿主无需手写审计层每次评估发出一个decision事件并收敛到同一 OpenTelemetry 契约——meteragent_control_specification下的每决策计数器acs_intervention_{allow,deny,warn,escalate,transform}_total与直方图acs_intervention_duration_ms。sink 抛错会被捕获吞掉遥测永不成为承重环节。SDKsink 安装方式OpenTelemetry sinkRustAgentControl::with_telemetry(Arcdyn TelemetrySink)内置InMemoryTelemetrySink、StdoutJsonTelemetrySink、MultiSinkOtelTelemetrySink来自agent_control_specification_otelcrate见 policy-engine/integrations/otelPythontelemetry_sink传给AgentControl与各工厂OtelMetricsTelemetrySink对opentelemetryimport-optionalNodetelemetrySink传给AgentControl与各工厂OtelMetricsTelemetrySink对opentelemetry/apiimport-optional.NETtelemetrySink传给AgentControl与各工厂OtelMetricsTelemetrySink基于 BCLSystem.Diagnostics.MetricsRust 中核心自己负责发事件装 sink 即可Python/Node/.NET 宿主层根据返回的InterventionPointResult构建事件并通过原生policy_labels访问器在构造期从完全合并后的清单读取策略 id 与注释器名。事件清单与 OTel 映射详见 policy-engine/docs/observability.md。SDK 矩阵与构建SDK原生绑定工件安装工件冒烟Rust核心引擎上的直接 Rust crate用[patch.crates-io]路径把本地.crate工件加入临时 crate从临时宿主 crate 评估一个清单Pythonmaturin 构建的 PyO3 扩展把artifacts/的 wheel 装入临时虚拟环境调用NativeRuntimeClient.from_path各跑一个 allow 与 deny 用例Nodenapi-rs/cli构建的 napi-rs 插件把artifacts/的.tgz装入临时项目调用AgentControl.fromPath各跑一个 allow 与 deny 用例.NET核心共享库上的 P/Invoke从artifacts/本地 nupkg 源恢复调用AgentControl.FromPath各跑一个 allow 与 deny 用例ACS Cargo workspace 内嵌在 AGT 顶层 Cargo workspace 中。只构建本引擎时从policy-engine/运行作用域 workspace 命令cd policy-engine cargo build --workspace cargo test --workspace同一批 crate 也可从仓库根通过包级命令触达cargo build -p agt_core_engine cargo test -p agt_core_engine目录布局路径角色policy-engine/coreRust 运行时M2 起由agent_control_specification_core更名为agt_core_engine当前为对 crates.io 上agent-control-spec的兼容层见 lib.rspolicy-engine/sdkRust、PythonPyO3、Nodenapi、.NETP/Invoke语言 SDK 绑定M4 新增 Gopolicy-engine/policy/lib存量 Rego 库与存量 Cedar 库M4 新增policy-engine/integrations参考注释器、OTEL 桥与 Rig 适配器policy-engine/spec规范派生的 ACS 文档与 JSON schemapolicy-engine/generatoracs-generateCLIpolicy-engine/examples参考宿主实现policy-engine/tests一致性、奇偶性与形式化模型资产示例合集示例演示内容bank_agent提交的核心 fixtures、规范策略输入、全生命周期点、工具点、transform以及 stdlib Python 演示run_demo.pycoding_agentRust 宿主应用、清单组合、OPA 策略、审批、脱敏与宿主侧流式聚合ifc_agent无状态 IFC 标签流Rust OPA 共享 IFC Rego 库support_agent通过transform裁决对策略目标做 PII 脱敏from_agentshield多 Agent 场景银行经理、文档 DLP、频道治理、内容审核、SQL 防护等的完整清单与 Rego 策略集保留 Reason 命名空间约定含义runtime_error:code运行时失败的保留 reason 命名空间策略不得使用该前缀。完整保留表见规范第 16 节与机器可读清单 policy-engine/spec/reserved-reasons.json包括manifest_invalid、intervention_point_unknown、path_missing、path_type_mismatch、tool_unknown、annotation_failed、annotation_timeout、policy_invocation_failed、policy_output_invalid、transform_invalid、transform_target_forbidden、resource_limit_exceeded、resolution_cycle、resolution_merge_conflict、resolution_path_traversal、resolution_invalid_governance。宿主层另有host_error:*命名空间如approval_identity_mismatch、approval_unresolved、streaming_unsupported、adapter_unsupported由agt-host产生拦截器不得发出。实战接入把 ACS 装进你自己的宿主完整的分步指南见 policy-engine/QUICKSTART.md要点如下安装 SDKRustcargo add agent_control_specificationPythonpython -m pip install agent-control-specificationNodenpm install agent-control-specification.NETdotnet add package AgentControlSpecification。前置条件为 Rust 1.85、Python 3.11、Node 18 或 .NET 8仅在清单使用rego策略且走捆绑 OPA dispatcher 时才需要opa在PATH上。声明清单如上述最小清单tool_name_from在两个工具点是必填的。编写策略写policy/my_agent.rego以default verdict : {decision: allow}兜底用条件规则返回deny含reason与message。构造运行时零配置from_path构造器Rust/Pythonfrom_path、NodefromPath、.NETFromPath自动绑定捆绑 OPA dispatcher 与清单相对 Rego bundleRego 宿主无需 dispatcher 代码。在干预点评估调用evaluate_intervention_point传干预点与快照Rust 还需传EnforcementModeEnforce/EvaluateOnlyPython/Node/.NET 通过run/enforce助手施加执行模式。执行裁决allow/warn用原策略目标继续deny阻断并呈现reason/messageescalate挂起并走审批解析器transform只用返回的转换后策略目标继续脱敏是典型场景核心绝不会在allow/warn/deny/escalate下改写目标。守护整个循环run护input/output、run_model护pre_model_call/post_model_call、run_tool/protect_tool护pre_tool_call/post_tool_call等编排助手把评估、执行、transform 应用与审批打包成一次调用。验证集成在临时宿主项目里跑一个 allow 与一个 deny 冒烟设置AGENT_CONTROL_REQUIRE_OPA1让本地 CI 奇偶校验中的 OPA 测试大声失败而非跳过跨 SDK 奇偶 fixtures 位于 policy-engine/tests。想开箱即得有效工件而不是手拼清单时可用引导生成器acs-generate init --non-interactive --name Demo Agent --points input,pre_tool_call,output --tool send_email:internal --deny-keyword secret --escalate-tool send_email --sample-snapshot --out build/demo-acs它会写出清单、Rego 策略、报告与可选样本快照--strict让本地 OPA 校验与 CI 对齐。生成后用带extends的子清单做加性演进——子清单可加元数据键、策略、注释器、工具或新干预点但不能以不同值替换既有干预点的策略、目标或tool_name_from文件级extends必须留在顶层清单根内如base/manifest.yaml。归属与许可证项目值原始 ACS 许可证保留于 policy-engine/LICENSE.acs覆盖源自上游 Agent Control Specification 项目的规范、schema 与一致性文件policy-engine/spec与policy-engine/tests本引擎不再在仓库内 vendored而是 crates.io 上的agent-control-speccrateMIT 许可当前锁定 0.4.0-alpha.3清单版本保持 0.4.0-alpha.1状态 Draft正式发布前建议精确锁定版本。本目录代码按仓库根LICENSE的 MIT 许可发布LICENSE.acs是仍携带上游文本的规范/schema/一致性文件的上游声明。安全边界与宿主义务的完整讨论见 policy-engine/docs/security-model.md无状态运行时契约见 policy-engine/docs/stateless-runtime.md。【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表