Skip to main content

3. 搭建 AI 插件服务

在本章节,将会介绍如何在使用钉钉开放平台Stream mode搭建 AI 插件服务。包括以下内容:

  1. 搭建 AI 插件处理逻辑
  2. 填充应用信息
  3. 注册 AI 插件回调通道
提示信息

本教程的完整代码可以在 GitHub 仓库中获取,本章节涉及的代码量较大,建议通过 GitHub 查看。

搭建 AI 插件处理逻辑

AIGraphPluginCallbackListener.java
public class AIGraphPluginCallbackListener implements OpenDingTalkCallbackListener<GraphAPIRequest, GraphAPIResponse> {
@Override
public GraphAPIResponse execute(GraphAPIRequest request) {
log.info("receive AI graph plugin request={}", request);
String abilityKey = request.getHeader(AIPluginHeaders.ABILITY_KEY_NAME);
String pluginId = request.getHeader(AIPluginHeaders.PLUGIN_ID_NAME);
String pluginVersion = request.getHeader(AIPluginHeaders.PLUGIN_VERSION_NAME);
//业务数据的json字符串
String data = request.getBody();
//获取graph的路径请求{version}/{resource}
String path = request.getRequestLine().getPath();
return GraphUtils.failed(StatusLine.INTERNAL_ERROR);
}
}

其中DingTalkAIPluginRequestDingTalkAIPluginResponse 为平台约定的回调协议对象,详见GitHub 仓库

提示信息

abilityKey 可以作为服务的唯一标识做路由。

填充应用信息

img.png

将钉钉开放平台中应用的标识填入<your-app-key><your-app-secret>区域

关于应用唯一标识

企业内部应用为appKeyappSecret,企业三方应用为suiteKeysuiteSecret

注册 AI 插件回调通道

DingTalkStreamClientConfiguration.java
public class DingTalkStreamClientConfiguration {

@Value("${app.appKey}")
private String clientId;
@Value("${app.appSecret}")
private String clientSecret;

/**
* 配置OpenDingTalkClient客户端并配置初始化方法(start)
*
* @param chatBotCallbackListener
* @param aiGraphPluginCallbackListener
* @return
*/
@Bean(initMethod = "start")
public OpenDingTalkClient configureStreamClient(@Autowired ChatBotCallbackListener chatBotCallbackListener,
@Autowired AIGraphPluginCallbackListener aiGraphPluginCallbackListener) throws Exception {
// init stream client
return OpenDingTalkStreamClientBuilder.custom()
//配置应用的身份信息, 企业内部应用分别为appKey和appSecret, 三方应用为suiteKey和suiteSecret
.credential(new AuthClientCredential(clientId, clientSecret))
//注册机器人回调
.registerCallbackListener(DingTalkStreamTopics.BOT_MESSAGE_TOPIC, chatBotCallbackListener)
//注册graph api回调
.registerCallbackListener(DingTalkStreamTopics.GRAPH_API_TOPIC, aiGraphPluginCallbackListener).build();
}
}

启动 AI 插件服务

img.png