扩展技能(ExtSkill)示例 · Android
扩展技能(ExtSkill)示例 · Android
⚠️ 尚未上线:本能力为 v1.5.0-SNAPSHOT 开发中特性,接口与协议可能调整,正式发布前请勿用于生产环境。
v1.5.0 新增。API 与 Java v1.5.0 · 扩展技能示例 完全一致,此处按 Android 惯例(Activity + 主线程回调切换)改写。Android 端没有独立的 ExtSkill 示例源码文件,以下为内联代码。
最小示例
java
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.agibot.aiem.sdk.AgentAuthCallback;
import com.agibot.aiem.sdk.AgentParam;
import com.agibot.aiem.sdk.AgentSdk;
import com.agibot.aiem.sdk.IdGenerator;
import com.agibot.aiem.sdk.extskill.ExtSkillInvokeCallback;
import com.agibot.aiem.sdk.extskill.ExtSkillQueryCallback;
import com.agibot.aiem.sdk.extskill.ExtSkillRequest;
public class ExtSkillDemoActivity extends AppCompatActivity {
private static final String TAG = "ExtSkillDemo";
private static final String URL = "wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk";
private static final String APP_ID = "<灵心开放平台应用 appId>";
private static final String APP_KEY = "<灵心开放平台应用 appKey>";
private static final String APP_SECRET = "<灵心开放平台应用 appSecret>";
private static final String AGENT_ID = "<目标智能体 agentId>";
private AgentSdk agentSdk;
private ExtSkillRequest extSkillRequest;
private String requestId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1. 创建 SDK + 注册鉴权 + 初始化
agentSdk = AgentSdk.create(URL, APP_ID, APP_KEY, APP_SECRET);
agentSdk.registerAuth(new AgentAuthCallback() {
@Override
public void onAuthState(String appId, int code, String msg) {
Log.i(TAG, "onAuthState => appId=" + appId + ", code=" + code + ", msg=" + msg);
if (code == 0) {
// 鉴权成功后可开始 query / invoke
runOnUiThread(() -> onAuthSuccess());
}
}
});
agentSdk.initialize();
}
private void onAuthSuccess() {
// 2. 注册扩展技能请求实例
requestId = IdGenerator.generateExtSkillRequestId();
extSkillRequest = new ExtSkillRequest(agentSdk, AGENT_ID, requestId);
agentSdk.registerExtSkill(extSkillRequest);
// 3. 查询可用扩展技能清单
querySkills();
}
private void querySkills() {
String queryEventId = extSkillRequest.query(new ExtSkillQueryCallback() {
@Override
public void onQueryResult(String agentId, String requestId, String eventId,
int code, String msg, AgentParam result) {
Log.i(TAG, "onQueryResult => agentId=" + agentId
+ ", code=" + code + ", msg=" + msg + ", result=" + result);
// 回调在非 UI 线程,更新界面需切回主线程
runOnUiThread(() -> {
if (code == 0) {
// result 承载技能清单,按需展示或触发 invoke
} else {
// 失败处理:code -1 服务端拒绝;1000 本地连接已关闭
}
});
}
}, 2000);
Log.i(TAG, "query sent, eventId=" + queryEventId);
}
private void invokeSkill() {
// 4. 触发某个扩展技能执行
String extSkillId = "test_ext_skill_id_001";
AgentParam input = AgentParam.create();
input.setString("role", "male");
input.setInteger("threshold", 0);
String invokeEventId = extSkillRequest.invoke(extSkillId, input, new ExtSkillInvokeCallback() {
@Override
public void onInvokeAck(String agentId, String requestId, String eventId,
int code, String msg) {
// 第一段:网关已受理(非 UI 线程)
Log.i(TAG, "onInvokeAck => code=" + code + ", msg=" + msg);
}
@Override
public void onState(String agentId, String requestId, String eventId,
String stateName, String stateValue) {
// 第二段:执行期间状态上报(非 UI 线程,0 到多次)
Log.i(TAG, "onState => stateName=" + stateName + ", stateValue=" + stateValue);
}
@Override
public void onInvokeResult(String agentId, String requestId, String eventId,
int code, String msg, AgentParam param) {
// 第三段:技能执行输出(非 UI 线程)
Log.i(TAG, "onInvokeResult => code=" + code + ", msg=" + msg + ", param=" + param);
runOnUiThread(() -> {
if (code == 0) {
// param 承载技能出参,更新 UI
}
});
}
}, 2000);
Log.i(TAG, "invoke sent, eventId=" + invokeEventId);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 5. 释放
if (agentSdk != null && requestId != null) {
agentSdk.unregisterExtSkill(requestId);
}
// agentSdk.release(); // 整个 SDK 不再使用时调用
}
}
常见改写要点
| 想做 | 改哪里 |
|---|---|
| 只拉清单不触发 | 只调 query(...),拿到 onQueryResult 的 result 即可;invoke 可省略 |
| 触发不同技能 | 换 invoke 的第一个参数 extSkillId;input 按目标技能定义填 AgentParam |
| 传结构化入参 | AgentParam.create().setString(...).setInteger(...);wire 上以扁平键值下发 |
| 只关心最终结果 | onInvokeAck 可只记日志;真正输出在 onInvokeResult 的 param(code == 0 时非空) |
| 感知 SDK 鉴权 / 断连 | query / invoke 回调收到 code == 1000 表示本地连接已关闭,应重连后重试 |
| 多智能体并行 | 每个 agentId 建一个 ExtSkillRequest(各自独立 requestId);SDK 按 requestId 索引,互不冲突 |
| Activity 生命周期 | 在 onDestroy 中 unregisterExtSkill;避免 Activity 销毁后回调持有旧引用 |