前言:当 LLM 遇上 RTC

在 AIGC 爆发的今天,单纯的 CRUD 后端开发已经很难满足业务需求了。作为开发者,我们经常思考:如何将大模型(LLM)的智慧与实时通信(RTC)的高效结合起来?

最近,我利用周末时间做了一个有趣的技术原型——LingoTask。它模拟了一个在线语言学习场景:

  1. 智能翻译官:利用 DeepSeek 大模型进行精准翻译,并自动提取专业词汇,甚至能生成 Word 格式的生词本。
  2. 面对面私教:集成 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),互推视频流,效果非常丝滑。
在这里插入图片描述


四、 遇到的挑战与踩坑记录

在开发过程中,也遇到了一些真实场景下的问题,分享出来帮大家避坑:

  1. DeepSeek 的“余额不足”
    调试 API 时突然报 402 错误,查日志发现是 Token 额度用完了。这提醒我们在生产环境必须做好异常降级(Fallback),当 AI 服务不可用时,至少要返回兜底数据。

五、 总结与源码

这次实战通过 SpeechX (语音交互)LingoTask (语言任务) 的概念,把 AI 和 RTC 串联了起来。

  • Spring AI 让 Java 开发者也能优雅地接入 LLM,不再羡慕 Python。
  • Agora 提供了极其稳定的基础设施,让我们专注于业务逻辑而非底层传输。

如果你也对构建 AI 应用或即时通讯感兴趣,欢迎在评论区交流!

💻 源码地址Github传送门
(包含完整后端代码及前端演示 Demo)


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐