模块概述
LangChat Pro 的 AIGC(AI Generated Content)模块是整个系统的核心业务模块,负责处理所有与 AI 生成内容相关的业务逻辑。该模块采用分层架构设计,实现了业务逻辑与数据访问的分离,提供了良好的可维护性和扩展性。
代码结构分析
LangChat 中大部分业务接口(xxx模块的CRUD接口)都是 AigcXxx 开头的,因此所有的业务接口都可以直接定位到 Aigc 模块代码:
模块架构设计
分层架构
在 aigc 下面包含两个子模块,采用经典的三层架构设计:
- aigc-api: 主要是 Controller 和 Service 层代码(接口都在这个模块下)
- aigc-biz: 主要是 Model 实体类定义和 Mapper DB 交互的代码
架构优势
代码定位指南
从 Controller 层开始
可以从 Controller 层开始定位到前端的请求调用,这是最直接的代码追踪方式。
代码追踪路径
前端请求 → Controller → Service → Biz → Mapper → 数据库
核心业务接口
接口命名规范
所有 AIGC 相关接口都遵循统一的命名规范:
- 查询接口:
AigcXxxController.query()
- 创建接口:
AigcXxxController.create()
- 更新接口:
AigcXxxController.update()
- 删除接口:
AigcXxxController.delete()
- 批量操作:
AigcXxxController.batchXxx()
接口分类
业务逻辑实现
Service 层职责
Service 层是业务逻辑的核心,主要职责包括:
-
业务规则验证
-
业务流程编排
- 调用多个 Service 方法
- 事务管理
- 异常处理
-
数据转换和封装
- DTO 与实体对象转换
- 响应数据封装
- 错误信息处理
示例代码结构
@Service
@Transactional(rollbackFor = Exception.class)
public class AigcChatServiceImpl implements AigcChatService {
@Autowired
private ChatModelService chatModelService;
@Autowired
private KnowledgeBaseService knowledgeBaseService;
@Override
public ChatResponse chat(ChatRequest request) {
// 1. 参数验证
validateChatRequest(request);
// 2. 获取模型配置
ModelConfig modelConfig = chatModelService.getModelConfig(request.getModelId());
// 3. 获取知识库信息
List<KnowledgeBase> knowledgeBases = knowledgeBaseService.getUserKnowledgeBases(request.getUserId());
// 4. 执行对话生成
ChatResponse response = executeChat(request, modelConfig, knowledgeBases);
// 5. 记录对话日志
saveChatLog(request, response);
return response;
}
}
数据访问层
Mapper 接口设计
Mapper 层采用 MyBatis Plus 框架,提供了丰富的 CRUD 操作:
@Mapper
public interface AigcChatMapper extends BaseMapper<AigcChat> {
/**
* 根据用户ID查询对话列表
*/
@Select("SELECT * FROM aigc_chat WHERE user_id = #{userId} ORDER BY create_time DESC")
List<AigcChat> selectByUserId(@Param("userId") Long userId);
/**
* 根据对话ID查询消息列表
*/
@Select("SELECT * FROM aigc_message WHERE chat_id = #{chatId} ORDER BY create_time ASC")
List<AigcMessage> selectMessagesByChatId(@Param("chatId") Long chatId);
/**
* 统计用户对话数量
*/
@Select("SELECT COUNT(*) FROM aigc_chat WHERE user_id = #{userId}")
Long countByUserId(@Param("userId") Long userId);
}
性能优化策略
1. 数据库优化
- 合理设计索引
- 使用分页查询
- 实现读写分离
- 配置连接池
2. 缓存策略
- Redis 缓存热点数据
- 本地缓存减少网络开销
- 缓存预热和更新策略
- 缓存穿透和雪崩防护
3. 异步处理
- 使用线程池处理耗时操作
- 消息队列解耦业务逻辑
- 异步日志记录
- 批量操作优化
监控和日志
业务监控
- 接口响应时间监控
- 业务成功率统计
- 异常情况告警
- 性能指标收集
日志记录
- 操作日志记录
- 错误日志收集
- 性能日志分析
- 审计日志追踪
通过以上架构设计,AIGC 模块具备了良好的可维护性、可扩展性和可测试性,为系统的稳定运行提供了有力保障。