我要把Spring AI项目从OpenAI切换到DeepSeek。
以为改个URL就行,结果折腾了3天才跑通。
5个坑,每个都让我骂街。
背景
我的Spring AI项目本来接的OpenAI,token贵、响应慢。
DeepSeek便宜(1/30价格)、中文理解好、响应快。
代码基本不用改,主要是配置层的事。
但配置层的问题,比代码层多多了。
坑1:base-url的斜杠问题
我以为直接改URL就行:
spring:
ai:
openai:
base-url: https://api.deepseek.com
api-key: xxx
chat:
options:
model: deepseek-chat
报错:Invalid URL
斜杠!我漏了最后一个斜杠!
spring:
ai:
openai:
base-url: https://api.deepseek.com/ # 必须带斜杠!
api-key: xxx
坑2:model名字写错了
DeepSeek的model不是gpt-4,是deepseek-chat。
一开始我还傻傻地写:
options:
model: gpt-4
然后报错:model not found
DeepSeek只认deepseek-chat和deepseek-coder。
options:
model: deepseek-chat
坑3:兼容性问题
Spring AI的某些API在兼容OpenAI和DeepSeek时有问题。
比如这个:
// Spring AI 1.0.0的写法
ChatResponse response = chatClient.prompt()
.user("你好")
.call()
.chatResponse();
// DeepSeek不支持这个方法
报错:Method not found
换成流式接口就好了:
// 用Flux接收
Flux<String> stream = chatClient.prompt()
.user("你好")
.stream()
.content();
stream.doOnNext(System.out::print).blockLast();
坑4:温度参数范围不同
OpenAI的温度范围是0-2,DeepSeek是0-1。
我写0.8,结果DeepSeek给了一个很"飘"的答案。
// OpenAI没问题
.chat(ChatOptions.builder()
.withTemperature(0.8)
.build());
// DeepSeek要求0-1
.chat(ChatOptions.builder()
.withTemperature(0.5) // 改成0.5
.build());
不是bug,是两个模型的性格不一样。
坑5:Token计算方式不同
DeepSeek的token计算方式比OpenAI更严格。
我有个很长的Prompt,用OpenAI算token没超限,但DeepSeek直接报错Token limit exceeded。
解决:必须手动截断Prompt,或者分批处理。
public String truncatePrompt(String text, int maxTokens) {
// 按中文字符估算,一个中文约1.5个token
int maxChars = maxTokens * 2;
if (text.length() > maxChars) {
return text.substring(0, maxChars) + "...";
}
return text;
}
我的修复清单
总结一下Spring AI接DeepSeek必须改的地方:
| 项目 | OpenAI | DeepSeek |
|---|---|---|
| base-url | api.openai.com/ | api.deepseek.com/ |
| 斜杠 | 可有可无 | 必须有 |
| model | gpt-4、gpt-3.5 | deepseek-chat |
| temperature | 0-2 | 0-1 |
| 超长Prompt | 自动截断 | 需手动处理 |
完整配置示例
这是我的最终配置,拿去直接用:
spring:
ai:
openai:
base-url: https://api.deepseek.com/
api-key: ${DEEPSEEK_API_KEY}
chat:
options:
model: deepseek-chat
temperature: 0.5
max-tokens: 2000
代码已开源
我整理了一个Spring AI接DeepSeek的起步模板,包含:
- 正确的配置示例
- 5个坑的修复代码
- 分批处理长文本的demo
- 温度参数的最佳实践
👉 GitHub搜 spring-ai-starter(作者:lincyang720)
想聊Java AI落地的具体问题,或者要我的完整代码,加我微信 newboy2004,备注"AI"