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

Java调用流式输出api时,绘图出不了图片链接,但是在调用非流式输出是可以出图片链接的,如何解决?

applicationResultFlowable.observeOn(Schedulers.io())
                            .map(applicationResult -> {
                                // 在prompt提到“画图”时,无法获取模型输出的text内容呢
                                return applicationResult.getOutput().getText();
                            })
                            .map(message -> message.replaceAll("\\s",""))
                            .filter(StringUtils::isNotBlank)
                            .flatMap(message ->{
                                String prevMessage = previousMessage.get();
                                String newMessage;
                                if (message.startsWith(prevMessage)) {
                                    newMessage = message.substring(prevMessage.length());
                                } else {
                                    newMessage = message;
                                }
                                previousMessage.set(message);
                                return Flowable.just(newMessage);
                            })
                            .scan(new StringBuilder(), (builder, part) -> builder.append(part))
                            .map(StringBuilder::toString)
                            .doOnNext(finalMessage -> {
                            })
                            .doOnError((e) -> log.error("sse error",e))
                            .doOnComplete(() -> {
                                    emitter.complete();
                            })
                            .subscribe();

展开
收起
louis6415-35205 2024-06-14 10:31:58 121 0
1 条回答
写回答
取消 提交回答
  • 这里有几个可能的原因及相应的解决思路:

    1. API响应结构差异:请确认流式输出和非流式输出的API响应结构是否一致。特别是检查在流式输出中图片链接是否以相同的方式和位置返回。如果流式API的响应格式不同,可能需要调整解析逻辑。
    2. 数据完全接收问题:流式API可能逐步发送数据,而您在处理过程中可能在数据完全到达之前就进行了处理。确保在收集完所有流数据片段后再尝试提取图片链接。可以考虑在.reduce().collect()操作中合并所有部分,确保在处理之前已经收到了完整的响应。
    3. 线程同步问题:由于您在.observeOn(Schedulers.io())指定了IO调度器,确保在处理响应数据时没有跨线程的数据竞争问题,特别是在更新previousMessage这样的共享状态时。
    4. 错误处理:您已经添加了.doOnError()来捕获错误,但没有具体的错误处理逻辑。请检查日志,看是否有相关的错误信息,这可能会指向问题所在。
    5. API调用限制:确认API文档中是否有针对流式请求的特殊限制或要求,比如特定的头部设置、参数格式等。

    解决思路:

    • 检查并调整数据处理逻辑:确保在所有数据片段都收到后再尝试提取图片链接。
    • 增加日志记录:在关键处理步骤前后增加日志记录,帮助定位问题发生的具体位置。
    • 验证API响应:使用Postman或类似工具直接调用流式API,对比响应内容与非流式API的差异。
    • 线程安全处理:确保在多线程环境下对共享变量的操作是线程安全的。
    • 查阅API文档:再次检查API提供商的文档,确认是否需要特殊处理流式响应。
    2024-06-14 17:02:16
    赞同 2 展开评论 打赏

基于通义系列大模型和开源大模型的一站式大模型服务平台,提供「生成式大模型的全流程应用工具」和「企业大模型的全链路训练工具」。为大模型,也为小应用。 阿里云百炼官网网址:https://www.aliyun.com/product/bailian

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载