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 定义可以参考官方或相关实现。