简体中文
callAgent
约 1198 字大约 4 分钟
2026-10-16
该方法用于调用 Agent 执行任务,并在任务提交后按固定间隔轮询执行结果。调用时传入业务参数 data 和可选的 options。方法会返回一个 Promise。
语法: FxUI.biz.callAgent(data, options)
参数
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| data | 业务参数(必填) | Object | — | — |
| options | 附加选项 | Object | — | {} |
data
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| apiName | Agent 的 API 名称 | string | — | ShareAgent |
| content | 消息内容,元素结构见示例 | Array | — | [] |
| sessionId | 会话 ID | string | — | {apiName}__{随机 UUID} |
| instanceId | 实例 ID | string | — | 与 sessionId 相同 |
options
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| signal | 用于中止轮询调用的中止信号对象,需包含 aborted 布尔字段(abort() 方法可选)。小程序运行时没有 AbortController,不要传入 web 端的 AbortSignal | Object | — | — |
| method | 执行模式。传 EventSource 时走 SSE 流式模式(见下方「EventSource 流式模式」),不传时走轮询模式 | string | EventSource | 轮询模式 |
传入 signal 后,调用发起前和执行结果提交后都会检查是否已中止。
示例
轮询方式获取执行结果:
import FxUI from 'fxui-mobile';
FxUI.biz.callAgent({
apiName: 'ShareAgent',
content: [
{
type: 'text',
text: '查询今天北京的天气'
},
{
type: 'file',
source: {
path: 'TN_de531073e66c4217b4f17146f0b34f60',
filename: '(这个是类)MRCRMSyncUtil.groovy',
size: 14476,
ext: 'groovy'
}
},
{
type: 'image',
source: {
path: 'TN_7d6da51cb3c8485887631ca618e1e2a9',
filename: '2.快捷 推荐都配置.png',
size: 120619,
ext: 'png'
}
}
]
}).then((res) => {
console.log(res);
}).catch((err) => {
console.log(err);
});中止调用:
import FxUI from 'fxui-mobile';
// 小程序运行时没有 AbortController,自行维护一个含 aborted 字段的信号对象即可
const signal = {
aborted: false,
abort() {
this.aborted = true;
}
};
FxUI.biz.callAgent({
apiName: 'ShareAgent',
content: []
}, {
signal
}).catch((err) => {
console.log(err);
});
// 需要中止时执行
signal.abort();返回结果(轮询模式)
方法先提交执行,再每 2 秒轮询一次执行结果,直到任务不再处于执行中状态。Promise 完成后返回的结果结构如下:
| 字段 | 说明 | 类型 |
|---|---|---|
| code | 执行状态。为 POLLING 时继续轮询,其他状态值表示任务执行结束 | string |
| data | 执行结果数据 | — |
{
code: 'POLLING',
data: {}
}调用失败时,Promise 会 reject,reject 的值为调用失败的结果:
{
success: false,
error: {}
}执行结果提交成功但返回的 success 不为真时,reject 的值为提交执行的原始返回结果。
通过 signal 中止调用时,Promise 会 reject,错误信息为 aborted。
EventSource 流式模式
options.method 传 EventSource 时走流式模式:方法先请求补全参数接口,再通过 SSE(分块传输)持续接收事件增量,无需轮询。连接异常断开时会按事件序号自动续传重连(最多 3 次,间隔 1 秒)。
该模式同样返回 Promise,并通过 options 上的回调向外透出过程事件:
| 回调 | 说明 |
|---|---|
| onOpen | SSE 连接建立后触发一次,参数为 { messageId, stop(), abort() }。stop() 会先向后端上报停止(user_stop)再中断连接;abort() 直接中断连接 |
| onMessage | 每收到一条服务端事件触发,参数为 { event, id, data },data 已自动做 JSON 解析(服务端可能存在双层序列化,已一并处理) |
| onQuestion | Agent 需要用户补充信息(question / userInteractionForm 事件)时触发,参数为 { question, resolveQuestion(answer), rejectQuestion }。调用 resolveQuestion(answer) 会携带执行上下文继续本轮执行;调用 rejectQuestion 以错误结束本次调用。未传入该回调时,收到反问事件会直接结束本次调用 |
| onClose | 非中断性连接结束时触发 |
| onFinish | 收到 finish 事件、正常结束时触发 |
| onError | 连接错误且重试耗尽时触发,同时 Promise reject |
| onTraceId | 每次建立 SSE 连接后触发,参数为累计的 traceId 列表,用于埋点 |
返回值:正常结束时 Promise resolve(无业务值);通过 onOpen 暴露的 stop() / abort() 中断时 resolve 的值为 'aborted'。
import FxUI from 'fxui-mobile';
FxUI.biz.callAgent({
apiName: 'ShareAgent',
content: [{ type: 'text', text: '查询今天北京的天气' }]
}, {
method: 'EventSource',
onOpen(info) {
console.log('已连接', info.messageId);
// 需要停止时:info.stop() 或 info.abort()
},
onMessage(msg) {
console.log('事件', msg.event, msg.data);
},
onFinish() {
console.log('执行完成');
}
});注意事项
- 该方法的轮询间隔固定为 2 秒,轮询的停止条件是执行状态不再为
POLLING。 data中已传入的字段会覆盖上表中的默认值;未传sessionId和instanceId时,每次调用都会按apiName__随机 UUID生成新的会话 ID 和实例 ID。- 生成
sessionId时取的是传入的apiName;未传apiName时前缀为ShareAgent。 - 轮询模式的中止检查发生在提交执行前后;轮询期间
options.signal会随内部调用一起传递。signal在 EventSource 模式下不生效,流式模式的中止请使用onOpen回调暴露的stop()/abort()。 - 该方法依赖
fxui-mobile@20261010.0.2及以上版本。 - 轮询模式内部通过操作库中的
ai-asset agent execute和ai-asset agent find-execute-result实现,相关操作说明可在操作库中查阅。
