快速开始

快速开始

环境要求

依赖版本
JDK17+
Maven3.6+
Netty4.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-api2.0.16日志门面
ch.qos.logback:logback-classic1.5.13日志实现
org.projectlombok:lombok1.18.36注解处理
com.alibaba.fastjson2:fastjson22.0.53JSON 编解码
org.apache.commons:commons-lang33.14.0工具类
io.jsonwebtoken:jjwt-api0.11.5JWT 接口
io.jsonwebtoken:jjwt-impl0.11.5JWT 实现
io.jsonwebtoken:jjwt-jackson0.11.5JWT JSON 序列化
io.netty:netty-all4.1.116.FinalWebSocket 客户端

对应的 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'

注意appKeyappSecret 用于 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*()
                                                          (返回处理结果)

下一步