快速开始
快速开始
环境要求
| 依赖 | 版本 |
|---|---|
| JDK | 17+ |
| Maven | 3.6+ |
| Netty | 4.1.116.Final(SDK自带) |
接入依赖
Maven(推荐)
xml
<dependency>
<groupId>com.agibot.aiem</groupId>
<artifactId>linksoul-agentsdk</artifactId>
<version>1.4.0-SNAPSHOT</version>
</dependency>
Gradle(Groovy 格式 build.gradle)
groovy
implementation 'com.agibot.aiem:linksoul-agentsdk:1.4.0-SNAPSHOT'
直接以 jar 方式接入时的第三方依赖清单
若不使用 Maven / Gradle 解析传递依赖,需要手动引入以下第三方库:
| 依赖 | 版本 | 用途 |
|---|---|---|
org.slf4j:slf4j-api | 2.0.16 | 日志门面 |
ch.qos.logback:logback-classic | 1.5.13 | 日志实现 |
org.projectlombok:lombok | 1.18.36 | 注解处理 |
com.alibaba.fastjson2:fastjson2 | 2.0.53 | JSON 编解码 |
org.apache.commons:commons-lang3 | 3.14.0 | 工具类 |
io.jsonwebtoken:jjwt-api | 0.11.5 | JWT 接口 |
io.jsonwebtoken:jjwt-impl | 0.11.5 | JWT 实现 |
io.jsonwebtoken:jjwt-jackson | 0.11.5 | JWT JSON 序列化 |
io.netty:netty-all | 4.1.116.Final | WebSocket 客户端 |
对应的 pom.xml / build.gradle 片段:
xml
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.16</version></dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version></dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.13</version></dependency>
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.53</version></dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.14.0</version></dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.5</version></dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.5</version></dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.5</version></dependency>
<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.116.Final</version></dependency>
groovy
implementation 'org.slf4j:slf4j-api:2.0.16'
implementation 'org.projectlombok:lombok:1.18.36'
implementation 'ch.qos.logback:logback-classic:1.5.13'
implementation 'com.alibaba.fastjson2:fastjson2:2.0.53'
implementation 'org.apache.commons:commons-lang3:3.14.0'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'io.netty:netty-all:4.1.116.Final'
注意:
appKey与appSecret用于 HMAC-SHA256 网关签名,请妥善保存,不要写进可被公开的代码或日志。
完整接入示例
下面以最经典的 Asr2Llm(文本输入 → LLM 文本输出)为例展示完整接入流程,其他被动回调的接入方式完全相同,只是 register* 与 onRequest 签名不同(详见 被动示例)。
java
import com.agibot.aiem.sdk.*;
import com.agibot.aiem.sdk.passive.*;
public class QuickStart {
public static void main(String[] args) {
String url = "wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk";
String appId = "您的appId";
String appKey = "您的appKey";
String appSecret = "您的appSecret";
// ① 创建SDK实例(单例,同一appId多次调用返回同一实例)
AgentSdk agentSdk = AgentSdk.create(url, appId, appKey, appSecret);
// ② 注册认证回调(监听连接状态)
agentSdk.registerAuth((appId1, code, msg) -> {
if (code == 0) {
System.out.println("连接认证成功");
} else {
System.err.println("认证失败: code=" + code + ", msg=" + msg);
}
});
// ③ 注册被动回调:Asr2Llm(机器人已完成 ASR,SDK 仅做语义理解/LLM)
agentSdk.registerAsr2Llm(new Asr2LlmCallback(agentSdk) {
@Override
public void onRobotOnline(String agentId, AgentMeta agentMeta) {
// 机器人上线,可获取元数据(唤醒词、城市等)
System.out.println("机器人上线: " + agentId);
System.out.println("唤醒词: " + agentMeta.getWakeupWord());
}
@Override
public void onRobotOffline(String agentId) {
// 机器人下线,清理相关资源
System.out.println("机器人下线: " + agentId);
}
/**
* @param text 上游 ASR 识别完成的文本(一般为 final asr)
* @param param 扩展参数
* @param response 应答对象,回填 LLM/技能/打断结果
*/
@Override
public void onRequest(String agentId, String eventId, String text,
AgentParam param, Asr2LlmResponse response) {
// 拿 text(例如"今天天气怎么样")做语义理解 + 知识库查询 + LLM 总结
String itemId = "itemId_000001";
// 如语义理解为有效指令需返回打断,拒识则无需返回
response.onInterrupt(eventId, "chat", null);
// 如分类为技能则下发技能指令(可选)
AgentParam skillParam = AgentParam.create().setInteger("step", 3);
response.onSkill(eventId, itemId, "movement", "move_forward", skillParam);
// LLM 流式输出
response.onLlmItemDelta(eventId, itemId, "今天天气不错,");
response.onLlmItemDelta(eventId, itemId, "适合出行。");
response.onLlmItemDone(eventId, itemId);
response.onLlmDone(eventId);
// 异常处理(按需启用)
// response.onError(eventId, 1010, "LLM 调用失败");
}
});
// ④ 初始化(建立WebSocket连接,自动重连)
agentSdk.initialize();
}
}
核心概念速查
| 概念 | 说明 |
|---|---|
appId / appKey / appSecret | 灵心开放平台创建应用后获取;appKey + appSecret 用于 HMAC-SHA256 网关签名 |
| 被动交互 | 机器人发起请求 → SDK处理 → 通过Response返回结果 |
| 主动交互 | SDK主动向机器人发起任务流(registerTaskFlow) |
agentId | 灵心平台配置的智能体 ID(如 AGENT_0000001)。机器人在端侧绑定该智能体后上线,SDK 通过 onRobotOnline(agentId, ...) 回传——不是机器人硬件标识 |
eventId | 一次完整对话的唯一标识 |
itemId | 同一对话中多个意图/响应片段的标识 |
flag | 音频/视频回调中的生命周期标志(仅 Audio2* / AudioVideo2* / AsrVideo2* 有该字段) |
AgentParam | 扩展参数(KV结构,支持链式调用) |
AgentMeta | 机器人元数据(唤醒词、城市、机器人名称等) |
接入流程图
text
create() → registerAuth() → register*Callback() → initialize()
│
▼
WebSocket连接
│
┌─────────┴─────────┐
▼ ▼
onAuthState() onRobotOnline()
(认证结果) (机器人上线)
│
▼
onRequest()
(处理音频/文本)
│
▼
response.on*()
(返回处理结果)