开发者社区 > 百炼大模型 > 正文

百炼api调用报错 network error

集成百炼大模型api到spring boot项目,使用websocket实现流式输出,项目启动后调用多轮对话都能够正常进行,保持不调用状态,过5分钟左右再次调用时会报错 Exception: {"statusCode":-1,"message":"Get response failed!","code":"network error","isJson":false},重启整个项目后又能正常调用,能够稳定复现,能保证网络没有问题,请问这是什么情况?


    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public void askQuestion(WebSocketSession session, String question) {
        try {
            callWithSession(session,question, appId);
        }  catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.printf("Exception: %s", e.getMessage());
        }
    }

    public void callWithSession(WebSocketSession session, String question)
            throws ApiException, NoApiKeyException, InputRequiredException {

        ApplicationParam param = ApplicationParam.builder()
                .appId(configAppId)
                .prompt(question)
                .incrementalOutput(true)
                .build();

        // 获取多轮对话sessionId
        String key = "convercation_session:" + session.getId() ;
        String sessionId = redisTemplate.opsForValue().get(key);
        if(StringUtils.isNotEmpty(sessionId)){
            // 携带sessionId 实现多轮对话
            param.setSessionId(sessionId);
        }
        Application application = new Application();

        Flowable<ApplicationResult> result = application.streamCall(param);

        result.blockingForEach(data -> {
            session.sendMessage(new TextMessage(JsonUtils.toJson(data)));
            if(!data.getOutput().getFinishReason().equals("null") && !data.getOutput().getFinishReason().equals(null) && StringUtils.isNotEmpty(data.getOutput().getFinishReason())){
                // 全部的回答已经完成
                System.out.printf("requestId: %s, text: %s, finishReason: %s, sessionId: %s\n",
                        data.getRequestId(), data.getOutput().getText(), data.getOutput().getFinishReason(),data.getOutput().getSessionId());
                // 删除之前的验证码
                String delKey = "convercation_session:" + session.getId();
                redisTemplate.delete(delKey);
                // 存储多轮对话sessionId
                String addkey = "convercation_session:" + session.getId();
                redisTemplate.opsForValue().set(addkey, data.getOutput().getSessionId(), 60, TimeUnit.MINUTES);
            }
        });


    }

展开
收起
游客52fcmuduxeqem 2024-07-10 17:18:18 38 0
1 条回答
写回答
取消 提交回答
  • 我感觉还是网络不稳定的情况,导致连接中断。

    本产品(大模型服务平台百炼/2023-06-01)的OpenAPI采用RPC签名风格,签名细节参见签名机制说明。我们已经为开发者封装了常见编程语言的SDK,开发者可通过下载SDK直接调用本产品OpenAPI而无需关心技术细节。如果现有SDK不能满足使用需求,可通过签名机制进行自签名对接。由于自签名细节非常复杂,需花费 5个工作日左右。因此建议加入我们的服务钉钉群(11370001915),在专家指导下进行签名对接。
    在使用API前,您需要准备好身份账号及访问密钥(AccessKey),才能有效通过客户端工具(SDK、CLI等)访问API。细节请参见获取AccessKey。

    image.png

    参考文档https://help.aliyun.com/zh/model-studio/developer-reference/api-bailian-2023-06-01-overview?spm=a2c4g.2248627.0.i6

    2024-07-15 09:15:09
    赞同 2 展开评论 打赏

基于通义系列大模型和开源大模型的一站式大模型服务平台,提供「生成式大模型的全流程应用工具」和「企业大模型的全链路训练工具」。为大模型,也为小应用。

相关电子书

更多
Spring Boot2.0实战Redis分布式缓存 立即下载
CUDA MATH API 立即下载
API PLAYBOOK 立即下载