调用智能体并跟踪任务¶
使用 AI Studio SDK 向一个已选择的智能体发送文本,并保存返回的任务标识和轮次标识。后续查询、取消、恢复订阅或补充输入都使用这些标识;它们不能与工作流运行或其他任务资源混用。
任务流程¶
在目标工作区中选择智能体,并准备文本消息、消息标识和调用关联标识。
提交消息后,从返回内容中取得本次任务标识和轮次标识。
使用任务标识查询、取消或恢复该任务的订阅;智能体要求补充输入时,同时使用任务标识、轮次标识和答案。
消息已提交不表示任务已完成。保存这两个服务端返回的标识,并根据查询结果或流式更新决定下一步。
准备¶
需要的内容 |
在本页中的作用 |
|---|---|
已绑定目标工作区的客户端上下文 |
确定智能体调用所属的工作区。 |
智能体代码或智能体 ID |
选择本次接收消息的智能体。 |
文本消息、消息标识和调用关联标识 |
提交一条可由调用方关联的消息。 |
提交文本消息¶
提交成功后,示例从响应中读取任务标识和轮次标识。保存它们,后续操作不要自行生成替代值。
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
}
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
使用返回的标识继续任务¶
查询、取消和恢复订阅只需要同一智能体返回的任务标识。智能体请求补充输入时,还需要同一响应中的轮次标识以及至少一项答案。
下面的示例使用上一步保存的任务标识查询当前任务。它返回的是当前协议响应,不表示任务已经完成。
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,
})
}
def get_task(agent, task_id, request_id):
return agent.get_task(
sdk.AgentTaskRequest(task_id=task_id, request_id=request_id)
)
限制¶
流式发送或恢复订阅返回的是正在读取的响应。Go 调用方在读取后关闭响应体;本地停止读取不表示智能体任务已经取消。
消息和补充输入可能包含业务数据。不要将凭据、连接信息或其他敏感值写入消息、日志或错误输出。
下一步¶
调用 HTTP 接口时,请参阅 API Reference 中的智能体调用接口。
最后更新于