ai开发-langchain4j-进阶-03-流式输出

1、流式输出

配置文件

复制代码
llm.config.aliQwenApiKey=sk-...........
llm.config.aliQwenModelName=qwen-plus
llm.config.aliQwenUrl=https://dashscope.aliyuncs.com/compatible-mode/v1

# 设置响应的字符编码,避免流式返回输出乱码
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true

controller 测试1

复制代码
    @Resource //直接使用 low-level LLM API
    private StreamingChatModel streamingChatLanguageModel;



// http://localhost:9007/chatstream/chat?prompt=济南有什么好吃的
    @GetMapping(value = "/chatstream/chat")
    public Flux<String> chat(@RequestParam("prompt") String prompt) {
        System.out.println("---come in chat");
        return Flux.create(emitter -> {
            streamingChatLanguageModel.chat(prompt, new StreamingChatResponseHandler() {
                @Override
                public void onPartialResponse(String partialResponse) {
                    emitter.next(partialResponse);
                }
                @Override
                public void onCompleteResponse(ChatResponse completeResponse) {
                    emitter.complete();
                }
                @Override
                public void onError(Throwable throwable) {
                    emitter.error(throwable);
                }
            });
        });
    }

controller 测试2

复制代码
    // http://localhost:9007/chatstream/chat2?prompt=济南有什么好吃的
    @GetMapping(value = "/chatstream/chat2")
    public void chat2(@RequestParam(value = "prompt", defaultValue = "北京有什么好吃") String prompt) {
        System.out.println("---come in chat2");
        streamingChatLanguageModel.chat(prompt, new StreamingChatResponseHandler() {
            @Override
            public void onPartialResponse(String partialResponse) {
                System.out.println(partialResponse);
            }

            @Override
            public void onCompleteResponse(ChatResponse completeResponse) {
                System.out.println("---response over: " + completeResponse);
            }

            @Override
            public void onError(Throwable throwable) {
                throwable.printStackTrace();
            }
        });
    }

2、自定义 ChatAssistant

复制代码
import reactor.core.publisher.Flux;

/**
 * @auther xulk
 * @Date 2026-06-30 16:19
 * @Description: TODO
 */
public interface ChatAssistant {
    String chat(String prompt);

    Flux<String> chatFlux(String prompt);
}

controller 测试3

复制代码
    @Resource //自己封装接口使用 high-level LLM API
    private ChatAssistant chatAssistant;

    
    // http://localhost:9007/chatstream/chat3?prompt=济南有什么好吃的
    @GetMapping(value = "/chatstream/chat3")
    public Flux<String> chat3(@RequestParam(value = "prompt", defaultValue = "南京有什么好吃") String prompt) {
        System.out.println("---come in chat3"); 
        return chatAssistant.chatFlux(prompt);
    }
相关推荐
树欲静·而风不止18 小时前
许愿式编程:我把 Typability 改成了能日常顶替 Typora 的样子
ai·markdown
香蕉大香蕉(06敬畏市场)21 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
骑着蜗牛撵大象3271 天前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
aichitang20241 天前
代数拓扑学与现代前沿视角
考研·算法·数学建模·ai·拓扑学·高考
遇码1 天前
2026-11-01-daw-retry-banner-body
人工智能·ai·rust·数据分析·大模型·agent
rich_Chan.1 天前
【2026 实操】bl video edit 教程:已拍素材改风格换颜色全流程,含输出规格、角标自查
人工智能·ai·云计算·aigc
小七-七牛开发者1 天前
AI Agent 的安全风险,正在从 Prompt 扩展到运行环境
ai·agent·security·权限管理·cursor
全栈练习生1 天前
大规模智能体仿真
python·ai
Anesthesia丶1 天前
基于 Qwen3-TTS 的多语言智能配音 Web 应用(Qwen3 TTS Studio)
python·ai·qwen-tts·agci
恩喜玛生物1 天前
蛋白质结构层级:从氨基酸序列到α螺旋、β折叠与多亚基组装
ai