恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

【智谱 AI 封装指南】流式对话vs普通对话

  • 首页
  • 资讯中心
  • /
  • 【智谱 AI 封装指南】流式对话vs普通对话

相关资讯

仪器仪表读数 自动化读数 opencb石油化工工业仪器仪表自动化识别 结合OpenCV进行图像处理和读数识别,Django作为后端框架,MySQL作为数据库,并使用前端技术构建用户界面 2026/9/4 18:43:29
DrugBank 5.1.7 数据库解析与应用:从数据架构到药物研发实战 2026/9/4 18:43:29
NVIDIA 129.3 亿美元收购 Hugging Face,能否打破硬件收购开源平台魔咒? 2026/9/4 18:43:29

最新资讯

Roblox 创作者生态入门:从环境配置到开发者分成与内容创作
世嘉DC索尼克乱入《刺猬索尼克3》:经典ROM Hack全解析
DC-3启示录:老系统如何成为运维界的“耐活王”
基于结构特征的跨模态图像配准:MATLAB实现红外与可见光图像对齐
从《刺猬索尼克3》DC版改版看ROM Hack逆向工程的技术价值
零代码、纯聊天,我把阶跃AI调教成了全能英语助手

今日推荐

爬虫防护实操:出海网站拦截恶意采集、垃圾爬虫、无效刷量,CDN 精准防护落地指南
STM32H743 SPI从机DMA双缓冲通信实战
CPU开盖降温教程:20元成本让温度直降30度的原理与实践

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

【智谱 AI 封装指南】流式对话vs普通对话

发布时间:2026/9/4 18:48:30
【智谱 AI 封装指南】流式对话vs普通对话 一、介绍1、文档模型概览 - 智谱AI开放文档智谱开放平台的开发指南中给出了三种调用方法HTTP、SDK和第三方框架。三种区别如下官方 SDK优点开箱即用自动封装请求 / 响应、流式解析代码简洁缺点绑定语言依赖 SDK 版本。适合快速开发本次选用方案。HTTP 原生调用优点跨语言、无 SDK 依赖请求高度可控缺点手动拼接 JSON、处理 SSE 流式、异常、重试代码量大。适合底层定制场景。第三方框架优点复用现有大模型框架代码多模型统一接入缺点受第三方框架限制版本兼容、新特性更新慢。适合多模型统一管理项目。二、接入SDK1.引入依赖注意技术较新一定要及时去看开发文档dependency groupIdai.z.openapi/groupId artifactIdzai-sdk/artifactId version0.3.5/version /dependency2.创建单元测试此时api-key可直接写死后续有api-key配置教程普通对话import ai.z.openapi.ZhipuAiClient; import ai.z.openapi.service.model.*; import ai.z.openapi.core.Constants; import java.util.Arrays; SpringBootTest public class ZhiPuAiTest { Test public void test() { // 初始化客户端 ZhipuAiClient client ZhipuAiClient.builder().ofZHIPU() .apiKey(你的api-key) .build(); // 创建聊天完成请求 ChatCompletionCreateParams request ChatCompletionCreateParams.builder() .model(glm-5.3) .messages(Arrays.asList( ChatMessage.builder() .role(ChatMessageRole.USER.value()) .content(你好请介绍一下自己) .build() )) .build(); // 发送请求 ChatCompletionResponse response client.chat().createChatCompletion(request); // 获取回复 if (response.isSuccess()) { Object reply response.getData().getChoices().get(0).getMessage(); System.out.println(AI 回复: reply); } else { System.err.println(错误: response.getMsg()); } }流式对话​ import ai.z.openapi.ZhipuAiClient; import ai.z.openapi.service.model.*; import ai.z.openapi.core.Constants; import java.util.Arrays; SpringBootTest public class ZhiPuAiTest { Test public void test() { ZhipuAiClient client ZhipuAiClient.builder().ofZHIPU() .apiKey(你的api-key) .build(); // 创建流式聊天请求 ChatCompletionCreateParams request ChatCompletionCreateParams.builder() .model(glm-5.3) .messages(Arrays.asList( ChatMessage.builder() .role(ChatMessageRole.USER.value()) .content(写一首关于春天的诗) .build() )) .stream(true) .build(); // 处理流式响应 ChatCompletionResponse response client.chat().createChatCompletion(request); if (response.isSuccess() response.getFlowable() ! null) { response.getFlowable().subscribe( data - { // 处理流式数据块 if (data.getChoices() ! null !data.getChoices().isEmpty()) { Delta content data.getChoices().get(0).getDelta(); System.out.print(content); } }, error - System.err.println(\n 流式错误: error.getMessage()), () - System.out.println(\n 流式完成) } } ​三、封装1.为什么要封装一个是为了方便调用再一个如果代码里到处都是你的api-key吧万一被别人刷了为钱包哭泣吧。。。。2.配置application.yml文件ai: apiKey: xxx注意配置格式要求非常严apikey后面一定要有一个空格3.定义config类Configuration ConfigurationProperties(prefix ai)//ai要与你上述yml文件中的保持一致 Data public class AiConfig { private String apiKey;//要与你yml文件中的名字保持一致 Bean public ZhipuAiClient zhipuAiClient() { return ZhipuAiClient.builder() .ofZHIPU() .apiKey(apiKey)//这里名字也要保持一致 .build(); } }4.封装请求模块根据阿里开发规范把对大模型的调用放在manager包下我们封装的思想是层层简化先封装最简单通用的方法再提供不同参数默认值的简化调用方法。通用模块/** * 通用请求(简化请求) * param messages 聊天消息列表 * param stream 是否使用流式响应 * param temperature 温度参数控制回答的随机性 * return AI返回的聊天内容 */ public String doRequest(ListChatMessage messages, Boolean stream, Float temperature) { // 构建请求参数对象 ChatCompletionCreateParams request ChatCompletionCreateParams.builder() .model(glm-5.3) // 指定使用的AI模型 .stream(stream) // 设置是否流式响应 .temperature(temperature) // 设置温度参数 .messages(messages) // 传入聊天消息列表 .build(); try { // 发送聊天请求并获取响应 ChatCompletionResponse response client.chat().createChatCompletion(request); // 检查响应是否成功 if (!response.isSuccess()) { throw new RuntimeException(调用智谱失败 response.getMsg()); } // 提取并返回AI生成的回复内容 return response.getData().getChoices().get(0).toString(); } catch (Exception e) { e.printStackTrace(); // 替换为你项目自定义业务异常没有就直接抛RuntimeException throw new RuntimeException(AI调用异常 e.getMessage(), e); } }简化通用请求的消息传递/** * 通用请求简化消息传递 * * param systemMessage * param userMessage * param stream * param temperature * return */ public String doRequest(String systemMessage, String userMessage, Boolean stream, Float temperature) { ListChatMessage chatMessageList new ArrayList(); ChatMessage systemChatMessage new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage); chatMessageList.add(systemChatMessage); ChatMessage userChatMessage new ChatMessage(ChatMessageRole.USER.value(), userMessage); chatMessageList.add(userChatMessage); return doRequest(chatMessageList, stream, temperature); }这个重载方法内部自动组装系统消息、用户消息为消息列表再调用底层通用方法上层只需传入文本字符串省去手动构建消息集合的代码。通用同步请求/** * 同步请求 * * param systemMessage * param userMessage * param temperature * return */ public String doSyncRequest(String systemMessage, String userMessage, Float temperature) { return doRequest(systemMessage, userMessage, Boolean.FALSE, temperature); }由于上面已经封装了通用请求所以直接返回就好通用流式请求/** * 通用流式请求(简化请求) * param messages 聊天消息列表 * param temperature 温度参数控制回答的随机性 * return AI返回的聊天内容 */ public FlowableModelData doStreamRequest(ListChatMessage messages, Float temperature) { // 构建请求参数对象 ChatCompletionCreateParams request ChatCompletionCreateParams.builder() .model(glm-5.3) // 指定使用的AI模型 .stream(Boolean.TRUE) // 设置是否流式响应 .temperature(temperature) // 设置温度参数 .messages(messages) // 传入聊天消息列表 .build(); try { ChatCompletionResponse response client.chat().createChatCompletion(request); // 判断响应是否成功 if (!response.isSuccess() || response.getFlowable() null) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, 智谱AI流式响应获取失败); } return response.getFlowable(); } catch (Exception e) { e.printStackTrace(); throw new BusinessException(ErrorCode.SYSTEM_ERROR, e.getMessage()); } }流式请求简化消息/** * 通用流式请求简化消息传递 * * param systemMessage * param userMessage * param temperature * return */ public FlowableModelData doStreamRequest(String systemMessage, String userMessage, Float temperature) { ListChatMessage chatMessageList new ArrayList(); ChatMessage systemChatMessage new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage); chatMessageList.add(systemChatMessage); ChatMessage userChatMessage new ChatMessage(ChatMessageRole.USER.value(), userMessage); chatMessageList.add(userChatMessage); return doStreamRequest(chatMessageList, temperature); }到此就结束辣最后去单元测试里实验一下吧。如果api-key传输有问题可以看这篇文章测试类注入 ZhipuAiClient 报空指针 NullPointerExceptionzhipuAiClient null-CSDN博客

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号