本章代码已分享至Gitee:https://gitee.com/lengcz/ai-study.git
文章目录
- 阿里百炼平台兼容问题
-
-
- [📌 关于 `AlibabaOpenAiChatModel`](#📌 关于
AlibabaOpenAiChatModel) - [✅ 官方推荐方案](#✅ 官方推荐方案)
- [⚠️ 版本注意事项](#⚠️ 版本注意事项)
- [📌 关于 `AlibabaOpenAiChatModel`](#📌 关于
-
- 升级依赖版本(推荐)
- 测试智能客服
- 重写OpenAiChatModel
阿里百炼平台兼容问题
📌 关于 AlibabaOpenAiChatModel
这个类名并非 Spring AI Alibaba 官方标准库中的一部分。它更可能是早期版本(如 1.0.0-M6 及更早)中,开发者为了临时解决通义千问流式输出与 OpenAI 协议兼容性问题而自定义的适配类。
✅ 官方推荐方案
从 1.0.0-M7 版本开始,官方已原生解决了协议兼容性问题。现在接入通义千问模型,应根据使用场景选择以下官方标准类:
| 场景 | 推荐使用的官方标准类 | 说明 |
|---|---|---|
| 直接使用阿里云通义模型 | DashScopeChatModel |
这是 Spring AI Alibaba 为阿里云 DashScope 平台提供的原生实现,功能最完整。 |
| 通过 OpenAI 兼容协议接入 | OpenAiChatModel |
如果习惯用 OpenAI 的 API 风格,或需要接入 DeepSeek 等第三方模型,可通过配置 base-url 指向百炼的 OpenAI 兼容端点来使用。 |
⚠️ 版本注意事项
- 版本差异 :早期教程可能基于
1.0.0-M6等旧版本。请务必以官方最新文档为准。 - 依赖管理:确保使用了正确版本的 Spring AI Alibaba BOM(Bill of Materials)来管理依赖版本,避免版本冲突。
- 配置方式 :无论使用哪种
ChatModel,都需要在application.yml中正确配置api-key和base-url等关键参数。
升级依赖版本(推荐)
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lengcz</groupId>
<artifactId>ai-study</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ai-study</name>
<description>ai study</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M7</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>1.0.0-M7</version>
</dependency>-->
<!--1.0.0-M6 及以下使用这个,但是存在与openai兼容问题,不推荐–>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
<version>1.0.0-M7</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--建议不用使用自带的lombok,而是由自己指定版本-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.10.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.57</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
测试智能客服
将客服接口改为stream流的方式
java
@RequestMapping(value = "/service",produces = "text/html;charset=utf-8;")
public Flux<String> service(String prompt, String chatId) {
//1.保存会话id
chatHistoryRepository.save("service",chatId);
//2.请求模型
return serviceChatClient.prompt()
.user(prompt)
.advisors(a->a.param(CHAT_MEMORY_CONVERSATION_ID_KEY,chatId))
.stream() //阿里百炼虽然是支持openai接口规范,但实际调用时,必须使用call()方法,不能使用stream()方法
.content(); //stream() 表示流式输出
}
启动服务器测试

重写OpenAiChatModel
复制OpenAiChatModel,新增AlibabaOpenAiChatModel,以解决低版本问题,此步骤略。