AgentCard
AgentCard 是一个描述 Agent 能力的 JSON 文件,充当 Agent 的"名片"。它使得客户端(或其他 Agent)能够发现并理解一个 Agent 提供了什么样的功能。
官方建议将 AgentCard 托管在 Agent 服务的基础 URL 下的特定路径:https://<base_url>/.well-known/agent.json
。这样,客户端可以通过简单的 HTTP GET 请求获取 AgentCard,从而了解 Agent 的详细信息。
这种设计自然地引出了对 Agent 注册表的需求,无论是公共的还是私有的,以便更方便地查找 Agent。同时,这也为去中心化的 Agent 发现机制提供了可能性,例如通过 P2P 网络广播 AgentCard,甚至将其存储在 IPFS 或区块链上,构建自组织的 Agent 网络。
AgentCard 结构
AgentCard 包含以下关键信息:
- 基本信息: Agent 的名称 (
name
)、描述 (description
)、服务 URL (url
)、提供者信息 (provider
)、版本 (version
)、文档链接 (documentationUrl
)。 - 能力 (Capabilities): Agent 支持的可选能力,如是否支持流式传输 (
streaming
)、推送通知 (pushNotifications
)、状态转换历史 (stateTransitionHistory
)。 - 认证要求 (Authentication): Agent 所需的认证方案(如 Basic, Bearer)和凭证信息。
- 默认交互模式 (Default Modes): Agent 在所有技能中默认支持的输入 (
defaultInputModes
) 和输出 (defaultOutputModes
) 的 MIME 类型。 - 技能 (Skills): Agent 能够执行的具体能力单元。每个技能包含:
- 唯一标识符 (
id
) - 名称 (
name
) - 描述 (
description
) - 标签 (
tags
) - 示例 (
examples
) - 特定于技能的输入/输出模式 (
inputModes
/outputModes
) (如果与默认不同)
- 唯一标识符 (
以下是 AgentCard 接口的示意性定义 (TypeScript 风格):
interface AgentCard {
// Agent 的人类可读名称 (例如 "食谱 Agent")
name: string;
// Agent 功能的人类可读描述
description: string;
// Agent 托管的 URL 地址
url: string;
// Agent 的服务提供商信息
provider?: {
organization: string;
url: string;
};
// Agent 的版本 (格式由提供商定义,例如 "1.0.0")
version: string;
// Agent 文档的 URL
documentationUrl?: string;
// Agent 支持的可选能力
capabilities: {
streaming?: boolean; // 如果 Agent 支持 SSE
pushNotifications?: boolean; // 如果 Agent 可以向客户端推送更新通知
stateTransitionHistory?: boolean; // 如果 Agent 暴露任务的状态变更历史
};
// Agent 的认证要求 (旨在匹配 OpenAPI 认证结构)
authentication: {
schemes: string[]; // 例如 Basic, Bearer
credentials?: string; // 客户端用于私有 Card 的凭证
};
// Agent 在所有技能中支持的默认交互模式
defaultInputModes: string[]; // 支持的输入 MIME 类型
defaultOutputModes: string[]; // 支持的输出 MIME 类型
// Agent 可以执行的能力单元集合
skills: {
id: string; // 技能的唯一标识符
name: string; // 技能的人类可读名称
description: string; // 技能描述
tags: string[]; // 描述技能能力类别的标签 (例如 "烹饪", "客户支持")
examples?: string[]; // 技能可以执行的示例场景或提示 (例如 "我需要一个面包的食谱")
inputModes?: string[]; // 技能支持的输入 MIME 类型 (如果与默认不同)
outputModes?: string[]; // 技能支持的输出 MIME 类型 (如果与默认不同)
}[];
}
完整的 Schema 定义可以参考官方或相关实现。