文章目录
前言
DeepSeekV4更新后调用方式出现了新的参数:

现有的以来无法支持:
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>
解决措施
在序列化的时候把这个参数加进去:
java
@Configuration
public class DeepSeekV4CompatConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer thinkingDisabledCustomizer() {
return builder -> {
SimpleModule module = new SimpleModule();
module.setSerializerModifier(new ThinkingDisabledBeanSerializerModifier());
builder.modules(module);
};
}
}
java
public class ThinkingDisabledBeanSerializerModifier extends BeanSerializerModifier {
private static final String TARGET_CLASS = "org.springframework.ai.deepseek.api.DeepSeekApi$ChatCompletionRequest";
@Override
@SuppressWarnings("unchecked")
public JsonSerializer<?> modifySerializer(SerializationConfig config,
BeanDescription beanDesc,
JsonSerializer<?> serializer) {
if (TARGET_CLASS.equals(beanDesc.getBeanClass().getName())) {
return new ThinkingDisabledSerializer((JsonSerializer<Object>) serializer);
}
return serializer;
}
static class ThinkingDisabledSerializer extends StdSerializer<Object> {
private final JsonSerializer<Object> delegate;
ThinkingDisabledSerializer(JsonSerializer<Object> delegate) {
super(Object.class);
this.delegate = delegate;
}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
TokenBuffer tb = new TokenBuffer(gen.getCodec(), false);
delegate.serialize(value, tb, provider);
gen.writeStartObject();
JsonParser parser = tb.asParser();
parser.nextToken();
while (parser.nextToken() != JsonToken.END_OBJECT) {
gen.copyCurrentEvent(parser);
parser.nextToken();
gen.copyCurrentStructure(parser);
}
gen.writeFieldName("thinking");
gen.writeStartObject();
gen.writeStringField("type", "disabled");
gen.writeEndObject();
gen.writeEndObject();
parser.close();
}
}
}