Spring AI支持DeepSeek的各种AI语言模型。您可以与DeepSeek语言模型交互,并基于DeepSeek模型创建多语言会话助手。
前提条件
您需要使用DeepSeek创建一个API密钥来访问DeepSeek语言模型。
在DeepSeek注册页面创建一个账号,并在API密钥页面生成一个令牌。
Spring AI项目定义了一个名为spring.ai.deepseek.api-key的配置属性,您应该将其设置为从API Keys页面获得的API Key的值。
您可以在application.properties文件中设置此配置属性:
spring.ai.deepseek.api-key=<your-deepseek-api-key>
为了在处理敏感信息(如API密钥)时增强安全性,您可以使用Spring表达式语言(SpEL)引用自定义环境变量:
# In application.ymlspring: ai: deepseek: api-key: ${DEEPSEEK_API_KEY}
# In your environment or .env fileexport DEEPSEEK_API_KEY=<your-deepseek-api-key>
您也可以在应用程序代码中以编程方式设置此配置:
// Retrieve API key from a secure source or environment variableString apiKey = System.getenv("DEEPSEEK_API_KEY");
添加仓库和BOM
Spring AI 工件发布在 Spring 里程碑仓库和快照仓库中。请参阅“构建管理”部分,以将这些仓库添加到您的构建系统中。
为了帮助依赖管理,Spring AI提供了一个BOM(物料清单),以确保在整个项目中使用Spring AI的一致版本。
自动配置
Spring AI为DeepSeek Chat模型提供Spring靴子自动配置。要启用它,请将以下依赖项添加到项目的Maven pom.xml文件中:
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-deepseek</artifactId></dependency>
或到您的Gradle build.gradle文件。
dependencies { implementation 'org.springframework.ai:spring-ai-starter-model-deepseek'}
聊天属性
重试属性
前缀spring.ai.retry用作属性前缀,用于为DeepSeek Chat模型配置重试机制。
| 描述 | 默认值 |
|---|
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 |
连接属性
前缀spring.ai.deepseek用作允许您连接到DeepSeek的属性前缀。
| | |
|---|
Spring.ai.deepseek.base-URL | 连接的URL(链接) | https://api.deepseek.com
|
spring.ai.deepseek.api-key | API 密钥 | - |
配置属性
前缀spring.ai.deepseek.chat是允许您为DeepSeek配置聊天模型实现的属性前缀。
| 描述 | 默认值 |
|---|
spring.ai.deepseek.chat.enabled | 启用DeepSeek聊天模式。 | true |
spring.ai.deepseek.chat.base-url | 可选,覆盖spring.ai.deepseek.base-url以提供特定于聊天的URL | https://api.deepseek.com/
|
spring.ai.deepseek.chat.api-key | 可选,覆盖spring.ai.deepseek.api-key以提供聊天特定的API键 | - |
spring.ai.deepseek.chat.completions-path | 聊天完成端点的路径 | /chat/completions
|
spring.ai.deepseek.chat.beta-prefix-path | beta功能端点的前缀路径 | /beta
|
spring.ai.deepseek.chat.options.model | 要使用的模型的ID。你可以使用deepseek-reasoner或deepseek-chat。 | deepseek-chat |
spring.ai.deepseek.chat.options.frequencyPenalty | 介于-2.0和2.0之间的数字。正值会根据新标记在文本中的现有频率对新标记进行惩罚,从而降低模型逐字重复同一行的可能性。 | 0.0f |
spring.ai.deepseek.chat.options.maxTokens | 聊天结束时生成的最大令牌数。输入标记和生成标记的总长度受到模型上下文长度的限制。 | - |
spring.ai.deepseek.chat.options.presencePenalty | 介于-2.0和2.0之间的数字。正值会根据新标记是否出现在文本中来惩罚它们,从而增加模型讨论新主题的可能性。 | 0.0f |
spring.ai.deepseek.chat.options.stop | 最多4个序列,其中API将停止生成更多令牌。 | - |
spring.ai.deepseek.chat.options.temperature | 在0和2之间使用哪个采样温度。较高的值(如0.8)将使输出更随机,而较低的值(如0.2)将使其更集中和确定性。我们通常建议更改this或top_p,但不要同时更改两者。 | 1.0F |
spring.ai.deepseek.chat.options.topP | 温度采样的替代方案,称为核采样,其中模型考虑具有top_p概率质量的令牌的结果。因此,0.1意味着只考虑包含前10%概率质量的令牌。我们通常建议改变这个或温度,但不是两者兼而有之。 | 1.0F |
spring.ai.deepseek.chat.options.logprobs | 是否返回输出令牌的日志概率。如果为true,则返回消息内容中返回的每个输出标记的对数概率。 | - |
spring.ai.deepseek.chat.options.topLogprobs | 0到20之间的整数,指定在每个令牌位置最有可能返回的令牌数量,每个令牌都有相关的对数概率。如果使用此参数,logprobs必须设置为true。 | - |
spring.ai.deepseek.chat.options.tool-names | 工具列表,由其名称标识,用于在单个提示请求中启用函数调用。ToolCallback注册表中必须存在具有这些名称的工具。 | - |
spring.ai.deepseek.chat.options.tool-callbacks | 注册ChatModel的工具回调。 | - |
spring.ai.deepseek.chat.options.internal-tool-execution-enabled | 如果为false,Spring AI不会在内部处理工具调用,而是将它们代理给客户端。然后,客户端负责处理工具调用,将它们分派给适当的函数,并返回结果。如果为true(默认值),Spring AI将在内部处理函数调用。仅适用于支持函数调用的聊天模型 | true |
您可以为ChatModel实现覆盖通用的spring.ai.deepseek.base-url和spring.ai.deepseek.api-key。如果设置了spring.ai.deepseek.chat.base-url和spring.ai.deepseek.chat.api-key属性,则这些属性将优先于通用属性。如果您想为不同的模型和不同的模型端点使用不同的DeepSeek账户,这将非常有用。
所有以spring.ai.deepseek.chat.options为前缀的属性,都可以在运行时通过向Prompt调用添加特定于请求的运行时选项来进行覆盖。