讯飞星火大模型Java版API对接

2,915 阅读2分钟

本文将介绍如何使用Java对接讯飞星火大模型API,让您轻松地实现自然语言处理功能。

前置条件

在开始使用Java版API对接讯飞星火大模型之前,您需要满足以下条件:

  • 已经申请讯飞星火大模型API权限,并获得了API的AppID和API Key等。

申请入口:xinghuo.xfyun.cn/ 拉到最底部,点击合作咨询,提交一个工单就行

image.png

开始使用

开源地址:github.com/a812086325/…

讯飞星火大模型流式输出,对接星火官方API,对接简单,只需增加配置即可完成对接, 支持Tokens计算。

1、引入依赖

<dependency>
    <groupId>io.github.a812086325</groupId>
    <artifactId>xfxh-java</artifactId>
    <version>1.0</version>
</dependency>

2、添加yml配置

xfxh:
  apiHost: spark-api.xf-yun.com
  apiPath: /v1.1/chat
  appId: xxx
  apiKey: xxx
  apiSecret: xxx

3、编辑配置类

@Configuration
@ConfigurationProperties(prefix = "xfxh")
@Data
public class XfXhConfig {
    private String apiHost;
    private String apiPath;
    private String appId;
    private String apiKey;
    private String apiSecret;
}

4、在启动类或配置类注册一个bean

@SpringBootApplication
public class DevScaffoldApplication {
    @Autowired
    private XfXhConfig xfXhConfig;

    public static void main(String[] args) {
        SpringApplication.run(DevScaffoldApplication.class, args);
    }

    @Bean
    public XhStreamClient xhStreamClient (){
        return XhStreamClient.builder()
                .apiHost(xfXhConfig.getApiHost())
                .apiPath(xfXhConfig.getApiPath())
                .appId(xfXhConfig.getAppId())
                .apiKey(xfXhConfig.getApiKey())
                .apiSecret(xfXhConfig.getApiSecret())

                .build();
    }
}

5、自定义一个Listener类继承WebSocketListener

public class XfXhListener extends WebSocketListener {

    @Override
    public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) {
        super.onOpen(webSocket, response);

    }

    @Override
    public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) {
        super.onMessage(webSocket, text);
        System.out.println("text:\n" + text);
        ResponseDTO responseData = JSONObject.parseObject(text,ResponseDTO.class);
        if(0 == responseData.getHeader().getCode()){
            ResponseDTO.PayloadDTO pl = responseData.getPayload();
            List<MsgDTO> tests = pl.getChoices().getText();
            MsgDTO textDTO = tests.stream().findFirst().orElse(new MsgDTO());

            System.out.println(textDTO.toString());

            if(2 == responseData.getHeader().getStatus()){
                ResponseDTO.PayloadDTO.UsageDTO.TextDTO testDto = pl.getUsage().getText();
                Integer totalTokens = testDto.getTotalTokens();
                System.out.println("本次花费:"+totalTokens + " tokens");


                webSocket.close(3,"客户端主动断开链接");
            }


        }else{
            System.out.println("返回结果错误:\n" + responseData.getHeader().getCode()+  responseData.getHeader().getMessage() );
        }
    }

    @Override
    public void onFailure(@NotNull WebSocket webSocket, @NotNull Throwable t, @Nullable Response response) {
        super.onFailure(webSocket, t, response);
    }

    @Override
    public void onClosed(@NotNull WebSocket webSocket, int code, @NotNull String reason) {
        super.onClosed(webSocket, code, reason);
    }
}

6、在需要发送的地方,注入xhStreamClient就可以发送消息啦

  1. 第一个参数为uid,用户标识
  2. 第二个参数为消息对象,是一个集合,需要上下文回答,需要把历史消息也传入
  3. 第三个参数为刚才自定义的Listener类
@Autowired
private XhStreamClient xhStreamClient;

MsgDTO dto = MsgDTO.builder().role(MsgDTO.Role.USER.getName()).content("请介绍一下你自己").build();

xhStreamClient.sendMsg("123", Arrays.asList(dto),new XfXhListener());

对接过程中有任何问题,欢迎评论留言。