# 调用智能体并跟踪任务

使用 AI Studio SDK 向一个已选择的智能体发送文本，并保存返回的任务标识和轮次标识。后续查询、取消、恢复订阅或补充输入都使用这些标识；它们不能与工作流运行或其他任务资源混用。

(sdk-ai-studio-agent-task-flow)=
## 任务流程

1. 在目标工作区中选择智能体，并准备文本消息、消息标识和调用关联标识。
2. 提交消息后，从返回内容中取得本次任务标识和轮次标识。
3. 使用任务标识查询、取消或恢复该任务的订阅；智能体要求补充输入时，同时使用任务标识、轮次标识和答案。

消息已提交不表示任务已完成。保存这两个服务端返回的标识，并根据查询结果或流式更新决定下一步。

(sdk-ai-studio-agent-task-prepare)=
## 准备

| 需要的内容 | 在本页中的作用 |
| --- | --- |
| 已绑定目标工作区的客户端上下文 | 确定智能体调用所属的工作区。 |
| 智能体代码或智能体 ID | 选择本次接收消息的智能体。 |
| 文本消息、消息标识和调用关联标识 | 提交一条可由调用方关联的消息。 |

(sdk-ai-studio-agent-task-send)=
## 提交文本消息

提交成功后，示例从响应中读取任务标识和轮次标识。保存它们，后续操作不要自行生成替代值。

:::::{tab-set}
:sync-group: sdk-language

::::{tab-item} Go
:sync: go

```go
func submitText(ctx context.Context, workspace *sdk.WorkspaceHandle, agentCode, messageID, prompt string, requestID any) (string, string, error) {
	agent, err := workspace.AgentByCode(agentCode)
	if err != nil {
		return "", "", err
	}
	submitted, err := agent.SendText(ctx, sdk.AgentTextMessage{
		RequestID: requestID, MessageID: messageID, Text: prompt,
	})
	if err != nil {
		return "", "", err
	}
	taskID, err := sdk.AgentA2ATaskID(submitted)
	if err != nil {
		return "", "", err
	}
	turnID, err := sdk.AgentA2ATurnID(submitted)
	if err != nil {
		return "", "", err
	}
	return taskID, turnID, nil
}
```

::::

::::{tab-item} Python
:sync: python

```python
def submit_text(workspace, agent_code, message_id, prompt, request_id):
    agent = workspace.agent_by_code(agent_code)
    submitted = agent.send_text(
        sdk.AgentTextMessage(
            request_id=request_id, message_id=message_id, text=prompt
        )
    )
    task_id = sdk.agent_a2a_task_id(submitted)
    turn_id = sdk.agent_a2a_turn_id(submitted)
    return task_id, turn_id
```

::::

:::::

(sdk-ai-studio-agent-task-continue)=
## 使用返回的标识继续任务

查询、取消和恢复订阅只需要同一智能体返回的任务标识。智能体请求补充输入时，还需要同一响应中的轮次标识以及至少一项答案。

下面的示例使用上一步保存的任务标识查询当前任务。它返回的是当前协议响应，不表示任务已经完成。

:::::{tab-set}
:sync-group: sdk-language

::::{tab-item} Go
:sync: go

```go
func getTask(ctx context.Context, agent *sdk.AgentHandle, taskID string, requestID any) (*sdk.AgentA2AResult, error) {
	return agent.GetTask(ctx, sdk.AgentTaskRequest{
		RequestID: requestID,
		TaskID:    taskID,
	})
}
```

::::

::::{tab-item} Python
:sync: python

```python
def get_task(agent, task_id, request_id):
    return agent.get_task(
        sdk.AgentTaskRequest(task_id=task_id, request_id=request_id)
    )
```

::::

:::::

(sdk-ai-studio-agent-task-limitations)=
## 限制

流式发送或恢复订阅返回的是正在读取的响应。Go 调用方在读取后关闭响应体；本地停止读取不表示智能体任务已经取消。

消息和补充输入可能包含业务数据。不要将凭据、连接信息或其他敏感值写入消息、日志或错误输出。

(sdk-ai-studio-agent-task-next)=
## 下一步

- 调用 HTTP 接口时，请参阅 API Reference 中的智能体调用接口。
