admin管理员组文章数量:1437020
手撸一个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 的智能对话助手界面,具备以下功能:
- 用户界面包含一个聊天窗口和输入框,聊天窗口用于显示历史消息,输入框用于用户输入问题。
- 消息展示支持显示用户消息和助手消息,消息以气泡形式展示,并且支持 Markdown 语法解析。
- 流式响应通过 Server-Sent Events(SSE)技术实现流式响应,模拟实时对话效果。
- 状态管理使用响应式状态管理消息列表、输入框内容、提交状态和加载状态。
- 滚动控制当有新消息时,自动滚动到聊天窗口底部。
- 错误处理在 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是要收费的。
本文标签: 手撸一个SpringAI调用DeepSeek API的项目需要的拿走
版权声明:本文标题:手撸一个SpringAI调用DeepSeek API的项目,需要的拿走 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1747401592a2694109.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论