📖 本章预览
本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。
第3章 一套代码接入所有主流大模型
3.1 ChatModel 统一抽象接口
3.1.1 接口设计
Spring AI 的核心设计哲学是"面向接口编程"。所有模型提供商都实现同一个 ChatModel 接口,业务代码只依赖接口,不依赖具体实现。
ChatModel(接口)
├── DashScopeChatModel // 通义千问
├── OpenAiChatModel // OpenAI
├── OllamaChatModel // Ollama 本地模型
├── MoonshotChatModel // Moonshot
└── ... // 其他厂商
核心方法:
public interface ChatModel {
/** 最简调用:传入字符串,返回字符串 */
String call(String message);
/** 完整调用:传入 Prompt(消息列表+参数),返回 ChatResponse */
ChatResponse call(Prompt prompt);
}
public interface StreamingChatModel {
/** 流式调用:返回 Flux,实时推送生成内容 */
Flux<ChatResponse> stream(Prompt prompt);
}
3.1.2 为什么这样设计
// 业务代码只依赖 ChatModel 接口
@Service
public class TranslationService {
private final ChatModel chatModel; // 不关心是哪个模型
public TranslationService(ChatModel chatModel) {
this.chatModel = chatModel;
}
public String translate(String text, String targetLanguage) {
SystemMessage system = new SystemMessage(
"你是一个专业翻译,将用户输入翻译为" + targetLanguage
);
UserMessage user = new UserMessage(text);
return chatModel.call(new Prompt(List.of(system, user)))
.getResult().getOutput().getText();
}
}
// 切换模型只需改 pom.xml 依赖和 application.yml 配置
// TranslationService 的代码一个字都不用改
3.2 多模型提供商接入实战
3.2.1 阿里云通义千问(DashScope)
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0</version>
</dependency>
spring:
ai:
dashscope:
api-key: ${DASHSCOPE_API_KEY}
chat:
options:
model: qwen-plus # 可选:qwen-turbo, qwen-max, qwen-long
temperature: 0.7
max-tokens: 2048
top-p: 0.8
// 通义千问特有参数
@GetMapping("/dashscope")
public String dashScopeChat(@RequestParam String question) {
Prompt prompt = new Prompt(
new UserMessage(question),
DashScopeChatOptions.builder()
.withModel("qwen-max") // 使用最强模型
.withTemperature(0.3)
.withEnableSearch(true) // 开启联网搜索(通义千问特有)
🔒 解锁完整内容
本章剩余内容需要解锁后查看
以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。
加入知识星球你将获得:
- ✅ 全部 26 章完整内容 + 持续更新
- ✅ 配套源码 + 实战项目
- ✅ 一对一答疑 + 面试辅导
- ✅ 简历优化 + 内推机会
📚 本章完整目录
以下为本章完整目录结构,加入知识星球即可解锁全部内容。