欢迎光临
我们一直在努力

第七篇:SpringAI 实战 07|通过SpringAI接入通义千问

导读:前面章节我们搭建了基础 SpringAI 工程,体验了基础对话能力。实际开发场景里,原生 OpenAI 存在网络代理、延迟高、访问不稳定等问题,并不适配国内业务。

本章基于固定环境:JDK21 + Gradle8.8 + SpringBoot3.5.14 + SpringAI1.1.7,手把手完成阿里云通义千问接入。

本章采用阿里云官方 OpenAI 兼容协议适配。 额外配套配置打印校验功能,直观查看加载的接口地址、模型名称,不再盲目猜测配置是否生效,零基础也能一次运行成功。

一、版本适配环境清单

  • JDK:21
  • Gradle:8.8
  • SpringBoot:3.5.14
  • SpringAI:1.1.7
  • IDEA:2023社区版

二、build.gradle 完整依赖配置

直接覆盖项目原有 build.gradle 文件

plugins {
id 'java'
id 'org.springframework.boot' version '3.5.14'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}

repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
mavenCentral()
// Spring AI 官方仓库
maven { url 'https://repo.spring.io/release' }
maven { url 'https://repo.spring.io/milestone' }
}

dependencies {
// 基础Web服务
implementation 'org.springframework.boot:spring-boot-starter-web'
// 1.OpenAI 驱动包:对接GPT系列模型,兼容通义
implementation 'org.springframework.ai:spring-ai-starter-model-openai:1.1.7'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}

修改完毕后,点击 IDEA 右侧 Gradle 面板 Reload All Gradle Projects,等待依赖自动下载。

三、application.yml 通义千问专属配置

文件路径:src/main/resources/application.yml

spring:
ai:
openai:
# 替换为你在阿里云百炼平台获取的真实 API Key
api-key: sk-xxxxxxxxxxxxxxxxxxxx
# 关键配置:DashScope 的 OpenAI 兼容模式 endpoint
base-url: https://dashscope.aliyuncs.com/compatible-mode
chat:
options:
# 指定使用 qwen-turbo 模型
model: qwen-turbo
# 控制输出的随机性,对话类应用建议 0.7
temperature: 0.7
# 限制最大生成 Token 数,防止回复过长
max-tokens: 1024

避坑:我这个版本base-url不能用,否则要报错误:

o.s.a.r.a.SpringAiRetryAutoConfiguration : Retry error. Retry count: 1,  Exception: HTTP 404 – No response body available

四、业务 Controller 代码(带配置打印校验)

package com.example.demo;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.openai.OpenAiChatProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/ai")
public class ChatController {

private final ChatClient chatClient;
// 配置读取类,获取yml真实加载参数
private final OpenAiChatProperties aiProperties;

public ChatController(ChatClient.Builder builder, OpenAiChatProperties aiProperties) {
this.chatClient = builder.build();
this.aiProperties = aiProperties;

// 项目启动自动打印配置,校验是否加载成功
System.out.println("========== 模型配置加载信息 ==========");
System.out.println("请求Base地址:" + aiProperties.getBaseUrl());
System.out.println("当前使用模型:" + aiProperties.getOptions().getModel());
System.out.println("Temperature值:" + aiProperties.getOptions().getTemperature());
System.out.println("=====================================");
}

/**
* 通用对话接口
* @param message 用户提问内容
* @return AI返回文本结果
*/
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return chatClient.prompt(message)
.call()
.content();
}
}

五、启动校验与接口测试

1、启动控制台校验输出

正常启动无报错,控制台打印如下内容即代表通义千问配置完全生效

========== 模型配置加载信息 ========== 请求Base地址:https://dashscope.aliyuncs.com/compatible-mode/v1 当前使用模型:qwen-turbo Temperature值:0.7 =====================================

2、浏览器访问测试接口

访问地址

http://localhost:8080/ai/chat?message=简单介绍SpringAI框架

页面正常返回通义千问生成的回答文本,对接完成。

六、核心底层原理讲解

  • 配置自动绑定:SpringAI 自动扫描 yml 内 ai.openai 配置,注入至 OpenAiChatProperties,全程无需手动读取配置文件
  • 兼容协议适配:通义千问对外暴露和 OpenAI 一模一样的请求体、返回体结构,OpenAI 驱动可直接转发请求
  • ChatClient 统一抽象:不管底层对接哪家兼容模型,上层调用三段式代码prompt()->call()->content()永久不变
  • 真实配置校验:OpenAiChatProperties 读取的是程序实际运行加载的值,区别于本地 yml 文本,可规避缓存、多配置文件覆盖问题
  • 七、高频问题排错 

  • 调用接口超时无响应 排查:核对 base-url 地址拼写、api-key 密钥是否有效、账号调用额度是否耗尽
  • 返回模型名称不存在报错 排查:严格复制阿里云官方模型标识,不能简写、自定义别名
  • 上一篇:SpringAI 入门 06|官方核心概念全解析(Models/Prompt/Embedding/RAG/Tool Calling

    赞(0)
    未经允许不得转载:171主机测评 » 第七篇:SpringAI 实战 07|通过SpringAI接入通义千问
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址