Skip to content
English

Skill 列表

草料 A2A 服务提供 3 个 skill,全部只读。

skill回答的问题artifact 名
get_entity这张码是什么?entity
get_records这个物经历过什么?records
list_actions现在能做什么?actions

:本页示例的返回来自一个公开演示码,经过删节、人名做了替换。完整结构以 schema.json 为准。

怎么指定 skill

在 message 的 parts 里给一个 DataPart:

json
{
  "kind": "data",
  "data": {
    "skill": "get_records",
    "url": "https://qr71.cn/okDISU/qssTnoy",
    "size": 10,
    "pageToken": ""
  }
}
字段必填说明
url草料码链接
skillskill id。留空默认 get_entity
sizeget_records 用,每页条数,默认 20,上限 50
pageTokenget_records 用,翻页游标

也可以只发文本,服务会从中提取第一个码链接,skill 默认 get_entity文本方式是兜底,明确知道要调哪个 skill 时请用 DataPart——草料这一侧不做自然语言意图识别,那是调用方 agent 的职责。

get_entity

一次拿到实体全貌:名称、类型、建档组织、属性、当前状态,以及可执行操作与最近记录的预览

拿到码之后从这里开始。

示例问句(写在 Agent Card 里,用于引导调用方选择):

  • 这个二维码对应的是什么设备?
  • 查一下这个码的名称、当前状态和属性

返回摘要

数控车床-A08-03-06;建档组织:草料二维码;状态:设备运行状态=正常;账本 1 条;属性 7 项;可执行操作 2 个

结构化部分是一份 ObjectCard v2,与公开 MCP 的 entity_get 返回同一结构。主要块包括:

内容
thing / code / binding身份三元组:物、码、绑定关系
properties属性字段
relations关系槽:所在位置、所属、责任人、从属于
states业务状态
records记录账本预览:总数 + 最近几条
media图片、附件
actions可执行操作及其契约注解
plans周期性计划
endpoints本实体在公开 MCP 和 A2A 上的地址
contract本次返回遵守的边界声明

顶层块始终存在:未跟踪时取值为 null{}[],应一律解读为「未跟踪」。「缺席」语义适用于块内部的可选子字段,见下方「消费方必读的三条」。字段细节见公开 MCP · 工具列表

get_records

取完整账本——巡检、报修、保养等记录,按时间倒序、游标分页。每条带记录发生当时的码与物快照。

get_entity 只给最近几条,要翻完整历史用这个。

示例问句

  • 这个码最近有哪些巡检记录?
  • 看看这台设备的操作履历

返回摘要

共 1 条记录(账本合计 1 条)。

结构化部分:

json
{
  "url": "https://qr71.cn/okDISU/qssTnoy",
  "records": [
    {
      "id": "rec_460807516",
      "type": "inspection",
      "label": "巡检记录表",
      "at": "2026-06-23T02:26:36.000Z",
      "result": "pass",
      "resultLabel": "正常",
      "summary": "巡检结果:正常",
      "by": { "name": "张工" },
      "snapshot": { "codeId": "qssTnoy", "thingId": "thg_qssTnoy" }
    }
  ],
  "hasMore": false,
  "total": 1
}

hasMoretrue 时,返回顶层还会带 nextPageToken 字段,把它填进下次请求的 pageToken

list_actions

列出此刻可执行的操作清单——能填哪些表单、有哪些状态变更。只列出,不执行。

示例问句

  • 这个码现在能填哪些表单、做哪些操作?
  • 这个码上有哪些可执行的操作?

返回摘要

可执行操作 2 个:巡检记录表、维护保养记录。提交/写入需授权,不在本只读服务范围。

结构化部分:

json
{
  "url": "https://qr71.cn/okDISU/qssTnoy",
  "actions": [
    {
      "action": "record:1556557",
      "label": "巡检记录表",
      "requiresAuth": true,
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": "by_request_key",
        "confirm": "none"
      },
      "precondition": null,
      "formSchemaVia": "entity_action_get",
      "humanUrl": "https://qr71.cn/okDISU/qssTnoy"
    },
    {
      "action": "record:1556556",
      "label": "维护保养记录",
      "requiresAuth": true,
      "annotations": {
        "readonly": false,
        "destructive": false,
        "idempotent": "by_request_key",
        "confirm": "none"
      },
      "precondition": null,
      "formSchemaVia": "entity_action_get",
      "humanUrl": "https://qr71.cn/okDISU/qssTnoy"
    }
  ]
}

注意requiresAuth: true 的意思是「执行这个操作需要授权」。但本服务无论是否授权都不执行任何操作。正确做法是把 humanUrl 递给人,由人在扫码页上完成填写。

formSchemaVia 里写的 entity_action_get公开 MCP 的工具名。A2A 只有 3 个 skill,不包含取字段这一步——需要表单字段结构时,走公开 MCP。

annotations 描述的是这个操作未来被执行时的性质承诺,不是当前状态描述。

消费方必读的三条

这三条写在只读契约扩展里,会直接影响你怎么处理返回值:

  1. 空值与缺席都不等于否定。 子字段没出现、或块取值为 null / {} / [],都表示平台尚未跟踪或无法解析成结构化值,不表示 false 或「没有」。草料宁可不给,也不会用文本冒充结构化引用。
  2. thing.id 是过渡标识idScheme: "code-derived",由码派生),不要持久化依赖。要长期保存的稳定标识是 code.uri
  3. 账本当前可被建档组织修订。 不可变账本是目标态,本契约不承诺不可变性。

完整契约见 https://a2a.objqr.com/ext/caoliao-entity/v2,机读 schema 见同路径下的 schema.json

下一步