文章标签自动推荐功能技术实施文档
前提条件
数据安全规则:
- 联调和测试过程中如需创建测试数据,测试完成后必须删除
- 数据库中存在一篇名为 "hello" 的文章,此文章不允许任何修改或删除操作
1. 功能概述
基于 AI 模型根据文章内容自动推荐 3-5 个合适标签,博主可一键确认添加。
2. 核心实现思路
2.1 复用现有 AI 能力
项目已有 AiSummaryService 调用阿里云 DashScope 模型的能力,标签推荐功能将完全复用该服务:
- 复用
DashScopeProperties 配置(API Key、超时、限流等)
- 复用模型调用逻辑(HTTP 请求、响应解析、错误处理)
- 复用 Rate Limit 限流机制
2.2 差异化实现
与摘要生成的主要差异:
| 特性 |
摘要生成 |
标签推荐 |
| System Prompt |
生成摘要的专业提示词 |
提取标签的专业提示词 |
| User Prompt |
标题 + 正文 |
标题 + 正文(需要提取标签) |
| 响应解析 |
截取摘要文本 |
解析逗号分隔的标签列表 |
| 返回格式 |
SummaryResultVO |
推荐标签列表 |
2.3 实现方案
后端:新建 TagRecommendService 服务类,复用 AiSummaryServiceImpl 的模型调用能力
前端:在文章编辑页标签区域添加推荐按钮,展示推荐标签并支持一键添加
3. 改动项清单
3.1 后端改动
3.1.1 新增 DTO
| 文件 |
说明 |
dto/RecommendTagsDTO.java |
请求 DTO,包含 title、content 字段 |
3.1.2 新增 VO
| 文件 |
说明 |
dto/TagRecommendResultVO.java |
返回 VO,包含 tags 列表、model、costMillis 等 |
3.1.3 新增服务接口
| 文件 |
说明 |
service/TagRecommendService.java |
标签推荐服务接口 |
3.1.4 新增服务实现
| 文件 |
说明 |
service/impl/TagRecommendServiceImpl.java |
复用 AiSummaryServiceImpl 的 callModel 方法,实现标签推荐逻辑 |
3.1.5 新增 Controller 接口
| 文件 |
说明 |
controller/ArticleController.java |
新增 /recommend-tags POST 接口 |
3.1.6 错误码(如需要)
| 文件 |
说明 |
common/exception/ErrorCode.java |
可能需要新增错误码(如 AI_CONTENT_TOO_SHORT 已存在可复用) |
3.2 前端改动
3.2.1 新增 API 方法
| 文件 |
说明 |
src/api/article.js |
新增 recommendTags(data) 方法 |
3.2.2 修改文章编辑器
| 文件 |
说明 |
src/views/app/ArticleEditor.vue |
在标签区域添加"智能推荐"按钮及交互逻辑 |
4. 核心逻辑说明
4.1 后端核心逻辑
4.2 前端核心逻辑
5. 待办事项
| 序号 |
待办项 |
状态 |
| 1 |
后端:创建 RecommendTagsDTO.java |
✅ 已完成 |
| 2 |
后端:创建 TagRecommendResultVO.java |
✅ 已完成 |
| 3 |
后端:创建 TagRecommendService 接口 |
✅ 已完成 |
| 4 |
后端:创建 TagRecommendServiceImpl 实现类 |
✅ 已完成 |
| 5 |
后端:在 ArticleController 添加 /recommend-tags 接口 |
✅ 已完成 |
| 6 |
前端:在 article.js 添加 recommendTags API 方法 |
✅ 已完成 |
| 7 |
前端:在 ArticleEditor.vue 添加智能推荐按钮和交互 |
✅ 已完成 |
| 8 |
后端:单元测试(18 个用例,P0+P1) |
✅ 已完成 |
| 9 |
前后端联调测试(LiveIT 真实 AI 调用验证) |
✅ 已完成 |
| 10 |
功能验收测试(API + 前端静态资源验证) |
✅ 已完成 |
6. 实施顺序建议
- 先做后端:DTO → VO → Service → Controller
- 再做前端:API 方法 → 页面交互
- 最后联调:前后端对接、bug 修复、验收
7. 风险与注意事项
- 模型响应格式:需处理模型返回格式不稳定的情况(如多余空格、换行)
- 标签去重:推荐标签可能与已有标签重复,需前端过滤
- 内容过短:正文少于 10 字符时不调用 AI,直接提示用户
- 限流复用:复用现有 Rate Limit 机制,避免额外开发