JVS Web SDK是无影提供的JavaScript SDK,用于在Web应用中集成Agent管理、会话消息、技能管理、积分管理、模型配置和云桌面流化等能力。
概述
JVS Web SDK是无影提供的JavaScript SDK,用于在Web应用中集成Agent管理、会话消息、技能管理、积分管理、模型配置和云桌面流化等能力。通过JVS Web SDK,您可以快速构建基于无影Agent的智能应用,实现与Agent的对话交互、技能扩展、模型切换等功能。
功能特性
JVS Web SDK提供以下核心能力:
|
功能模块 |
说明 |
|
Agent管理 |
查询Agent列表、创建和管理会话、发送文本/图片/文件消息、订阅实时事件、获取历史消息。 |
|
技能管理 |
查询技能分类和已安装技能、启用或禁用技能、安装或卸载技能。 |
|
积分管理 |
查询积分套餐和已绑定的Agent、查询积分使用情况。 |
|
模型配置 |
查询Agent的可用模型列表、为会话设置指定的LLM模型。 |
|
云桌面流化 |
启动和管理云桌面或云应用的流化会话(仅浏览器环境)。 |
运行环境
JVS Web SDK同时支持浏览器和Node.js两种运行环境。
|
运行环境 |
模块格式 |
说明 |
|
浏览器 |
ESM(.mjs) |
支持所有功能,包括云桌面流化。 |
|
Node.js |
CJS(.js)/ ESM(.mjs) |
支持除云桌面流化外的所有功能。提供TypeScript类型定义文件(.d.ts)。 |
SDK架构
JVS Web SDK采用全局单例模式,通过Client类作为入口,按需构建不同的功能管理器(Manager)。
SDK的整体架构如下:
Client(全局单例)
├── AgentManager // 多Agent管理:Agent列表、会话、消息、事件
├── SingleAgentManager // 单Agent简化模式:自动关联Agent和会话
├── SkillManager // 技能管理:分类查询、安装卸载、启用禁用
├── CreditManager // 积分管理:套餐查询、使用统计
├── ModelManager // 模型配置:模型查询、会话模型切换
└── AspManager // 流化管理:云桌面/云应用流化会话(仅浏览器)
快速开始
浏览器环境(ESM)
<script type="module">
import { Client } from './wuying-sdk.mjs';
</script>
Node.js环境
// ESM模块
import { Client } from '@aliyun/wuying-sdk';
// CommonJS模块
const { Client } = require('@aliyun/wuying-sdk');
使用AuthCode初始化SDK。AuthCode由服务端生成后传递给前端使用。
import { Client } from './wuying-sdk.mjs';
// 创建Client实例(全局单例)
const client = Client.create({
authCode: 'your-auth-code',
});
// 构建所需的Manager
const agentManager = await client.buildAgentManager({});
// 查询Agent列表
const agentList = await agentManager.listAgents({});
console.log('Agent数量:', agentList?.agents.length);
// 使用完毕后释放资源
await client.close();
AuthCode应由服务端生成后传递给前端,请勿在前端代码中直接使用AK/SK。
1. Client类
Client是SDK的入口类,采用全局单例模式。通过Client.create()创建实例后,可按需构建各类功能管理器。
1.1 ClientOptions
|
参数 |
类型 |
必填 |
说明 |
|
authCode |
string |
是 |
鉴权码,由服务端生成。 |
1.2 UserConfig
可选的用户配置参数。
|
参数 |
类型 |
必填 |
说明 |
|
timeout |
number |
否 |
请求超时时间,单位为毫秒。默认值:30000。 |
|
maxRetries |
number |
否 |
最大重试次数。默认值:3。 |
|
logger |
Logger |
否 |
自定义日志对象。 |
|
clientId |
string |
否 |
客户端标识。默认值:'sdk-client'。 |
|
imDataDir |
string |
否 |
消息数据存储目录。默认值:'/openim_db'。仅Node.js环境生效。 |
|
imPlatformId |
number |
否 |
消息平台标识。默认值:1。仅Node.js环境生效。 |
1.3 方法列表
|
方法 |
说明 |
|
Client.create(options, userConfig?) |
创建或获取全局单例Client实例。 |
|
buildAgentManager(ctx) |
构建多Agent管理器。 |
|
buildSingleAgentManager(ctx) |
构建单Agent管理器,自动关联Agent和会话。 |
|
buildSkillManager(ctx) |
构建技能管理器。 |
|
buildCreditManager(ctx) |
构建积分管理器。 |
|
buildModelManager(ctx) |
构建模型配置管理器。 |
|
buildAspManager(ctx) |
构建流化管理器(仅浏览器环境)。 |
|
subscribeEvent(callback, ...opts) |
订阅全局事件。 |
|
listSubscriptions() |
列出当前所有活跃的事件订阅。 |
|
logout() |
清理状态,保留实例可重用。 |
|
close() |
彻底销毁实例并释放所有内部资源。 |
初始化示例
import { Client } from './wuying-sdk.mjs';
const client = Client.create({
authCode: 'your-auth-code',
}, {
timeout: 30000,
maxRetries: 3,
});
// 构建所需的Manager
const agentManager = await client.buildAgentManager({});
const skillManager = await client.buildSkillManager({});
// 使用完毕后释放资源
await client.close();
2. AgentManager类
多Agent、多会话统一管理器,提供Agent查询、会话管理、消息收发和事件订阅等功能。
2.1 Agent操作
listAgents(ctx, req?)
查询Agent列表。
|
参数 |
类型 |
必填 |
说明 |
|
pageNum |
number |
否 |
页码。默认值:1。 |
|
pageSize |
number |
否 |
每页数量。默认值:20。 |
|
keyword |
string |
否 |
搜索关键字,用于过滤Agent。 |
|
queryFotaUpdate |
boolean |
否 |
是否查询FOTA升级信息。设置为true时,返回的Agent对象中fotaUpdate字段会被填充。 |
返回AgentList对象,包含agents(Agent数组)和total(总数)。
2.2 会话操作
listSessions(ctx, req?)
查询会话列表。
|
参数 |
类型 |
必填 |
说明 |
|
agentID |
string |
否 |
Agent ID,按指定Agent过滤会话。 |
|
offset |
number |
否 |
偏移量。默认值:0。 |
|
count |
number |
否 |
每页数量。默认值:20。 |
|
keyword |
string |
否 |
搜索关键字。 |
createSession(ctx, req)
创建一个新会话。
|
参数 |
类型 |
必填 |
说明 |
|
agentID |
string |
是 |
要创建会话的Agent ID。 |
返回Session对象。
dismissSession(ctx, req)
解散一个已存在的会话。该操作不可恢复。
|
参数 |
类型 |
必填 |
说明 |
|
sessionID |
string |
是 |
要解散的会话ID。必须传入纯数字格式的ID(例如"3539096907"),可直接使用Session对象的groupId属性。 |
会话解散后不可恢复,请谨慎操作。
2.3 消息操作
|
方法 |
说明 |
|
sendTextMessage(ctx, req) |
发送文本消息。需指定sessionID和content。 |
|
sendTextMessageWithSync(ctx, req) |
发送文本消息并等待Agent响应。可设置超时时间(默认60秒)。 |
|
sendImageMessage(ctx, req) |
发送图片消息。需指定sessionID和imagePath。 |
|
sendFileMessage(ctx, req) |
发送文件消息。需指定sessionID和filePath。 |
|
sendMergerMessage(ctx, req) |
发送合并消息。需指定sessionID、title和summaries。 |
|
sendCompositeMessage(ctx, req) |
发送复合消息,可同时包含文本、图片和文件。 |
|
getSessionHistoryMessageList(ctx, req) |
获取会话的历史消息列表,支持分页。 |
2.4 事件订阅
subscribeEvent(ctx, req, callback)
订阅指定会话的事件。返回EventHandle对象,调用其unsubscribe()方法可取消订阅。
|
参数 |
类型 |
必填 |
说明 |
|
sessionID |
string |
是 |
要订阅事件的会话ID。 |
|
eventTypes |
EventType[] |
否 |
要订阅的事件类型列表。不指定则订阅所有类型。 |
2.5 完整示例
import { Client, EventType } from './wuying-sdk.mjs';
async function agentExample() {
const client = Client.create({ authCode: 'your-auth-code' });
try {
const agentMgr = await client.buildAgentManager({});
// 查询Agent列表
const agentList = await agentMgr.listAgents({}, { pageSize: 20 });
if (!agentList?.agents.length) {
console.error('没有可用的Agent');
return;
}
const agent = agentList.agents[0];
// 创建会话
const session = await agentMgr.createSession({}, { agentID: agent.id });
// 订阅事件
const handle = agentMgr.subscribeEvent(
{},
{ sessionID: session.id, eventTypes: [EventType.Message, EventType.StreamMessage] },
(event) => {
if (event.type === EventType.Message) {
console.log('收到消息:', event.message?.content);
}
}
);
// 发送消息
await agentMgr.sendTextMessage({}, {
sessionID: session.id,
content: '你好',
});
// 发送消息并等待响应
const response = await agentMgr.sendTextMessageWithSync({}, {
sessionID: session.id,
content: '请帮我查询天气',
timeoutSeconds: 30,
});
console.log('Agent回复:', response?.messages.map(m => m.content));
// 取消订阅
handle.unsubscribe();
} finally {
await client.close();
}
}
2.6 FOTA升级
FOTA(Firmware Over-The-Air)升级功能用于为底层实例为云桌面的Agent执行固件升级。
查询FOTA信息
通过listAgents方法并设置queryFotaUpdate: true,返回的Agent对象中fotaUpdate字段会被填充。当fotaUpdate.newFotaVersion不为空时,表示该Agent存在可用的FOTA升级。
AgentFotaUpdate类型
|
字段 |
类型 |
说明 |
|
newFotaVersion |
string |
可升级的目标FOTA版本。不为空时表示有可用升级。 |
|
currentFotaVersion |
string |
当前FOTA版本。 |
approveFotaUpdate(ctx, req)
执行FOTA升级。
|
参数 |
类型 |
必填 |
说明 |
|
resourceId |
string |
是 |
目标资源ID,可通过agent.runtimeResourceInfo.resourceId获取。 |
|
appVersion |
string |
是 |
目标升级版本,可通过agent.fotaUpdate.newFotaVersion获取。 |
|
regionId |
string |
否 |
地域ID。默认值:cn-shanghai。升级不在默认地域的Agent时,必须显式传入正确的regionId。 |
FOTA升级示例
const agentMgr = await client.buildAgentManager({});
// 查询Agent列表并获取FOTA信息
const result = await agentMgr.listAgents({}, { queryFotaUpdate: true });
for (const agent of result?.agents ?? []) {
if (agent.fotaUpdate?.newFotaVersion) {
console.log(
`Agent ${agent.name} 有可用升级: ${agent.fotaUpdate.currentFotaVersion} → ${agent.fotaUpdate.newFotaVersion}`
);
// 执行升级
await agentMgr.approveFotaUpdate({}, {
resourceId: agent.runtimeResourceInfo.resourceId,
appVersion: agent.fotaUpdate.newFotaVersion,
});
console.log(`Agent ${agent.name} FOTA升级已提交`);
}
}
2.7 更新Agent实例
updateAgentInstance(ctx, req)
更新Agent底层实例的配置(如实例规格、镜像等)。
|
参数 |
类型 |
必填 |
说明 |
|
resourceId |
string |
是 |
Agent底层资源ID。可从agent.runtimeResourceInfo.resourceId获取。 |
3. SingleAgentManager类
简化的单Agent管理器。自动关联一个Agent和对应的会话,无需在每次操作时手动指定sessionID,适合只使用单个Agent的场景。
|
方法 |
说明 |
|
agent() |
获取关联的Agent对象。 |
|
groupID() |
获取会话组ID。 |
|
sendTextMessage(ctx, req) |
发送文本消息,无需指定sessionID。 |
|
sendTextMessageWithSync(ctx, req) |
发送消息并等待响应。 |
|
sendImageMessage(ctx, req) |
发送图片消息。 |
|
sendFileMessage(ctx, req) |
发送文件消息。 |
|
subscribeEvent(ctx, req, callback) |
订阅会话事件。 |
|
getSessionHistoryMessageList(ctx, req) |
获取历史消息。 |
使用示例
const sam = await client.buildSingleAgentManager({});
console.log('Agent:', sam.agent().name);
// 直接发送消息,无需指定sessionID
const msg = await sam.sendTextMessage({}, { content: '你好' });
console.log('发送成功:', msg?.id);
4. SkillManager类
技能管理器,提供技能分类查询、已安装技能查询、技能启用/禁用和安装/卸载等功能。
4.1 方法列表
|
方法 |
说明 |
|
listCategories(ctx) |
获取技能分类列表。 |
|
listInstalledSkills(ctx, req) |
查询指定桌面已安装的技能列表。需指定desktopID。可选参数:categoryID(按分类过滤)、skillName(按技能名称过滤)。 |
|
listAgentAuthedSkills(ctx, req) |
查询Agent授权的技能列表。需指定desktopID。 |
|
setSkillEnabled(ctx, req) |
启用或禁用技能。自动等待操作完成并返回最终结果。 |
|
entInstallSkills(ctx, req) |
安装技能。自动等待操作完成并返回最终结果。 |
|
entUninstallSkills(ctx, req) |
卸载技能。自动等待操作完成并返回最终结果。 |
4.2 使用示例
const skillMgr = await client.buildSkillManager({});
// 获取技能分类
const categories = await skillMgr.listCategories({});
console.log('分类:', categories.map(c => c.categoryName));
// 查询已安装技能
const installed = await skillMgr.listInstalledSkills({}, {
desktopID: 'ecd-xxx',
});
// 启用技能(自动等待操作完成)
const tasks = await skillMgr.setSkillEnabled({}, {
desktopID: 'ecd-xxx',
skillNames: ['agent-browser'],
enabled: true,
});
for (const task of tasks) {
console.log(`任务 ${task.taskId}: ${task.operationStatus}`);
}
// 安装技能
const installTasks = await skillMgr.entInstallSkills({}, {
desktopID: 'ecd-xxx',
skillIds: ['skill-id-001'],
});
5. CreditManager类
积分管理器,提供积分套餐查询和积分使用信息查询功能。
5.1 方法列表
|
方法 |
说明 |
|
describeCreditPackageAgents(ctx, req?) |
查询积分套餐绑定的Agent列表。可选参数:agentType(Agent类型过滤)、agentIds(指定Agent ID列表)、fillAgent(是否填充Agent详细信息)。返回结果包含每个Agent的usedCredit、totalCredit和expiredTime。 |
|
describeCreditUsageInfo(ctx, req?) |
查询积分使用信息。可选参数:usageType(使用类型)、instanceIds(实例ID列表)、agentType(Agent类型)、agentIds(Agent ID列表)、fillAgent(是否填充Agent详细信息)。 |
5.2 使用示例
const creditMgr = await client.buildCreditManager({});
// 查询积分套餐
const agents = await creditMgr.describeCreditPackageAgents({});
for (const agent of agents) {
console.log(`Agent ${agent.agentId}: 已用 ${agent.usedCredit}/${agent.totalCredit}, 过期时间 ${agent.expiredTime}`);
}
// 查询积分使用信息
const usage = await creditMgr.describeCreditUsageInfo({}, {
usageType: 'AGENT',
});
for (const item of usage.usageInfoList) {
const data = item.usageInfo;
console.log(`${item.usageInfoKey}: ${data.totalUsedCredit}/${data.totalCredit}`);
}
6. ModelManager类
模型配置管理器,提供Agent实例模型配置查询和会话模型设置功能。
6.1 方法列表
|
方法 |
说明 |
|
getAgentInstanceModelConfig(ctx, req) |
获取Agent实例的模型配置,包含可用的模型提供商和LLM列表。 |
|
setChannelGroupModel(ctx, req) |
为指定会话设置LLM模型。 |
6.2 getAgentInstanceModelConfig请求参数
|
参数 |
类型 |
必填 |
说明 |
|
agentInstanceId |
string |
是 |
Agent实例ID。 |
|
agentProvider |
string |
否 |
Agent类型。默认值:OpenClaw。 |
|
agentPlatform |
string |
否 |
Agent平台。取值:ENTERPRISE、ENTERPRISE_JVS。默认值:ENTERPRISE。 |
|
channelSessionId |
string |
否 |
会话ID,用于获取特定会话的模型配置。 |
6.3 setChannelGroupModel请求参数
|
参数 |
类型 |
必填 |
说明 |
|
agentInstanceId |
string |
是 |
Agent实例ID。 |
|
groupId |
string |
是 |
会话组ID。 |
|
providerName |
string |
是 |
模型提供商ID,例如"bailian"。 |
|
llmCode |
string |
是 |
模型ID,例如"qwen3.5-plus"。 |
6.4 使用示例
const modelMgr = await client.buildModelManager({});
// 查询模型配置
const config = await modelMgr.getAgentInstanceModelConfig({}, {
agentInstanceId: 'inst-xxx',
});
if (config) {
console.log('默认模型:', config.defaultModel);
for (const provider of config.modelProviderList) {
console.log(`提供商: ${provider.name}`);
for (const llm of provider.llmInfoList) {
console.log(` - ${llm.name} (${llm.llmCode})`);
}
}
}
// 切换会话模型
await modelMgr.setChannelGroupModel({}, {
agentInstanceId: 'inst-xxx',
groupId: 'grp-xxx',
providerName: 'bailian',
llmCode: 'qwen3.5-plus',
});
7. AspManager类
流化会话管理器,用于管理云桌面或云应用的流化会话生命周期。仅支持浏览器环境。
7.1 方法列表
|
方法 |
说明 |
|
startAspStream(ctx, req) |
启动流化会话。 |
|
stopAspStream() |
停止流化会话并释放资源。 |
|
getAspStreamSession() |
获取当前流化会话信息。 |
7.2 startAspStream请求参数
|
参数 |
类型 |
必填 |
说明 |
|
resourceId |
string |
是 |
资源ID。 |
|
containerElementId |
string |
条件必填 |
容器元素ID。inline模式下必填。 |
|
streamType |
AspStreamType |
否 |
流化类型。取值:desktop(云电脑)、application(云应用)。默认值:desktop。 |
|
regionId |
string |
否 |
地域ID。默认值:cn-shanghai。 |
|
openType |
string |
否 |
打开方式。取值:inline(内嵌)、newTab(新标签页)。默认值:inline。 |
|
containerUrl |
string |
否 |
流化容器页面URL。用于自定义流化页面地址。 |
|
width |
string |
否 |
宽度。默认值:'100%'。 |
|
height |
string |
否 |
高度。默认值:'100%'。 |
7.3 AspStreamStatus枚举
流化会话状态枚举,可通过getAspStreamSession().status获取。
|
值 |
说明 |
|
creating |
创建中。 |
|
connecting |
连接中。 |
|
connected |
已连接。 |
|
disconnected |
已断开。 |
|
error |
错误。 |
7.4 使用示例
const aspMgr = await client.buildAspManager({});
// 启动云桌面流化(inline模式)
await aspMgr.startAspStream({}, {
resourceId: 'desktop-resource-id',
streamType: 'desktop',
containerElementId: 'stream-container',
openType: 'inline',
width: '100%',
height: '100%',
});
// 查询流化会话状态
const session = aspMgr.getAspStreamSession();
console.log('状态:', session?.status);
// 停止流化
await aspMgr.stopAspStream();
8. 事件类型
SDK支持以下事件类型,可用于subscribeEvent方法的事件过滤。
|
事件类型 |
说明 |
|
Message |
收到完整消息。 |
|
StreamMessage |
收到流式消息片段。 |
|
SessionStart |
会话已开始。 |
|
SessionFinish |
会话已结束。 |
|
SessionFailed |
会话失败。 |
|
AgentStatus |
Agent状态变更。 |
|
SyncProgress |
同步进度更新。 |
|
Connecting |
正在建立连接。 |
|
Connected |
连接已建立。 |
|
ConnectFailed |
连接失败。 |
|
Disconnect |
连接已断开。 |
|
Error |
发生错误。 |
|
Status |
通用状态变更通知。 |
|
TokenExpired |
认证Token已过期。 |
|
KickedOffline |
被踢下线(其他设备登录)。 |
8.1 全局事件订阅
通过client.subscribeEvent()可订阅全局事件,支持以下过滤选项:
|
过滤选项 |
说明 |
|
withEventTypes(...types) |
按事件类型过滤。 |
|
withSessionIDs(...ids) |
按会话ID过滤。 |
|
withContentKeywords(...keywords) |
按消息内容关键字过滤。 |
|
withSenderPattern(pattern) |
按发送者模式过滤。 |
|
withTimeRange(start, end) |
按时间范围过滤事件。 |
|
withMetadataFilter(key, value) |
按元数据键值对过滤。 |
|
withCustomFilter(fn) |
自定义过滤函数。 |
|
withAsyncDelivery(async) |
设置是否异步投递事件。 |
|
withCallback(callback) |
设置事件回调函数。 |
|
withCallbackTimeout(ms) |
设置回调超时时间。 |
import { EventType, withEventTypes, withSessionIDs } from './wuying-sdk.mjs';
// 订阅所有消息事件
const handle = client.subscribeEvent(
(event) => { console.log('消息:', event.message?.content); },
withEventTypes(EventType.Message, EventType.StreamMessage)
);
// 取消订阅
handle.unsubscribe();
9. 异步调用模式
所有Manager方法默认使用await同步等待返回。如果需要异步模式(方法立即返回null,结果通过回调传递),可使用WithAsync。
import { WithAsync } from './wuying-sdk.mjs';
// 异步模式:方法立即返回null
const result = await agentManager.sendTextMessage(
{},
{ sessionID: 'xxx', content: 'hello' },
WithAsync((msg, err) => {
if (err) console.error('发送失败:', err);
else console.log('消息已发送:', msg?.id);
})
);
console.log(result); // null
10. 错误处理
SDK定义了以下错误类型,均继承自SDKError基类。
|
错误类 |
错误码 |
说明 |
|
NetworkError |
NETWORK_ERROR |
网络错误,可重试。 |
|
TimeoutError |
TIMEOUT |
请求超时,可重试。 |
|
AuthError |
AUTH_ERROR |
认证错误,请检查AuthCode。 |
|
PermissionError |
PERMISSION_ERROR |
权限不足。 |
|
BusinessError |
BUSINESS_ERROR |
业务逻辑错误。 |
|
RateLimitError |
RATE_LIMIT_ERROR |
请求频率超限,可重试。 |
|
ServerError |
SERVER_ERROR |
服务端错误,可重试。 |
|
APIError |
API_ERROR |
API调用错误,包含HTTP状态码。 |
使用isRetryable(error)函数判断错误是否可重试。NetworkError、TimeoutError、RateLimitError和ServerError均为可重试错误。
import { AuthError, TimeoutError, NetworkError, isRetryable } from './wuying-sdk.mjs';
try {
const agents = await agentMgr.listAgents({});
} catch (err) {
if (err instanceof AuthError) {
console.error('认证失败,请检查AuthCode');
} else if (err instanceof TimeoutError) {
console.error('请求超时');
} else if (isRetryable(err)) {
console.log('可重试的错误,建议重试');
}
}
11. 基础类型
11.1 ExecutionContext
所有Manager方法的第一个参数均为ExecutionContext,用于传递执行上下文信息。
|
字段 |
类型 |
必填 |
说明 |
|
signal |
AbortSignal |
否 |
用于取消请求的信号对象。 |
|
traceId |
string |
否 |
请求追踪ID,用于日志和调试。 |
|
timeout |
number |
否 |
请求超时时间(毫秒)。 |
11.2 枚举类型
SDK提供以下枚举类型:
|
枚举 |
取值 |
说明 |
|
MessageRole |
user、assistant、system |
消息角色。 |
|
MessageType |
text、image、file |
消息内容类型。 |
|
AgentStatus |
ready、building、error、unknown |
Agent运行状态。 |
|
AgentOnlineStatus |
online、offline |
Agent在线状态。 |
|
SessionStatus |
active、closed、expired |
会话状态。 |
|
AgentPlatform |
ENTERPRISE、ENTERPRISE_JVS |
Agent平台类型。 |
11.3 Agent
Agent对象包含以下主要字段:
|
字段 |
类型 |
说明 |
id |
string |
Agent唯一标识。 |
name |
string |
Agent名称。 |
type |
string |
Agent类型。 |
status |
AgentStatus |
Agent运行状态。 |
imId |
string |
Agent的IM通讯标识。 |
avatarUrl |
string |
Agent头像URL。 |
description |
string |
Agent描述信息。 |
runtimeId |
string |
运行时实例ID。 |
runtimeType |
string |
运行时类型。 |
regionId |
string |
所属地域ID。 |
osType |
string |
操作系统类型。 |
agentPlatform |
string |
Agent平台类型。取值:ENTERPRISE、ENTERPRISE_JVS。 |
runtimeResourceInfo |
object |
运行时资源信息,包含resourceId、resourceStatus、resourceName等字段。仅listAgents返回时填充。 |
fotaUpdate |
AgentFotaUpdate |
FOTA升级信息。仅在listAgents设置queryFotaUpdate: true时填充。 |
onlineStatus |
AgentOnlineStatus |
Agent在线状态。 |
11.4 Session
会话对象包含以下字段:
字段 |
类型 |
说明 |
id |
string |
会话唯一标识。 |
agentId |
string |
所属Agent的ID。 |
userId |
string |
会话所属用户ID。 |
groupId |
string |
会话组ID(纯数字格式)。用于dismissSession等操作。 |
conversationId |
string |
对话ID。 |
status |
SessionStatus |
会话状态。 |
createdAt |
Date |
会话创建时间。 |
11.5 Message
消息对象包含以下主要字段:
字段 |
类型 |
说明 |
id |
string |
消息唯一标识。 |
sessionId |
string |
所属会话ID。 |
role |
MessageRole |
消息角色。 |
type |
MessageType |
消息类型。 |
sender |
string |
消息发送者标识。 |
timestamp |
Date |
消息时间戳。 |
content |
string |
消息文本内容。 |
textElem |
TextElem |
文本消息元素,包含文本内容详情。 |
streamTextElem |
StreamTextElem |
流式文本消息元素,包含流式片段内容。 |
imageElem |
ImageElem |
图片消息元素。 |
fileElem |
FileElem |
文件消息元素。 |
isFinal |
boolean |
是否为流式消息的最终片段。 |
roundID |
string |
对话轮次ID。 |
11.6 SyncMessageResponse
sendTextMessageWithSync方法的返回类型,包含以下字段:
|
字段 |
类型 |
说明 |
|
roundID |
string |
对话轮次ID。 |
|
messages |
Message[] |
同步返回的消息列表。 |
11.7 Event
事件对象包含以下字段:
字段 |
类型 |
说明 |
type |
EventType |
事件类型。 |
message |
Message | null |
关联的消息对象(消息类事件时有值)。 |
source |
EventSource |
事件来源信息。 |
timestamp |
Date |
事件发生时间。 |
sessionID |
string |
关联的会话ID。 |
metadata |
Record<string, string> |
事件附加元数据。 |
12. 模型便捷方法
SDK提供一组便捷方法,可直接在Agent、Session或Skill对象上操作,无需手动传递ID参数。这些方法是对应Manager方法的语法糖,内部自动提取对象的ID进行调用。
12.1 Agent便捷方法
|
方法 |
说明 |
|
agentListSessions(agent, ctx) |
获取指定Agent的会话列表。 |
|
agentCreateSession(agent, ctx) |
为指定Agent创建新会话。 |
|
agentListInstalledSkills(agent, ctx) |
获取指定Agent已安装的技能列表。 |
12.2 Session便捷方法
|
方法 |
说明 |
|
sessionSendTextMessage(session, ctx, content) |
发送文本消息(异步,不等待回复)。 |
|
sessionSendTextMessageSync(session, ctx, content, timeout?) |
发送文本消息并同步等待完整回复。 |
|
sessionSendImageMessage(session, ctx, imagePath) |
发送图片消息。 |
|
sessionSendFileMessage(session, ctx, filePath) |
发送文件消息。 |
|
sessionGetHistoryMessageList(session, ctx) |
获取会话历史消息列表。 |
|
sessionSubscribeEvent(session, ctx, callback) |
订阅指定会话的事件。 |
12.3 Skill便捷方法
|
方法 |
说明 |
|
skillEnable(skill, ctx) |
启用指定技能。 |
|
skillDisable(skill, ctx) |
禁用指定技能。 |
12.4 使用示例
import { agentListSessions, agentCreateSession, sessionSendTextMessage, sessionSendTextMessageSync, sessionSubscribeEvent, skillEnable } from './wuying-sdk.mjs';
// Agent便捷方法
const agent = agentList.agents[0];
const sessions = await agentListSessions(agent, {});
const newSession = await agentCreateSession(agent, {});
// Session便捷方法:发送消息并同步等待回复
const response = await sessionSendTextMessageSync(newSession, {}, '你好,请介绍一下你自己');
console.log('回复:', response?.messages.map(m => m.content).join(''));
// Session便捷方法:订阅事件
const handle = sessionSubscribeEvent(newSession, {}, (event) => {
console.log('收到事件:', event.type, event.message?.content);
});
// Skill便捷方法
const skills = await agentListInstalledSkills(agent, {});
await skillEnable(skills[0], {});