手撸一个SpringAI调用DeepSeek API的项目,需要的拿走

为什么要搞这个?因为属于AI的时代已来。

你想,百万Token才几毛钱!

AI平权的时代已经来临。

目前大模型在意图识别、超长上下文理解与推理、实时信息整合与自主搜索、多语言能力与跨语言对齐、多模态交互与跨模态生成表现出能力有目共睹。这个新生产力可以解决一些之前难以高效解决的问题。

为什么是SpringAI?

LangChain4j、Spring AI都有均面临版本不稳定,迭代升级快导致的包名及使用方法上的前后不兼容,包括跟项目依赖的不兼容的问题。 Spring AI 提供一套标准接口,可以自然地结合 Spring 的其他特性,这是其核心优势。通过 Spring Boot Starters 实现自动配置,使用 @Autowired 注入 ChatClient, EmbeddingClient 等核心接口,通过application.properties/yml 进行配置,符合 Spring 开发者的习惯。 小码过河实验室,公众号:小码过河实验室Spring AI和Langchain4j对比,java栈到底用哪个好?

效果

先看效果。

依赖项

关键依赖:

代码语言:javascript代码运行次数:0运行复制
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

完整代码链接见文末

代码片断

后端

微信公众号估计裁员裁到大动脉了,现在从idea Copy过来的代码,格式全丢了。这个bug已经存在半年多了!!!

前端:

功能比较简单,如果有不懂的可以问DeepSeek和Qwen3。下面来总结下这个功能的特点。

项目内容

项目目前基于SpringAI+Thymeleaf+Vue3通过调用DeepSeek大模型API实现了一个基于 Web 的智能对话助手界面,具备以下功能:

  1. 用户界面包含一个聊天窗口和输入框,聊天窗口用于显示历史消息,输入框用于用户输入问题。
  2. 消息展示支持显示用户消息和助手消息,消息以气泡形式展示,并且支持 Markdown 语法解析。
  3. 流式响应通过 Server-Sent Events(SSE)技术实现流式响应,模拟实时对话效果。
  4. 状态管理使用响应式状态管理消息列表、输入框内容、提交状态和加载状态。
  5. 滚动控制当有新消息时,自动滚动到聊天窗口底部。
  6. 错误处理在 SSE 连接出现错误时,显示错误提示信息。

优化建议

1. 性能优化
  • 虚拟列表当聊天记录增多时,使用虚拟列表技术可以减少 DOM 节点数量,提高页面性能。
  • 节流和防抖对于输入框的输入事件和滚动事件,可以使用节流和防抖技术,减少不必要的计算和渲染。
2. 用户体验优化
  • 消息加载动画在消息加载过程中,显示更友好的加载动画,提高用户体验。
  • 消息时间戳在每条消息旁边显示发送时间,方便用户查看对话历史。
  • 消息撤回和编辑支持用户撤回和编辑自己发送的消息。
3. 代码结构优化
  • 组件化将聊天窗口、输入框、消息气泡等功能拆分成独立的组件,提高代码的可维护性和可复用性。
  • 状态管理库使用 Vuex 或 Pinia 等状态管理库来管理应用的状态,避免状态管理混乱。
4. 安全优化
  • 输入验证对用户输入进行验证,防止 XSS 攻击和 SQL 注入等安全问题。
  • HTTPS 连接使用 HTTPS 协议来保证数据传输的安全性。
5. 兼容性优化
  • 浏览器兼容性对不同浏览器进行兼容性测试,确保在各种浏览器上都能正常显示和使用。
  • 移动端适配优化页面布局,确保在移动端设备上也能有良好的用户体验。

REFERENCE

项目源码:

文末有手把手教程。

什么是Token?

Token是大模型行业的“代币”,是大模型的工作量单位,与流量无关,只与模型干了多少活有关。 Token是大模型处理文本的基本单位,是模型理解语言的“最小砖块”。无论是中文的单个汉字,还是英文的单词、子词,甚至是标点符号,都可以被视为Token。 唐成,公众号:的数字化之路之前的API是按调用次数收费,为什么大模型要以Token数收费?

.html

补充:

如何在本地运行这个项目?需要两个条件:

1、本地电脑的8080端口没有被占用

2、需要申请一个DeepSeek或openAi的appKey

如何申请AppKey?以DeepSeek为例

2.1 打开DeepSeek的网站,点右上角的“API 开放平台 ↗”

在打开页面上,点左侧的“API keys”-->"创建API Key"

然后,把这个API key配置在项目的application.properties的

最后,运行项目

项目Run起来后,

代码语言:javascript代码运行次数:0运行复制
2025-05-03T21:04:33.010+08:00  INFO 37589 --- [spring-ai-chat] [           main] n.a.s.SpringAiChatApplication            : No active profile set, falling back to 1 default profile: "default"
2025-05-03T21:04:34.142+08:00  INFO 37589 --- [spring-ai-chat] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-05-03T21:04:34.156+08:00  INFO 37589 --- [spring-ai-chat] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-05-03T21:04:34.156+08:00  INFO 37589 --- [spring-ai-chat] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.40]
2025-05-03T21:04:34.208+08:00  INFO 37589 --- [spring-ai-chat] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-05-03T21:04:34.208+08:00  INFO 37589 --- [spring-ai-chat] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 929 ms
2025-05-03T21:04:34.977+08:00  INFO 37589 --- [spring-ai-chat] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2025-05-03T21:04:34.985+08:00  INFO 37589 --- [spring-ai-chat] [           main] n.a.s.SpringAiChatApplication            : Started SpringAiChatApplication in 2.367 seconds (process running for 2.905)

在浏览器中打开下面这个地址就只可以了:

http://127.0.0.1:8080

最后,记得充钱。DeepSeek的API是要收费的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-05-03,如有侵权请联系 cloudcommunity@tencent 删除模型优化DeepSeekapi管理