用 OpenAgent Definition(OAD)为 AI Agent 定义标准接口:agent-governance-toolkit 元数据清单系统实战
【免费下载链接】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
本文围绕 agent-governance-toolkit 仓库中
self-evaluating示例的 OpenAgent Definition(OAD)实现展开:OAD 是一套面向 AI Agent 的接口定义语言(IDL),其定位类似 Swagger/OpenAPI 之于 REST API。文章会从问题动机、数据模型、DoerAgent 集成、测试验证、使用模式到未来演进,完整讲解如何用 Capabilities、Constraints、IO Contract、Trust Score 四要素为 Agent 建立可发现、可组合、可信赖的标准接口。
背景:为什么 Agent 需要自己的 "OpenAPI"
在传统的单体 Agent 时代,开发者常被告知:"直接读 system prompt 就能知道 Agent 能做什么。" 这在单个 Agent 的场景下尚可接受,但当 Agent 生态走向市场化和规模化时,这条路径立刻失效:
- 从市场(Marketplace)拉取一个专用 Agent(例如 "GitHub Coder" 或 "OpenAI Analyst")时,我们无法靠猜测来得知如何与它对话;
- 多个 Agent 需要协作时,彼此的输入输出没有可校验的契约;
- 平台方无法对 Agent 的能力声明、性能表现进行客观比较与审计。
这正是 OpenAgent Definition(OAD)要解决的问题。在 IMPLEMENTATION_SUMMARY_OAD.md 中,OAD 被定义为 "AI 的 USB 接口时刻"——谁定义了标准 Agent 协议,谁就赢得平台之争。其核心是要求生态中的每个 Agent 发布一份Metadata Manifest(元数据清单),包含四类信息:
| 要素 | 含义 | 示例 |
|---|---|---|
| Capabilities(Can-Do) | Agent 能做什么 | "我能编写 Python 3.9 代码,我能解析 CSV" |
| Constraints(Won't-Do) | Agent 不能/不会做什么 | "我没有联网能力,我有 4k token 上限" |
| IO Contract | 输入输出契约 | "我接收 CodeContext 对象,返回 Diff 对象" |
| Trust Score | 性能与可靠性指标 | "我的代码编译通过率 95%" |
数据模型:dataclass 驱动的五类核心对象
OAD 的完整实现位于 src/agent_metadata.py,全部采用 Python@dataclass设计,以获得类型安全、自动__init__与干净的序列化能力。整个模块共 565 行,定义了 5 个数据类和 1 个管理类。
1. Capability:能力声明
@dataclass class Capability: name: str description: str tags: List[str] = field(default_factory=list) version: Optional[str] = None def to_dict(self) -> Dict[str, Any]: return asdict(self)tags用于能力检索与过滤(如["math", "calculations"]),version用于能力级版本管理。
2. Constraint:限制声明
@dataclass class Constraint: type: str # 例如 "access"、"resource"、"security" description: str severity: str = "high" # "low" / "medium" / "high"severity字段会在后续的兼容性校验中被读取:高严重度约束会触发validate_compatibility()的告警,相当于给编排器一个"此 Agent 受限较大"的信号。
3. IOContract:输入输出契约
@dataclass class IOContract: input_schema: Dict[str, Any] output_schema: Dict[str, Any] examples: List[Dict[str, Any]] = field(default_factory=list)input_schema与output_schema直接复用 JSON Schema 风格的字典结构(type、properties、required、enum等),这使得 OAD 与既有 API 工具链天然兼容;examples提供可执行的示例对,方便下游消费方理解与测试。
4. TrustScore:真实性能指标
@dataclass class TrustScore: success_rate: float # 0.0 ~ 1.0 avg_latency_ms: Optional[float] = None total_executions: int = 0 last_updated: str = field(default_factory=lambda: datetime.now().isoformat()) metrics: Dict[str, Any] = field(default_factory=dict)metrics是开放扩展点,可放入任意自定义指标,例如默认清单中的code_compilation_rate、task_completion_rate、user_satisfaction等。
5. AgentMetadata:清单容器
@dataclass class AgentMetadata: agent_id: str name: str version: str description: str capabilities: List[Capability] = field(default_factory=list) constraints: List[Constraint] = field(default_factory=list) io_contract: Optional[IOContract] = None trust_score: Optional[TrustScore] = None metadata: Dict[str, Any] = field(default_factory=dict) created_at: str = field(default_factory=lambda: datetime.now().isoformat()) updated_at: str = field(default_factory=lambda: datetime.now().isoformat())容器暴露的领域方法(均在每次变更时刷新updated_at):
add_capability(name, description, tags=None, version=None)add_constraint(type, description, severity="high")set_io_contract(input_schema, output_schema, examples=None)set_trust_score(success_rate, avg_latency_ms=None, total_executions=0, metrics=None)update_trust_score(success, latency_ms=None):核心动态指标更新逻辑to_dict()/to_json(indent=2)/from_dict()/from_json():完整序列化链路
6. AgentMetadataManager:清单生命周期管理
AgentMetadataManager负责清单的加载、保存与发布,默认清单文件名为agent_manifest.json:
load_manifest():从磁盘读取,文件不存在或 JSON 损坏时返回None;save_manifest(metadata):写入磁盘(indent=2 的可读 JSON);create_manifest(agent_id, name, version, description):内存中新建;get_manifest():若内存为空则自动触发load_manifest();publish_manifest():返回{"status": "published", "manifest": {...}, "published_at": ISO时间戳}——在生产系统中此方法应对接市场或注册中心;discover_agents(capability_filter=None):按能力过滤的发现接口(当前为演示级 mock 实现,会返回当前清单中能力名列表);validate_compatibility(other_manifest):与另一份清单做兼容性校验,返回{"compatible": bool, "warnings": [...], "errors": [...]}。
validate_compatibility的现有逻辑(可从 src/agent_metadata.py 查看)做两件事:一是对比本地output_schema与目标input_schema是否一致(不一致给出 warning),二是对本地的 high 严重度约束给出提示。源码注释也明确指出,生产环境应替换为深度 schema 校验。
7. 默认清单工厂:create_default_manifest
模块还提供create_default_manifest()工厂函数(src/agent_metadata.py),为示例中的自演化 Agent 生成开箱即用的完整清单,包含:
- 4 项能力:
mathematical_calculations、time_queries、string_operations、self_improvement; - 4 项约束:无直接联网(high)、4096 token 上限(medium)、禁止任意 shell 命令(high)、执行期只读文件系统(medium);
- 完整的 IO 契约:输入为
{query, user_id?, conversation_id?}(query必填),输出为{response, instructions_version, telemetry_emitted},并附带 2 条输入输出示例; - 初始信任分:
success_rate=0.95、avg_latency_ms=1200.0,以及编译通过率、任务完成率、用户满意度等扩展指标。
这份默认清单的价值在于"开箱即用":任何 Agent 即使不手写元数据,也能立即获得一份符合 OAD 格式的清单。
Trust Score 动态更新:真实指标而非营销话术
OAD 设计的关键原则之一是"信任分必须反映真实执行表现,而非营销宣传"。update_trust_score()采用**运行平均(running average)**算法:
total = self.trust_score.total_executions current_rate = self.trust_score.success_rate new_success_value = 1.0 if success else 0.0 self.trust_score.success_rate = (current_rate * total + new_success_value) / (total + 1) self.trust_score.total_executions += 1 # 平均延迟同理:(current_avg * total + latency_ms) / (total + 1)该算法在 tests/test_agent_metadata.py 中有精确断言:初始success_rate=0.5, total_executions=2,追加一次成功与一次失败(延迟分别为 1000ms 与 2000ms)后,avg_latency_ms必须等于(1000*3 + 2000*1)/4 = 1250.0——这说明更新逻辑对"历史权重"的处理是可复现、可验证的。
与 DoerAgent 的集成:零改动获得 OAD 能力
OAD 系统的价值在 src/agent.py 中通过DoerAgent得到了直接体现。DoerAgent新增了两个可选参数:
def __init__(self, ..., enable_metadata: bool = True, # 默认开启 manifest_file: str = "agent_manifest.json"):初始化时的集成流程(src/agent.py):
- 若
enable_metadata=True,创建AgentMetadataManager(manifest_file); - 尝试
load_manifest();若磁盘上没有现成清单,则调用create_default_manifest(agent_id="doer-agent", name="Doer Agent (Self-Evolving)", version="1.0.0")并保存——实现"开箱即得 OAD"; - 若导入失败(如缺少依赖),打印警告并优雅降级
enable_metadata=False,不影响 Agent 其余功能——体现"可选集成、向后兼容"的设计决策。
每次run()执行结束后(src/agent.py),Agent 会:
success = not agent_response.startswith("Error") # 以"Error"开头视为失败 metadata = self.metadata_manager.get_manifest() if metadata: metadata.update_trust_score(success=success, latency_ms=latency_ms) self.metadata_manager.save_manifest(metadata)即每次执行都会把真实结果与延迟写回清单,让 Trust Score 随使用持续演化。对外暴露的两个新方法:
get_metadata_manifest():返回AgentMetadata.to_dict()形式的完整清单(src/agent.py);publish_manifest():委托给AgentMetadataManager.publish_manifest(),在真实系统中将注册到市场或注册中心(src/agent.py)。
完整清单的 JSON 形态
一份发布态的 OAD 清单最终落地为agent_manifest.json,其标准结构如下(完整示例见 docs/OPENAGENT_DEFINITION.md):
{ "agent_id": "self-evolving-agent", "name": "Self-Evolving Agent", "version": "1.0.0", "description": "A self-evolving AI agent...", "capabilities": [ { "name": "mathematical_calculations", "description": "Can evaluate mathematical expressions", "tags": ["math", "calculations"], "version": "1.0" } ], "constraints": [ { "type": "resource", "description": "No direct internet access", "severity": "high" } ], "io_contract": { "input_schema": { "type": "object", "properties": { "query": {"type": "string"} } }, "output_schema": { "type": "object", "properties": { "response": {"type": "string"} } } }, "trust_score": { "success_rate": 0.95, "avg_latency_ms": 1200.0, "total_executions": 1547, "metrics": { "code_compilation_rate": 0.95 } } }JSON 作为统一交换格式的原因在 IMPLEMENTATION_SUMMARY_OAD.md 中被明确总结:通用、人类可读、工具友好,便于共享、解析并集成到既有系统。
五种实战用法:从单 Agent 到流水线
用法 1:带元数据的基础 Agent
from agent import DoerAgent # Agent 自动发布 OAD 清单(enable_metadata 默认为 True) doer = DoerAgent(enable_metadata=True) # 获取清单 manifest = doer.get_metadata_manifest() print(f"Agent: {manifest['name']}") print(f"Trust: {manifest['trust_score']['success_rate']:.1%}") # 运行任务后,信任分会自动更新 result = doer.run("What is 10 + 20?")用法 2:自定义元数据
from agent_metadata import AgentMetadata, AgentMetadataManager # 创建自定义元数据 metadata = AgentMetadata( agent_id="custom-agent", name="Custom Agent", version="1.0.0", description="Specialized agent" ) metadata.add_capability("custom_feature", "Does custom thing") metadata.add_constraint("resource", "Custom limitation", "high") # 保存并发布 manager = AgentMetadataManager() manager.save_manifest(metadata) manager.publish_manifest()用法 3:Agent 发现与选择
# 按能力在市场中发现 Agent agents = marketplace.search(capability="python_code_generation") # 按信任分比较,选出最优 best = max(agents, key=lambda a: a.trust_score.success_rate) # 使用选中的 Agent result = best.run(task)用法 4:流水线组合
# 加载各 Agent 清单 agent1 = load_agent("data-fetcher") agent2 = load_agent("data-transformer") agent3 = load_agent("report-generator") # 校验 IO 兼容性(output 应匹配下游 input) validate_pipeline([agent1, agent2, agent3]) # 执行流水线 data = agent1.run(url) transformed = agent2.run(data) report = agent3.run(transformed)组合场景的典型契约链(docs/OPENAGENT_DEFINITION.md 中给出):
- Data Fetcher 输出
{"data": [...], "format": "json"}; - Data Transformer 输入
{"data": [...], "format": "..."}、输出{"cleaned_data": [...], "summary": {...}}; - Report Generator 输入
{"cleaned_data": [...], "summary": {...}}、输出{"report": "...", "format": "pdf"}。
由于每段的输入 Schema 恰好是上一段的输出 Schema,这条链可以在运行时之前就被静态校验通过。
运行演示与测试验证
环境准备
示例位于 examples/self-evaluating,依赖极简,见 requirements.txt:
pip install -r requirements.txt核心仅两个依赖:openai>=1.0.0与python-dotenv>=1.2.2。若需以包方式安装,可使用 setup.py(pip install -e .,要求 Python >= 3.8)。
测试验证
单元测试(无需 API Key):
python tests/test_agent_metadata.py测试文件 tests/test_agent_metadata.py 共 497 行,覆盖 19 个用例,19/19 全部通过,覆盖点包括:
- ✓ Capability、Constraint、IOContract、TrustScore 的创建与
to_dict - ✓ AgentMetadata CRUD 操作
- ✓ 添加能力与约束
- ✓ 设置 IO 契约与信任分
- ✓ 动态信任分更新(含加权平均的精确断言)
- ✓ JSON 序列化/反序列化(
to_dict/from_dict、to_json/from_json) - ✓ Manager 操作(create、save、load、get 自动加载)
- ✓ 清单发布(
publish_manifest返回published状态) - ✓ 兼容性校验(
validate_compatibility) - ✓ 默认清单创建(校验特定能力与约束的存在)
集成测试(需要 API Key):
python -c "from agent import DoerAgent; ..."验证 DoerAgent 元数据集成、清单创建与加载、信任分自动更新。
演示示例:
python examples/example_agent_metadata.pyexample_agent_metadata.py 共 497 行,串行演示 5 个场景:
- 基础清单创建:为 "GitHub Coder Agent" 定义 3 项能力(python_code_generation、git_operations、code_review)、3 项约束(access/resource/security 类型)、带
enum的 IO 契约与含code_compilation_rate等指标的信任分; - 市场发现:模拟 3 个候选 Agent,按 "python" 能力关键字过滤出匹配项并展示信任分;
- Agent 组合:构建 Data Fetcher → Data Transformer → Report Generator 三段流水线,用
output_schema与input_schema的属性键做交集校验,输出每段的兼容性结论; - 信任分动态更新:初始 success_rate=0.80,模拟 5 次成功 + 2 次失败后展示指标实时升降;
- 持久化:保存默认清单到
demo_manifest.json,再用新 Manager 实例加载,验证跨进程/跨上下文恢复。
回归测试:
python tests/test_agent.py原有测试全部通过,确认enable_metadata采用可选集成后未破坏既有代码——这正是设计决策中"向后兼容、渐进采用"的实证。
五项关键设计决策
IMPLEMENTATION_SUMMARY_OAD.md 总结了 OAD 实现中的五项关键决策,其依据均可从源码中找到对应:
- dataclass 设计:类型安全、自动生成
__init__、序列化干净;结果就是健壮可维护、接口清晰的代码(见 src/agent_metadata.py 的 6 个 dataclass/类)。 - 信任分自动更新:信任分必须反映真实性能而非营销声明;结果是每次执行后实时更新的指标(见
DoerAgent.run()末尾的更新代码)。 - JSON 清单格式:通用、可读、工具友好;便于共享、解析、与既有系统集成。
- 可选集成:向后兼容、渐进采用;
enable_metadata默认开启但导入失败时优雅降级,旧代码不受影响。 - 默认清单创建:降低使用摩擦、提供可运行示例;Agent 开箱即得 OAD 能力(
create_default_manifest+DoerAgent初始化自动落盘)。
使用场景与收益
四个典型使用场景
- Agent 市场:按能力搜索(
marketplace.search(capability="python_code_generation"))、按信任分挑选最优(max(results, key=lambda a: a.trust_score.success_rate))、实例化使用; - 多 Agent 编排:加载 coder → reviewer → deployer 清单,先
validate_pipeline(...)再执行; - 动态 Agent 选择:按
success_rate > 0.90过滤可靠候选,再按avg_latency_ms选出最快者; - 契约强制(Contract Enforcement):消费方定义
required_contract,对 Agent 清单做validates_contract(agent_manifest.io_contract, required_contract)校验,不满足则抛出ContractViolationError。
五项核心收益
- 可发现性(Discoverability):市场可按标准格式搜索与过滤,无需"猜测"Agent 能力;
- 可组合性(Composability):IO 契约保证 Agent 能协作,运行时之前即可校验兼容性,从而放心构建复杂流水线;
- 透明性(Transparency):能力与约束清晰声明,性能指标真实可见;
- 标准化(Standardization):跨 Agent 的统一格式、平台无关协议,是 Agent 生态的基础;
- 信任(Trust):真实指标而非营销话术,动态更新、可客观对比。
未来演进方向
IMPLEMENTATION_SUMMARY_OAD.md 与 docs/OPENAGENT_DEFINITION.md 共同描绘了 OAD 的演进蓝图:
- Agent 注册中心/市场:清单的集中仓库、搜索与发现 API、Agent 版本管理与更新;
- 高级兼容性检查:深度 schema 校验、自动适配器生成、兼容性评分计算;
- Agent 认证:验证能力声明、校验约束、对信任分做基准评测;
- 组合工具:可视化流水线构建器、自动 Agent 选择、性能优化;
- 多 Agent 协议:标准通信模式、Agent 协商协议、协作任务执行。
总结
OpenAgent Definition 在 agent-governance-toolkit 的 self-evaluating 示例 中已交付一套完整且经过测试的实现:
- 定义 Agent 能力与约束(Capabilities / Constraints);
- 标准化 Agent 接口(IO Contract);
- 支持 Agent 发现与组合(Marketplace / Pipeline);
- 提供真实性能指标(Trust Score 动态更新);
- 为 Agent 市场奠定基础。
当前状态:✅ 完整且已测试。原问题陈述中的全部需求均已落地——Capabilities(Can-Do)、Constraints(Won't-Do)、IO Contract、Trust Score 四要素齐备,19/19 测试通过、5 个示例可用、DoerAgent 零破坏集成。这套系统即为 AI Agent 提供的 "USB 接口":它让任何 Agent 都能以统一格式被描述、被发现、被组合、被审计,也为平台方提供了构建 Agent 生态的标准基石。读者可以基于 src/agent_metadata.py 与 tests/test_agent_metadata.py 直接上手实践,并结合 docs/OPENAGENT_DEFINITION.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),仅供参考