上一节我们学习了如何使用spring-ai调用本地的ollama模型,本节将继续深入,学习如何通过spring-ai调用远程的deepseek服务。
一、调整pom.xml依赖
首先需要引入openai相关的starter依赖,以便支持OpenAI兼容的API调用:
1 <dependency>2 <groupid>org.springframework.ai</groupid>3 <artifactid>spring-ai-openai-spring-boot-starter</artifactid>4 </dependency>
注意:请确保groupid正确为 org.springframework.ai,原文可能存在拼写错误。
在配置文件中指定deepseek的API地址和认证信息:
spring: ai: openai: api-key: sk-*** base-url: https://api.deepseek.com chat: options: model: deepseek-chat temperature: 0.7
⚠️ 说明:
api-key需替换为你自己在deepseek官网申请的真实密钥。若尚未获取,请参考文末截图前往官网注册并充值,价格非常实惠,一顿早餐的成本即可使用较长时间。
三、注入远程ChatClient实例
定义一个Bean来创建基于OpenAI协议的远程客户端,并设置默认行为角色:
@Bean("openaiClient")public ChatClient remoteClient(OpenAiChatModel model) { return ChatClient.builder(model) .defaultSystem("你是可爱且热情、人见人爱,花见花开的AI助手,中文名字叫小美,英文名字叫Rose,你有一个好朋友,他的网名叫[菩提树下的杨过],请以阿呆的身份回答问题") .defaultAdvisors(new ConsoleOutputAdvisor()) .build();}该配置让AI以“小美”或“Rose”的人格进行回复,增强交互趣味性。
四、Controller层接口调整
将之前本地模型的调用切换为远程client,实现同步与流式两种响应方式:
@Autowired@Qualifier("openaiClient")ChatClient openaiClient;@RequestMapping("/openai/chat")public String openAIChat(String prompt) { return openaiClient.prompt() .user(prompt) .call() .content();}@RequestMapping(value = "/openai/chat-stream", produces = "text/html;charset=utf-8")public Flux<string> openAIChatStream(String prompt) { return openaiClient.prompt() .user(prompt) .stream() .content();}</string>支持普通请求返回完整结果,以及SSE流式输出,提升用户体验。

? 扩展思考:
如果想构建一个多用户平台,每个用户登录后使用自己的deepseek API Key,目前spring-ai并未提供动态切换apiKey的机制。这种场景下,无法直接复用自动配置的Bean。解决方案可参考由Cursor自动生成的Java项目——全自助DeepSeek Demo,通过手动构造OpenAiChatModel实例实现多租户隔离。
项目源码地址:https://www.php.cn/link/fc8d5986a039ea16ecfd79ac1c20a0b1
以上就是spring-ai 学习系列(2)-调用远程deepseek的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号