新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/4 18:49:04来源:尧图网络
【智谱 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博客
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于PCA的人脸识别系统:从算法原理到MATLAB工程实践 2026/9/4 19:34:12

基于PCA的人脸识别系统:从算法原理到MATLAB工程实践

简介:本资源是一套完整、可直接运行的MATLAB人脸识别实践项目,面向本科高年级学生及研究生,适用于毕业设计、课程设计与期末大作业等教学场景,聚焦PCA降维与特征脸识别核心算法实现。压缩包共2003个文件(119.32MB&…

阅读更多 →
Livox SDK主控库开发指南:从核心原理到Mid-360实战应用 2026/9/4 19:34:12

Livox SDK主控库开发指南:从核心原理到Mid-360实战应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从情感计算到工程实践:构建与管理高质量伤感音乐合集 2026/9/4 19:34:12

从情感计算到工程实践:构建与管理高质量伤感音乐合集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
肖尔算法:量子计算如何实现大数分解的指数级加速 2026/9/4 19:34:12

肖尔算法:量子计算如何实现大数分解的指数级加速

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Python AI数据科学实战:从自动化特征工程到AutoML模型部署 2026/9/4 19:34:12

Python AI数据科学实战:从自动化特征工程到AutoML模型部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
STM32F407高保真音频采集与实时存储系统设计全解析 2026/9/4 19:31:12

STM32F407高保真音频采集与实时存储系统设计全解析

简介:本资源是一套基于STM32F407ZGT6的高保真音频采集与实时存储系统完整嵌入式开发工程,面向电子类本科生、嵌入式开发者及音视频硬件工程师,解决高精度音频信号采集、低失真数字化处理与大容量本地存储等典型工业级需求。工程包含357个文件…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞