提交后续输入

当任务状态变为 input-required 时,智能体正在等待用户回答,而不是已经失败。读取状态消息中的问题和字段标识,收集用户输入后,再提交到同一个任务。

何时使用本接口

只在任务明确要求结构化补充输入时使用 matrixflow/input.submit。开始前保存:

  • Task id

  • 当前 turnId

  • 状态消息中每个待回答字段的标识;

  • 状态消息提供 callId 时,同时保存该值。

如果只是想在已经完成的回答后继续原会话,应使用 message/send 并传入 contextId,不使用本接口。

提交回答

下面示例回答一个确认项和一个多选项:

export TASK_ID='<task-id>'
export TURN_ID='<turn-id>'
export CALL_ID='<call-id>'
export REQUEST_ID='<new-unique-request-id>'

curl -X POST "$PRODUCT_API_BASE_URL/agents/a2a" \
  -H "X-API-Key: $PRODUCT_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d "{
    \"agent_id\": \"$AGENT_ID\",
    \"jsonrpc\": \"2.0\",
    \"id\": \"$REQUEST_ID\",
    \"method\": \"matrixflow/input.submit\",
    \"params\": {
      \"taskId\": \"$TASK_ID\",
      \"turnId\": \"$TURN_ID\",
      \"callId\": \"$CALL_ID\",
      \"answers\": {
        \"approval\": {
          \"answers\": [\"yes\"]
        },
        \"regions\": {
          \"answers\": [\"华东\", \"华南\"]
        }
      }
    }
  }"

字段

类型

必需

说明

method

string

固定为 matrixflow/input.submit

params.taskId

string

正在等待输入的任务 ID。

params.turnId

string

本次待输入轮次 ID。使用当前响应返回的值。

params.callId

string

本次输入请求的调用 ID。状态消息返回时原样传递。

params.answers

object

以待回答字段标识为键的回答集合。

params.answers.<field>.answers

string[]

该字段的回答列表。即使只有一个回答,也使用数组。

不要根据问题显示文本自行创造字段标识。字段标识、可选值和是否允许多选应以当前任务的状态消息为准。

检查响应

提交成功后,响应仍使用 JSON-RPC 结构。保存响应中的最新任务状态、Task ID 和 Turn ID,然后继续调用 tasks/get

{
  "jsonrpc": "2.0",
  "id": "<REQUEST_ID>",
  "result": {
    "kind": "task",
    "id": "<TASK_ID>",
    "turnId": "<NEXT_TURN_ID>",
    "status": {
      "state": "working"
    }
  }
}

提交接口成功只表示服务端接受了回答。任务可能继续运行、再次请求输入、完成或失败;必须重新查询状态。

常见问题

现象

先检查

下一步

返回参数错误

taskIdturnIdanswers

使用最近一次 input-required 响应中的值重新构造请求。

找不到回答字段

状态消息中的字段标识

不使用界面标签代替字段标识。

提交后仍然等待输入

最新 Turn ID 和未回答字段

重新查询任务,展示新问题,不重复提交旧轮次。

重复提交

请求记录和任务最新状态

先查询任务,确认回答是否已被接受,再决定是否重试。

下一步

最后更新于