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

01 spring ai alibaba(SAA1.1.2)基础聊天实现-ChatModel

前置条件

在使用 DashScopeChatModel 之前,你需要:

  1. 获取 DashScope API Key:访问 阿里云百炼
  2. 设置环境变量:export AI_DASHSCOPE_API_KEY=your_api_key

添加依赖

<dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-dashscope</artifactId> <version>1.1.2.1</version> </dependency>

基础使用

创建 ChatModel
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi; import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel; import org.springframework.ai.chat.model.ChatModel; // 创建 DashScope API 实例 DashScopeApi dashScopeApi = DashScopeApi.builder() .apiKey(System.getenv("AI_DASHSCOPE_API_KEY")) .build(); // 创建 ChatModel ChatModel chatModel = DashScopeChatModel.builder() .dashScopeApi(dashScopeApi) .build();
简单调用
// 使用字符串直接调用 String response = chatModel.call("介绍一下Spring框架"); System.out.println(response);
使用 Prompt
import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatResponse; // 创建 Prompt Prompt prompt = new Prompt(new UserMessage("解释什么是微服务架构")); // 调用并获取响应 ChatResponse response = chatModel.call(prompt); String answer = response.getResult().getOutput().getText(); System.out.println(answer);

配置选项

使用 ChatOptions

DashScopeChatOptions 配置示例

import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions; DashScopeChatOptions options = DashScopeChatOptions.builder() .model("qwen-plus") // 模型名称 .temperature(0.7) // Temperature 参数 .maxToken(2000) // 最大令牌数 .topP(0.9) // Top-P 采样 .build(); ChatModel chatModel = DashScopeChatModel.builder() .dashScopeApi(dashScopeApi) .defaultOptions(options) .build();

常用选项说明

  • model: 要使用的模型 ID
  • frequencyPenalty: 频率惩罚(-2.0 到 2.0),降低重复令牌的可能性
  • maxTokens: 生成响应的最大令牌数
  • presencePenalty: 存在惩罚(-2.0 到 2.0),鼓励谈论新主题
  • stopSequences: 停止序列列表,遇到时停止生成
  • temperature: 采样温度(0.0 到 2.0),控制随机性
  • topK: Top-K 采样参数
  • topP: Top-P(核采样)参数

此外,每个特定模型的 ChatModel/StreamingChatModel 实现都可以有自己的选项。例如,OpenAI Chat Completion 模型有自己的选项,如logitBiasseeduser

这是一个强大的功能,允许开发者在启动应用程序时使用特定于模型的选项,然后在运行时使用Prompt请求覆盖它们。

运行时覆盖选项

通过prompt运行时覆盖选项示例

// 创建带有特定选项的 Prompt DashScopeChatOptions runtimeOptions = DashScopeChatOptions.builder() .withTemperature(0.3) // 更低的温度,更确定的输出 .withMaxToken(500) .build(); Prompt prompt = new Prompt( new UserMessage("用一句话总结Java的特点"), runtimeOptions ); ChatResponse response = chatModel.call(prompt);

流式响应

流式响应示例

import reactor.core.publisher.Flux; // 使用流式 API Flux<ChatResponse> responseStream = chatModel.stream( new Prompt("详细解释Spring Boot的自动配置原理") ); // 订阅并处理流式响应 responseStream.subscribe( chatResponse -> { String content = chatResponse.getResult() .getOutput() .getText(); System.out.print(content); }, error -> System.err.println("错误: " + error.getMessage()), () -> System.out.println(" 流式响应完成") );

多轮对话

多轮对话示例

import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.messages.AssistantMessage; import java.util.List; // 创建对话历史 List<Message> messages = List.of( new SystemMessage("你是一个Java专家"), new UserMessage("什么是Spring Boot?"), new AssistantMessage("Spring Boot是..."), new UserMessage("它有什么优势?") ); Prompt prompt = new Prompt(messages); ChatResponse response = chatModel.call(prompt);

函数调用(外部工具)

DashScopeChatModel 支持函数调用(Function Calling),允许模型调用外部函数:

函数调用示例

import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.tool.ToolCallback; import org.springframework.ai.tool.function.FunctionToolCallback; // 定义函数工具 ToolCallback weatherFunction = FunctionToolCallback.builder("getWeather", (String city) -> { // 实际的天气查询逻辑 return "晴朗,25°C"; }) .description("获取指定城市的天气") .inputType(String.class) .build(); // 使用函数 DashScopeChatOptions options = DashScopeChatOptions.builder() .withToolCallbacks(List.of(weatherFunction)) .build(); Prompt prompt = new Prompt("北京的天气怎么样?", options); ChatResponse response = chatModel.call(prompt);
http://www.jsqmd.com/news/499634/

相关文章:

  • 计算机毕设 java 米果智能食堂管理系统分析与设计 Java+SpringBoot 智能食堂点餐管理平台 Web 版校园食堂线上订餐系统
  • 非支配排序多目标黏菌优化算法(NSSMA) —— Matlab实现 测试函数包括ZDT、DTL...
  • 高通实习面经
  • AI职业末日图爆火,6000万白领岗危了
  • 深入 Java 垃圾回收调优:从底层原理到落地实战,攻克性能瓶颈
  • 软件综合项目-mqtt
  • ChatGPT和Gemini怎么导出成长图
  • 速看!!安全员ABC证靠谱的查询方式有哪几种?分别是怎么查询呢?
  • 关于密码破解的方式
  • Qt导航栏组件A05:多文档编辑器的「打开文件列表」侧栏
  • 计算机毕设 java 门诊管理系统 Java+SpringBoot 门诊医疗管理平台 Web 版医院门诊诊疗管理系统
  • 基于能量分配的光伏混合储能系统仿真模型 ①光伏:采用mppt控制实现最大功率跟踪 ②蓄电池与超...
  • Vue3 按钮切换示例(启动 / 关闭互斥显示)
  • 动态规划_最长递增子序列_C++
  • 计算机毕设 java 课程教学平台设计与实现 Java+SpringBoot 课程教学管理平台 Web 版在线课程学习管理系统
  • STL:string
  • AI智能水库图像识别数据集 水面漂浮物识别 水面分割识别 河道护栏分割数据集 YOLO格式数据集第10573期
  • 泰思特电子分享_EMC测试电流探头选型差异性及影响因素探讨
  • SPI子系统源码剖析--(2)Spi_Master驱动框架
  • TSMC 28nm工艺库,可仿真-文档齐全
  • Android Studio 安装教程(Windows 超详细图文版)
  • 洛谷:P5744 【深基7.习9】培训
  • 计算机毕设 java 口腔牙科诊所管理系统 Java+SpringBoot 口腔牙科诊疗管理平台 Web 版牙科门诊就医管理系统
  • 16、【Agent】【OpenCode】源码构建(Bun介绍)
  • python-web自动化-selenium(1)
  • OpenClaw常见4大赋能工作场景
  • Python asyncio 调度模型的可视化分析
  • 2026-03-17 每日作战任务:RAG 语料高效切分(Text Chunking)与处理
  • JAVA数据结构 DAY8-堆
  • 大模型的那点事儿