基于Spring Boot与LangChain4j的AI驱动新闻系统设计与工程实现

目录

一、研究背景与问题分析

二、系统总体架构设计

[三、AI 能力工程化接入(LangChain4j)](#三、AI 能力工程化接入(LangChain4j))

[3.1 AI 服务统一注入设计](#3.1 AI 服务统一注入设计)

[3.2 新闻智能分类(结构化输出)](#3.2 新闻智能分类(结构化输出))

[3.3 新闻正文 AI 清洗与排版](#3.3 新闻正文 AI 清洗与排版)

四、新闻爬虫模块设计与实现

[4.1 多站点爬虫统一处理流程](#4.1 多站点爬虫统一处理流程)

[4.2 AI + 爬虫完整处理流程](#4.2 AI + 爬虫完整处理流程)

五、新闻封面图获取策略

六、个性化推荐系统设计

[6.1 用户兴趣建模](#6.1 用户兴趣建模)

[6.2 推荐策略实现](#6.2 推荐策略实现)

七、评论系统与点赞一致性控制

[7.1 树形评论结构](#7.1 树形评论结构)

[7.2 点赞防重复设计](#7.2 点赞防重复设计)

八、语音识别(ASR)工程实现

九、系统工程价值分析

十、总结与展望


一、研究背景与问题分析

传统新闻系统在内容获取、分类与推荐环节高度依赖人工规则或静态算法,存在以下明显不足:

  1. 新闻来源分散,采集与清洗成本高

  2. 基于关键词或规则的分类泛化能力弱

  3. 推荐系统依赖简单热度,个性化不足

  4. 对老年用户不友好,缺乏语音交互能力

随着大语言模型(LLM)在文本理解与生成领域的成熟,将其引入新闻系统的内容处理与决策环节 ,具备明显的工程可行性与实践价值。本文基于 Spring Boot + MyBatis 构建后端服务,结合 LangChain4j 接入大模型能力,设计并实现了一套 AI 驱动的智能新闻系统,实现了从新闻采集、智能处理到个性化推荐的完整业务闭环。


二、系统总体架构设计

系统采用 分层架构 + AI 服务解耦设计,核心模块如下:

  • 控制层(Controller):对外提供 REST 接口

  • 业务层(Service):新闻爬虫、推荐、评论、语音处理

  • 数据层(Mapper):MyBatis 持久化

  • AI 能力层:通过 LangChain4j 封装大模型能力

该设计的核心原则是:将 AI 能力作为"基础服务",而非业务逻辑的一部分


三、AI 能力工程化接入(LangChain4j)

3.1 AI 服务统一注入设计

系统通过 Spring Bean 将大模型能力统一注入,业务层只依赖接口,不感知模型实现细节:

复制代码
@Configuration
public class AiConfig {

    @Bean
    public AiAssistant aiAssistant(ChatLanguageModel model,
                                   ChatMemory chatMemory,
                                   AiTools aiTools) {
        return AiServices.builder(AiAssistant.class)
                .chatLanguageModel(model)
                .chatMemory(chatMemory)
                .tools(aiTools)
                .build();
    }
}

设计意义:

  • AI 能力与业务逻辑解耦

  • 模型可替换

  • 统一管理 Prompt 与上下文


3.2 新闻智能分类(结构化输出)

新闻分类不采用传统关键词匹配,而是通过 Prompt 约束大模型返回结构化 JSON:

复制代码
@SystemMessage("""
你是一个新闻内容分析专家。
请根据标题判断新闻类别,并严格返回 JSON:
{"category":"分类","location":"视觉关键词"}
""")
String classify(@UserMessage String title);

在业务中直接解析 JSON:

复制代码
JSONObject json = JSON.parseObject(aiResult);
String category = json.getString("category");
String location = json.getString("location");

工程优势:

  • 分类逻辑无需维护规则表

  • 新类别可通过 Prompt 扩展

  • 输出格式稳定,易于程序处理


3.3 新闻正文 AI 清洗与排版

针对不同网站正文结构不一致的问题,采用 AI 进行语义级清洗与统一排版:

复制代码
@SystemMessage("""
你是专业新闻编辑。
请删除广告、版权说明等无关内容,
并确保每个自然段首行缩进2个全角空格。
""")
String cleanAndFormat(@UserMessage String rawContent);

相比正则处理,该方案具备更强的跨站点适应能力。


四、新闻爬虫模块设计与实现

4.1 多站点爬虫统一处理流程

系统支持多个主流新闻网站,所有爬虫最终统一进入 processLinks 方法处理:

复制代码
if (newsMapper.countByUrl(detailUrl) > 0) {
    continue; // URL 去重
}

4.2 AI + 爬虫完整处理流程

核心处理流程如下:

复制代码
String title = document.title();
String rawContent = contentElement.text();

// AI 分类
String aiResult = classifier.classify(title);

// AI 正文清洗
String formattedContent = contentProcessor.cleanAndFormat(rawContent);

// 搜索并下载封面图
String imageUrl = imageService.searchAndDownload(location);

// 数据入库
newsMapper.insert(news);

并在每条新闻处理后进行冷却:

复制代码
Thread.sleep(30000); // 防止反爬

该设计实现了端到端无人值守新闻生产流程


五、新闻封面图获取策略

系统采用 "原图优先,搜索兜底" 的策略:

复制代码
if (imageUrl == null) {
    imageUrl = searchByKeyword(keyword);
}

下载图片时增加健壮性处理:

复制代码
conn.setConnectTimeout(10000);
conn.setReadTimeout(10000);
conn.setRequestProperty("User-Agent", USER_AGENT);

并支持多次重试,最终保证每条新闻都有可用封面图。


六、个性化推荐系统设计

6.1 用户兴趣建模

通过用户点击行为更新兴趣权重:

复制代码
INSERT INTO user_interests (user_id, category, click_count)
VALUES (?, ?, 1)
ON DUPLICATE KEY UPDATE click_count = click_count + 1;

6.2 推荐策略实现

推荐逻辑集中在 Service 层:

复制代码
List<String> interests = newsMapper.getTopInterests(userId);

for (String category : interests) {
    News news = newsMapper.getRandomByCategory(category);
    recommendList.add(news);
}

若推荐不足,则使用 24 小时热榜补齐:

复制代码
recommendList.addAll(newsMapper.getHotNews24h());

该策略在复杂度与效果之间取得了良好平衡。


七、评论系统与点赞一致性控制

7.1 树形评论结构

后端构建完整评论树:

复制代码
for (NewsComment comment : rootComments) {
    List<NewsComment> replies = mapper.getReplies(comment.getId());
    comment.setReplies(replies);
}

前端无需递归查询数据库。


7.2 点赞防重复设计

点赞前校验用户行为:

复制代码
int count = mapper.checkNewsLike(userId, newsId);

点赞与取消点赞逻辑:

复制代码
if (count == 0) {
    mapper.insertLike(userId, newsId);
    mapper.incrementLike(newsId);
} else {
    mapper.deleteLike(userId, newsId);
    mapper.decrementLike(newsId);
}

确保数据一致性。


八、语音识别(ASR)工程实现

针对老年用户,集成百度语音识别极速版。

关键参数设置如下:

复制代码
JSONObject result = client.asr(audioData, "wav", 16000, options);

重点优化点:

  • 明确使用 wav 格式,避免 3312 错误

  • 固定采样率 16000Hz

  • 完整异常日志输出,提升可维护性


九、系统工程价值分析

该系统具备以下工程价值:

  1. AI 深度参与核心业务流程,而非简单接口调用

  2. 模块化设计,适合课程设计与真实项目

  3. 爬虫、推荐、评论、语音完整闭环

  4. 对智慧养老、资讯平台具有直接复用价值


十、总结与展望

本文从工程实践角度,系统性介绍了一套 基于 Spring Boot 与 LangChain4j 的 AI 智能新闻系统。通过将大语言模型引入新闻分类、正文清洗与摘要生成环节,有效降低了系统规则维护成本,并显著提升了内容质量与用户体验。

后续可进一步引入:

  • 向量检索与语义推荐

  • AI 内容审核

界面展示:

相关推荐
光羽隹衡2 小时前
计算机视觉--Opencv(图像形态学)
人工智能·opencv·计算机视觉
九皇叔叔2 小时前
【02】SpringBoot3 MybatisPlus 加入日志功能
java·mysql·mybatis·日志·mybatisplus
java1234_小锋2 小时前
什么是Java可重入锁?
java·开发语言
不会c+2 小时前
Spring和Springboot的区别
java·spring boot·spring
倔强的石头1062 小时前
假设空间与版本空间 —— 机器学习是 “猜规律” 的过程
人工智能·机器学习
不会c+2 小时前
Spring详解(二)IOC控制反转
java·开发语言
翔云1234562 小时前
golang中使用 sort.Interface 实现复杂多级排序
开发语言·后端·golang
flying_13142 小时前
图神经网络分享系列-GGNN(GATED GRAPH SEQUENCE NEURAL NETWORKS)(三)
人工智能·深度学习·神经网络·图神经网络·ggnn·门控机制·图特征学习
cooldream20092 小时前
Agent Skill:新一代 AI 设计模式的原理、实践与 MCP 协同应用解析
人工智能·mcp·agent skill