当前位置: 首页 > news >正文

Solon AI 开发学习6 - chat - 两种 http 流式输入输出

http 流式输出(主要是指文本流式输出),需要使用响应式接口和支持流输出的 mime 声明。常见的有两种文本流式输出:

1、输出 sse(Server Sent Event)

输出的格式:以 sse 消息块为单位,以"空行"为识别间隔。

示例代码:

import org.noear.solon.annotation.Mapping;
import org.noear.solon.annotation.Produces;
import org.noear.solon.core.util.MimeType;
import org.noear.solon.web.sse.SseEvent;
import reactor.core.publisher.Flux;import java.io.IOException;@Produces(MimeType.TEXT_EVENT_STREAM_UTF8_VALUE)
@Mapping("case1")
public Flux<SseEvent> case1(String prompt) throws IOException {return Flux.from(chatModel.prompt(prompt).stream()).filter(resp -> resp.hasContent()).map(resp -> new SseEvent().data(resp.getContent()));
}

输出效果如下(sse 消息块有多个属性,data 为必选,其它为可选):

data:{"role":"ASSISTANT","content":"xxx"}data:{"role":"ASSISTANT","content":"yyy"}

2、输出 ndjosn(Newline-Delimited JSON)

输出的格式:以 json 消息块为单位,以"换行符"为识别间隔。

import org.noear.solon.ai.chat.message.AssistantMessage;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.annotation.Produces;
import org.noear.solon.core.util.MimeType;
import reactor.core.publisher.Flux;import java.io.IOException;@Produces(MimeType.APPLICATION_X_NDJSON_UTF8_VALUE)
@Mapping("case2")
public Flux<AssistantMessage> case2(String prompt) throws IOException {return Flux.from(chatModel.prompt(prompt).stream()).map(resp -> resp.getMessage());
}

输出效果如下:

{"role":"ASSISTANT","content":"xxx"}
{"role":"ASSISTANT","content":"yyy"}

3、获取

上面讲的是作为 server 以流式输出。solon-net-httputils 则提供了,作为客户端接收流式获取(或接收)的能力:

  • 使用 HttpUtils 获取文本行流(比如 ndjosn)
Publisher<String> publisher = HttpUtils.http("http://localhost:8080/stream").execAsLineStream("GET");
  • 使用 HttpUtils 获取 ServerSentEvnet (简称:sse)文本流
Publisher<ServerSentEvent> publisher = HttpUtils.http("http://localhost:8080/sse").execAsSseStream("GET");
http://www.jsqmd.com/news/55585/

相关文章:

  • PeView 4.0 正式发布:AI赋能PE静态分析
  • LyScript 2.0 正式发布:AI赋能x64dbg逆向工程
  • LyDebug 2.1 正式发布:基于CLI的动态调试器
  • ACL自然语言处理技术研究新进展
  • 应用安全 --- 安卓加固 之 控制流混淆
  • 应用安全 --- 安卓加固 之 调试 反调试 反反调试
  • 2025年下半年螺丝椒种子品牌综合推荐与选购指南
  • 2025年下半年辣椒种子公司推荐榜单
  • 2025年下半年螺丝椒种子品牌综合评测与选购指南
  • 2025年下半年螺丝椒种子品牌综合推荐指南:五大优质供应商解析
  • 2025年下半年线椒种子品牌综合评测与选购指南
  • 2025年下半年探水钻机品牌综合推荐与选购指南
  • 2025年下半年履带钻机品牌综合选购指南及市场主流品牌推荐
  • 2025年下半年勘探钻机品牌综合评测与选购指南
  • 在AI技术快速实现创意的时代,挖掘项目管理系统新需求成为关键
  • 某中心在印度投资150亿美元建设AI技术中心
  • 基于CanMV K230的工地巡检机器人
  • 内网服务器的“求生之路”:手把手搭建企业级离线 YUM/APT 仓库(告别 U 盘拷包)
  • PDF报表-JasperReports
  • CF2161G Editorial
  • 数组高阶方法:map、filter、reduce实战指南
  • 设备能力检测:自适应不同硬件环境
  • DuckDB:轻量级 OLAP 数据库的新星
  • 跨设备剪贴板数据:实现应用间内容共享
  • Text组件高级排版技巧:字体样式与文本布局深度优化
  • 通知与提醒系统:即时消息与日程管理实现
  • try/catch/finally:完善的错误处理策略
  • 4种XML解析方式详解
  • 20232415 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 2025 Launch X431 PRO3 ACE: Online ECU Coding 38+ Services for Euro/Amer Vehicles with CANFD/DoIP