首页 > 编程语言 >Java Chassis 3技术解密,流式响应如何简化AI应用开发

Java Chassis 3技术解密,流式响应如何简化AI应用开发

时间:2024-07-01 10:41:53浏览次数:1  
标签:Publisher Java AI sseModel sseString 流式 响应 Chassis 服务

本文分享自华为云社区《Java Chassis 3技术解密:流式响应和人工智能应用开发》,作者:liubao68。

随着生成式人工智能技术的发展,应用程序开发者对于流式响应(Streaming Responses)的诉求越来越多。服务器事件推送(Server Push Events)技术能够在使用HTTP协议的前提下,提供流式响应能力。然而,在微服务架构下使用流式响应并不是那么方便,现有的各个微服务开发框架都需要使用不同于响应应答的普通REST接口额外能力,采用新的技术或者API来满足流式响应的开发诉求,增加了技术成本。

Java Chassis 3基于服务器事件推送和响应式流(reactive streams)标准,提供了非常简洁的流式响应开发能力,简化人工智能应用开发体验。

使用流式响应

首先,看看微服务架构下一个简单的调用场景。

  前端(浏览器) -> 应用网关(edge service) -> 消费者微服务 -> 提供者微服务
  • 提供者微服务:定义流式响应服务和生成流式响应

定义流式响应服务非常简单,只需要将响应类型声明为 Publisher。 业务逻辑可以使用 RxJava 或者 Reactor 等框架生成流式响应。 在下面的例子中,使用 RxJava3 的API来实现流式响应。

@RestSchema(schemaId = "ReactiveStreamController")
@RequestMapping(path = "/")
public class ReactiveStreamController {
  @GetMapping("/sseString")
  public Publisher<String> sseString() {
    return Flowable.fromArray("a", "b", "c");
  }

  @GetMapping("/sseModel")
  public Publisher<Model> sseModel() {
    return Flowable.intervalRange(0, 5, 0, 1, TimeUnit.SECONDS)
        .map(item -> new Model("jack", item.intValue()));
  }
}
  • 消费者微服务: 消费流式响应,并对外提供新的流式响应服务

消费者可以像调用普通REST接口一样调用流式响应服务,开发起来非常简单。

@RestSchema(schemaId = "ReactiveStreamController")
@RequestMapping(path = "/")
public class ConsumerReactiveStreamController {
  interface ProviderReactiveStreamController {
    Publisher<String> sseString();

    Publisher<Model> sseModel();
  }

  @RpcReference(microserviceName = "provider", schemaId = "ReactiveStreamController")
  ProviderReactiveStreamController controller;

  @GetMapping("/sseString")
  public Publisher<String> sseString() {
    return controller.sseString();
  }

  @GetMapping("/sseModel")
  public Publisher<Model> sseModel() {
    return controller.sseModel();
  }
}
  • 应用网关:透明转发

应用网关无需做额外配置,能够实现流式响应的透明转发。

  • 前端(浏览器):消费消息

大部分浏览器都支持通过 EventSource 消费流式响应。下面是简单的代码片段:

<script>
    var sse = new EventSource("http://localhost:9090/sseModel");

    sse.onmessage = function (ev) {
        var elementById = document.getElementById("ssediv");
        elementById.innerHTML = elementById.innerHTML + "\n" + ev.data;
    }

    sse.onerror = function (){
        sse.close()
    }

    sse.onopen = function (){
    }
</script>

相关的技术实现

Spring Boot采用SseEmitter来定义服务器事件推送,如果需要使用流式响应,则必须使用WebFlux,在微服务场景下,则需要使用WebClient来消费。这些使用方式与WebMvc集成和注册发现集成都会带来非常大的开发麻烦。 Java Chassis 3给开发者提供了非常棒的统一一致的开发体验。

在 小艺 人工智能应用中,需要大量使用流式响应,包括微服务之间。为了实现这些功能,需要额外开发大量代码,并且与现有的REST框架没有实现统一一致的服务治理规范,给应用的可维护性和质量带来了隐患。 通过新的流式响应API能够极大的简化小艺场景的开发。

点击关注,第一时间了解华为云新鲜技术~

 

标签:Publisher,Java,AI,sseModel,sseString,流式,响应,Chassis,服务
From: https://www.cnblogs.com/huaweiyun/p/18277566

相关文章

  • 【Java完整版 面试必备】Leetcode Top100题目和答案-哈希
    以下摘自leetcodeTop100精选题目-哈希1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。......
  • AI大模型:解锁未来职业竞争力的金钥匙
    AI元年:大模型的革新力量随着ChatGPT的震撼登场,2023年被标记为AI元年,大模型以其前所未有的影响力,重塑我们的日常生活和工作方式。从日常的问答对话到复杂的编程辅助,乃至创意图像生成,AI大模型展现出超乎想象的能力,预示着“未来已来”,并成为互联网行业的新宠。大模型人才:高......
  • 存档main
    import'package:flutter/material.dart';import'package:gowater/widget/buy-water.dart';import'package:gowater/widget/history.dart';////voidmain(){runApp(constGoWaterMyApp());}classGoWaterMyAppextendsStatele......
  • (免费领源码)java#Springboot#mysql物品代拿系统32500-计算机毕业设计项目选题推荐
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术开发,Sp......
  • AI绘画升温、AI写作降温,AIGC玩“变脸”
    前言AI作为先进科技技术的代表领域之一,一直都颇受人们的关注。经过这些年的发展,AI越来越聪明,甚至在某些领域已经能达成甚至超越人类的能力水平。本文作者围绕AI进行了分析,希望对你有帮助。自柯洁在“围棋人机大战”中惜败AlphaGo后,AI再次上演打败艺术家的戏码,AIGC(人工......
  • Java 说一下你熟悉的设计模式?
    在Java开发中,设计模式是常用的解决方案,用于解决软件设计中的常见问题。以下是一些常用的设计模式:创建型模式(CreationalPatterns)单例模式(SingletonPattern):确保一个类只有一个实例,并提供一个全局访问点。示例:publicclassSingleton{privatestaticSingletoni......
  • 千万别忽视基础!十张图带你一步步理解Java内存结构!
    作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发。但是一旦发生内存泄漏或者内存溢出,如果对Java内存结构不清楚,那将会是一件非常麻烦的事情!本文笔者将为大家详解Java内存结构。面试tips聊聊......
  • 基于JAVA的学生信息管理系统设计(答辩稿)
    基于JAVA的学生信息管理系统设计目录一、选题背景及意义1二、国内外研究现状22.1国内研究现状22.2国外研究现状2三、研究主要内容2四、功能设计34.1学生用户功能34.2教师用户功能34.3管理员用户功能34.4数据库设计4五、系统实现5六、总结8参考文......
  • 基于JAVA的学生信息管理系统设计
    目录摘要IIIABSTRACTIV1绪论11.1选题背景及意义11.1.1选题背景11.1.2选题意义11.2国内外研究现状及发展趋势21.2.1国内研究现状21.2.2国外研究现状21.2.3发展趋势21.3研究主要内容32相关技术概论52.1JavaWeb52.2Hibernate52.3MYSQL72......
  • 详述Python环境下配置AI大模型Qwen-72B的步骤
    随着人工智能技术的发展,大规模预训练模型如Qwen-72B等逐渐成为研究和应用的重点。本篇博客旨在提供一份详细的指南,帮助Python开发者们在自己的环境中顺利配置并使用Qwen-72B大模型。请注意:由于Qwen-72B这一模型目前并未公开存在,所以以下内容仅为假设性描述,实际上你需要替换为......