Skip to main content

模块概述

LangChat Pro 的 AIGC(AI Generated Content)模块是整个系统的核心业务模块,负责处理所有与 AI 生成内容相关的业务逻辑。该模块采用分层架构设计,实现了业务逻辑与数据访问的分离,提供了良好的可维护性和扩展性。

代码结构分析

LangChat 中大部分业务接口(xxx模块的CRUD接口)都是 AigcXxx 开头的,因此所有的业务接口都可以直接定位到 Aigc 模块代码: 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 层是业务逻辑的核心,主要职责包括:
  1. 业务规则验证
    • 参数合法性检查
    • 业务规则验证
    • 权限控制检查
  2. 业务流程编排
    • 调用多个 Service 方法
    • 事务管理
    • 异常处理
  3. 数据转换和封装
    • 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 模块具备了良好的可维护性、可扩展性和可测试性,为系统的稳定运行提供了有力保障。