SpringAI - Models(二)
DeepSeek 模型
Spring boot starter
SpringAI 为封装的 DeepSeek 聊天模型提供 Spring Boot 自动配置。通过添加下面依赖即可:
1
2
3
4<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>具体 SpringAI 的依赖在前面的学习中有记录。
配置属性
- SpringAI 封装 DeepSeek 聊天模型提供大量配置属性来灵活控制与模型交互的过程。
- 根据官方文档给出的配置属性及参考源码,大致整理成连接配置、模型选项配置、重试配置三类配置属性。
连接配置
主要用于配置连接 DeepSeek 模型服务的属性参数。
基本是以
spring.ai.deepseek.chat
开头的属性参数。属性如下:属性 说明 默认值 spring.ai.deepseek.chat.enabled 启用 DeepSeek 聊天模型 true spring.ai.deepseek.chat.base-url 调用 Deepseek 服务的基础url https://api.deepseek.com spring.ai.deepseek.chat.api-key 调用 Deepseek 服务的api-key - spring.ai.deepseek.chat.completions-path 对话补全API的路径。 /chat/completions spring.ai.deepseek.chat.beta-prefix-path Beta(测试)API路径前缀 /beta 基础url以及api-key也可以通过下列两个属性配置,但优先级低于上面
spring.ai.deepseek.chat
开头的属性属性 说明 默认值 spring.ai.deepseek.base-url 调用 Deepseek 服务的基础url https://api.deepseek.com spring.ai.deepseek.api-key 调用 Deepseek 服务的api-key - 两个配置在源码中的属性类分别是
org.springframework.ai.model.deepseek.autoconfigure.DeepSeekChatProperties
org.springframework.ai.model.deepseek.autoconfigure.DeepSeekConnectionProperties
在源码中能看到通过三元表达式优先取得是
DeepSeekChatProperties
的属性。
模型选项配置
主要都是配置 DeepSeek 模型 API 输入参数选项属性。
以
spring.ai.deepseek.chat.options
开头,属性如下:属性 说明 默认值 spring.ai.deepseek.chat.options.model 要使用的模型。 deepseek-chat spring.ai.deepseek.chat.options.frequencyPenalty 介于 -2.0 到2 .0 之间的数值。正值会根据 Token 在已生成文本中的现有频率进行惩罚,从而降低模型逐字重复相同内容的可能性。 0.0f spring.ai.deepseek.chat.options.maxTokens 聊天补全中生成的最大 Token 数量。输入 Token 和生成 Token 的总长度受模型上下文长度限制。 - spring.ai.deepseek.chat.options.presencePenalty 介于 -2.0 到 2.0 之间的数值。正值会根据 Token 是否已在已生成文本中出现进行惩罚,从而提高模型讨论新话题的可能性。 0.0f spring.ai.deepseek.chat.options.stop 一个 string 或最多包含 16 个 string 的 list,在遇到这些词时,API 将停止生成更多的 token。 - spring.ai.deepseek.chat.options.temperature 采样温度值,范围0到2。较高值(如0.8)使输出更随机,较低值(如0.2)使输出更集中和确定。通常建议仅调整此参数或 top_p 参数,而非同时修改两者。 1.0F spring.ai.deepseek.chat.options.topP 温度采样的替代方案——核采样(nucleus sampling),模型仅考虑概率质量累计达到 top_p 阈值的token。例如0.1表示仅考虑概率质量排名前 10% 的 Token。通常建议仅调整此参数或 temperature 参数,而非同时修改两者。 1.0F spring.ai.deepseek.chat.options.logprobs 是否返回输出 Token 的对数概率。若为 true,则返回消息内容中每个输出 Token 的对数概率。 - spring.ai.deepseek.chat.options.topLogprobs 0 到 20 之间的整数,指定每个 Token 位置返回的最可能 Token 数量(每个附带关联的对数概率)。若使用此参数,必须将 logprobs 设为 true。 - 在源码中的属性类
org.springframework.ai.deepseek.DeepSeekChatOptions
重试配置
用于配置与 DeepSeek 模型交互的重试机制的参数属性。
spring.ai.retry
开头,属性如下:属性 说明 默认值 spring.ai.retry.max-attempts 最大重试次数 10 spring.ai.retry.backoff.initial-interval 指数退避策略的初次休眠时长,休眠后后进行重试 2 秒 spring.ai.retry.backoff.multiplier 退避策略间隔乘数(即指数) 5 spring.ai.retry.backoff.max-interval 指数退避策略最大休眠时长 3 分钟 spring.ai.retry.on-client-errors 若为 false,则抛出 NonTransientAiException
,且不对4xx
客户端错误代码尝试重试false spring.ai.retry.exclude-on-http-codes 不应触发重试的 HTTP 状态码列表(例如用于抛出 NonTransientAiException
)empty spring.ai.retry.on-http-codes 应触发重试的 HTTP 状态码列表(例如用于抛出 TransientAiException
)empty 以上就是所有可以配置的属性,下面在学习记录一下
DeepSeekChatOptions
。
DeepSeekChatOptions
其实
DeepSeekChatOptions
在上一篇记录中就有提到其是ChatOptions
的实现类。那么
DeepSeekChatOptions
也是具备在运行时向ChatModel
传递AI模型的选项参数。所以通过上面配置属性的
DeepSeekChatOptions
可以视为默认的选项参数,运行时传入的则可以灵活覆盖默认的选项。在源码中也可以看到合并默认与运行时选项参数的逻辑。首先在自动配置
ChatModel
时传入了默认的选项参数。然后在
ChatModel
运行时合并runtimeOptions
和defaultOptions
进行合并为requestOptions`用于请求。
DeepSeekChatModel
DeepSeekChatModel
DeepSeekChatModel
是ChatModel
的实现类,其作用就是与Deepseek模型进行交互。- 主要是创建交互前的请求,以及交互后响应进行转换,这个过程包括工具调用。
- 其次就是通过
DeepSeekApi
向Deepseek服务发起请求。这个过程使用了RetryTemplate
来完成重试机制。 - 对于
ChatModel
的作用在上一篇中记录过,对于DeepSeekChatModel
的源码这里也不多做记录,以后在专门学习源码时在记录。
DeepSeekApi
- 按照Deepseek提供的API范式对请求参数、响应参数以及API调用进行封装。
- 简单来说
DeepSeekApi
面向Deepseek的API范式并进行调用;DeepSeekChatModel
是面向SpingAI内部的结构,将请求、响应转换。
总结
- 可以通过Spring的属性配置来配置与模型交互的一些默认属性。
- 也可以通过
DeepSeekChatOptions
在运行时传递属性以便灵活使用。 - 从整个SpringAI封装的DeepSeek模型可以看到,其也是通过实现
ChatModel
、ChatOptions
以及封装一个调用模型服务的客户端DeepSeekApi
来完成。整体与上一篇中自行模拟的Dify模型封装是相似的。 - 到这里可以大概整理一下开发者使用SpringAI与AI模型交互的大致过程:
- 使用
ChatClient
输入与AI交互需要的参数(Advisors、Prompt、Tollcalling等),并选择调用方式及返回类型触发AI交互执行。 - 在触发执行时会对输入的参数进一步转换或构建,如将输入的文本提示词转换成
Message
、将输入的Tollcalling构建到ChatOptions
中、将Advisors添加默认的ChatModelAdvisor
并构建AdvisorChain
等。 - 通过
AdvisorChain
按顺序执行Advisor,默认在最后执行ChatModelAdvisor
调用ChatModel
。 ChatModel
与AI模型服务进行交互,如果需要Tollcalling则进行工具调用后继续与模型服务交互得倒最终输出结果。- 最后返回相应类型的输出结果,如果是结构化输出则在此调用
StructuredOutputConverter
进行结构化转换。
- 使用
最后
- 下一篇再继续学习一下SpringAI封装的其他非聊天模型的简单使用,如图像模型、嵌入模型等。
- 改篇幅学习没有编写案例,基本都是记录的文档中的内容或者源码中的内容。