Spring AI接DeepSeek,我踩了这5个坑

0 阅读2分钟

我要把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必须改的地方:

项目OpenAIDeepSeek
base-urlapi.openai.com/api.deepseek.com/
斜杠可有可无必须有
modelgpt-4、gpt-3.5deepseek-chat
temperature0-20-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"