DashScope
在本章节中,我们将学习如何使用 Spring AI Alibaba 接入阿里云 DashScope 系列模型。在开始学习之前,请确保您已经了解相关概念。
- Chat Client;
 - Chat Model;
 - Spring AI Alibaba 快速开始;
 - 本章节的代码您可以在 Spring AI Alibaba Example 仓库找到。
 
本示例主要演示如何以 ChatModel 形式接入。关于如何使用 ChatClient,请参考 Github 代码仓库示例。
DashScope 平台
灵积通过灵活、易用的模型 API 服务,让各种模态模型的能力,都能方便的为 AI 开发者所用。通过灵积 API,开发者不仅可以直接集成大模型的强大能力,也可以对模型进行训练微调,实现模型定制化。
Spring AI Alibaba 接入
- 
引入
spring-ai-alibaba-starter:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.4</version></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M5.1</version></dependency> - 
配置 application.yml:
spring:ai:dashscope:api-key: ${AI_DASHSCOPE_API_KEY} - 
注入 ChatModel:(假设类名为 DashScopeChatModelController)
private final ChatModel dashScopeChatModel;public DashScopeChatModelController(ChatModel chatModel) {this.dashScopeChatModel = chatModel;} - 
编写 Controller 接口:
@GetMapping("/simple/chat")public String simpleChat() {return dashScopeChatModel.call(new Prompt(DEFAULT_PROMPT)).getResult().getOutput().getContent();}/*** Stream 流式调用。可以使大模型的输出信息实现打字机效果。* @return Flux<String> types.*/@GetMapping("/stream/chat")public Flux<String> streamChat(HttpServletResponse response) {// 避免返回乱码response.setCharacterEncoding("UTF-8");Flux<ChatResponse> stream = dashScopeChatModel.stream(new Prompt(DEFAULT_PROMPT));return stream.map(resp -> resp.getResult().getOutput().getContent());} 
至此,已经完成了 DashScope 的基本接入。现在您已经可以和 DashScope 模型对话了。
进阶使用
动态设置 DashScope Options
Spring AI Alibaba 的运行时 Options 同 Spring AI。分为 Runtime Options 和 Default Options。在 application.yml 中配置的 options 参数为 Default Options。
优先级顺序为:Runtime Options > Default Options。
既您可以在模型运行时,动态设置模型参数,包括本次请求使用的模型等参数信息。
@GetMapping("/custom/chat")public String customChat() {
    DashScopeChatOptions customOptions = DashScopeChatOptions.builder()            .withTopP(0.7)            .withTopK(50)            .withTemperature(0.8)            .withModel("xxx")            .build();
    return dashScopeChatModel.call(new Prompt(DEFAULT_PROMPT, customOptions)).getResult().getOutput().getContent();}结构化返回
在模型请求中,您可以指定模型的返回格式。使模型返回您需要的数据格式。
目前支持的输出格式为:TEXT 和 JSON_OBJECT。
您可以通过指定以下 Options 参数实现:
public XXXontroller(ChatModel chatModel) {
    DashScopeResponseFormat responseFormat = new DashScopeResponseFormat();    responseFormat.setType(DashScopeResponseFormat.Type.JSON_OBJECT);
    this.chatModel = chatModel;    this.dashScopeChatClient = ChatClient.builder(chatModel)            .defaultOptions(                    DashScopeChatOptions.builder()                            .withTopP(0.7)                            .withResponseFormat(responseFormat)                            .build()            )            .build();}