【实战】基于 Spring Boot 3 + Spring AI + DeepSeek + Agora 构建智能音视频应用
前言:当 LLM 遇上 RTC
在 AIGC 爆发的今天,单纯的 CRUD 后端开发已经很难满足业务需求了。作为开发者,我们经常思考:如何将大模型(LLM)的智慧与实时通信(RTC)的高效结合起来?
最近,我利用周末时间做了一个有趣的技术原型——LingoTask。它模拟了一个在线语言学习场景:
- 智能翻译官:利用 DeepSeek 大模型进行精准翻译,并自动提取专业词汇,甚至能生成 Word 格式的生词本。
- 面对面私教:集成 Agora(声网) 实现高清、低延迟的 1v1 视频通话,并由后端进行严格的 Token 鉴权。
今天就来复盘一下这个项目的核心架构与实现细节,希望能给正在探索 Spring AI 和音视频开发的同学一点灵感。
一、 技术选型与架构设计
为了保证项目的轻量级与现代化,我选择了以下技术栈:
- 后端框架:Spring Boot 3.5.x(紧跟最新版)
- AI 接入:Spring AI(Java 生态对接 LLM 的标准姿势)
- 大模型:DeepSeek(深度求索,兼容 OpenAI 协议,性价比极高)
- 音视频 SDK:Agora RTC(声网,全球领先的实时互动云)
- 文档处理:Apache POI(生成 .docx 报告)
系统架构图 (System Architecture)
这是整个系统的交互流程,后端作为中枢,分别调度 AI 能力与 RTC 鉴权服务。

二、 模块一:拒绝幻觉,Spring AI 实现结构化翻译
对接大模型最头疼的不是“对话”,而是**“格式化输出”**。在业务系统中,我们需要 AI 返回准确的 JSON,而不是一段随意的文本。
1. 提示词工程 (Prompt Engineering)
为了让 DeepSeek 既翻译又提取单词,还不能瞎聊,我设计了一套严格的 System Prompt,并配合 Spring AI 的 BeanOutputConverter。
核心代码实现:
// 定义返回结构(DTO)
public class TranslationResponse {
private String translation;
private List<VocabularyItem> vocabulary;
// ... getters/setters
}
// Service 层调用
BeanOutputConverter<TranslationResponse> converter = new BeanOutputConverter<>(TranslationResponse.class);
String promptText = """
You are an expert English-Chinese translator.
TASK:
1. Translate the English text to professional Chinese.
2. Extract 3-5 key professional terms.
3. Output STRICT JSON based on the format below.
SOURCE TEXT: {text}
{format}
""";
// Spring AI 自动注入 format 规范,强制 LLM 返回 JSON
2. 自动化生成生词本 (Apache POI)
仅仅返回 JSON 是不够的,为了模拟真实的“助教”功能,我还实现了一个自动化生成 Word 文档的功能。利用 XWPFDocument,将 AI 提取的生词表渲染成表格,供用户下载。

三、 模块二:安全第一,声网视频通话集成
在视频通话功能中,“裸连”是非常危险的。如果我们直接在前端暴露 AppID 和 AppCertificate,任何人都能盗用你的额度。
因此,我采用了 App ID + Token 的安全鉴权模式。
1. 鉴权流程时序图 (Authentication Flow)
前端在加入房间前,必须先向我的后端申请“通行证”(Token)。

2. 后端 Token 签发
集成了声网的 Server SDK 后,生成 Token 变得非常简单。这里的一个坑是:一定要区分 App ID 和 App Certificate。我在调试时曾误把临时 Token 当作证书填入,导致生成的 Token 一直无效,排查了许久才发现。
// RoomService.java 核心逻辑
RtcTokenBuilder2 tokenBuilder = new RtcTokenBuilder2();
String token = tokenBuilder.buildTokenWithUid(
appId,
appCertificate,
roomId,
userId,
RtcTokenBuilder2.Role.ROLE_PUBLISHER,
timestamp,
timestamp
);
3. 前端极简实现
前端只需要几十行 HTML + JS 即可调用 WebRTC。为了验证多人通话,我特意开了两个浏览器窗口(模拟 User A 和 User B),互推视频流,效果非常丝滑。
四、 遇到的挑战与踩坑记录
在开发过程中,也遇到了一些真实场景下的问题,分享出来帮大家避坑:
- DeepSeek 的“余额不足”:
调试 API 时突然报 402 错误,查日志发现是 Token 额度用完了。这提醒我们在生产环境必须做好异常降级(Fallback),当 AI 服务不可用时,至少要返回兜底数据。
五、 总结与源码
这次实战通过 SpeechX (语音交互) 和 LingoTask (语言任务) 的概念,把 AI 和 RTC 串联了起来。
- Spring AI 让 Java 开发者也能优雅地接入 LLM,不再羡慕 Python。
- Agora 提供了极其稳定的基础设施,让我们专注于业务逻辑而非底层传输。
如果你也对构建 AI 应用或即时通讯感兴趣,欢迎在评论区交流!
💻 源码地址:Github传送门
(包含完整后端代码及前端演示 Demo)
更多推荐



所有评论(0)