概述
Chat服务是LangChat Pro的核心功能模块,负责处理用户的聊天对话请求,支持流式响应、知识库检索、工具调用等高级功能。架构层次
核心组件
1. LcChatController
路径:langchat-core/src/main/java/cn/langchat/core/controller/LcChatController.java
职责: REST API控制器,处理HTTP聊天请求
核心方法:
- REST API接口
- 流式响应支持
- 权限验证
- 参数校验
2. ChatService
接口路径:langchat-aigc/langchat-aigc-api/src/main/java/cn/langchat/aigc/api/service/ChatService.java
实现路径: langchat-aigc/langchat-aigc-api/src/main/java/cn/langchat/aigc/api/service/impl/ChatServiceImpl.java
职责: 聊天业务逻辑处理
核心方法:
- 参数验证和转换
- 调用LcChatService执行AI推理
- 处理流式响应
- 保存聊天记录
- 敏感词过滤
- 消息推送
3. LcChatService
接口路径:langchat-core/src/main/java/cn/langchat/core/service/LcChatService.java
实现路径: langchat-core/src/main/java/cn/langchat/core/service/impl/LcChatServiceImpl.java
职责: 核心聊天服务,负责AI Service构建和调用
核心方法:
streamingChat 流程
请求处理流程
完整聊天流程
核心依赖组件
1. ChatContextBuilder
路径:langchat-core/src/main/java/cn/langchat/core/builder/ChatContextBuilder.java
职责: 从请求构建ChatContext
代码:
2. ChatModelFactory
路径:langchat-core/src/main/java/cn/langchat/core/factory/ChatModelFactory.java
职责: 动态创建ChatModel实例
核心方法:
- OpenAI
- Ollama
- Qwen (通义千问)
- Qianfan (百度千帆)
- Zhipu (智谱AI)
3. AiServiceBuilder
路径:langchat-core/src/main/java/cn/langchat/core/builder/AiServiceBuilder.java
职责: 构建完整的AI Service
核心方法:
- ChatMemory - 聊天记忆
- SystemMessage - 系统提示
- Tools - 动态工具(插件、MCP等)
- RetrievalAugmentor - RAG组件
流式响应处理
TokenStream 回调
ChatListener 事件监听
路径:langchat-core/src/main/java/cn/langchat/core/observability/ChatListener.java
监听的事件:
onRequest- 请求开始onResponse- 接收响应onTokenStreamGenerated- 生成Token流onError- 错误发生onComplete- 请求完成
- Token统计和计费
- 消息记录保存
- 监控和日志
消息处理
消息构建
消息类型转换
ChatMessageConverter:- 将前端消息格式转换为LangChain4j消息格式
- 支持UserMessage, SystemMessage, AssistantMessage等
ChatMemory 管理
LcChatMemory
路径:langchat-core/src/main/java/cn/langchat/core/service/LcChatMemory.java
职责: 基于Redis的ChatMemory实现
功能:
- 存储历史消息
- 消息窗口管理
- 自动过期清理
异常处理
常见异常类型
-
IllegalArgumentException - 参数错误
- 模型ID为空
- 消息为空
- chatId为空
-
BusinessException - 业务错误
- 模型不存在
- 权限不足
- 配额超限
-
ServiceException - 服务错误
- AI服务调用失败
- 网络超时
- 模型返回错误
异常处理流程
性能优化
1. 模型实例缓存
ChatModelFactory 使用Caffeine缓存模型实例:- 基于模型配置生成缓存键
- 懒加载机制
- 每次请求创建独立的listener
2. ChatMemory 优化
- 使用Redis存储,支持分布式
- 消息窗口限制,避免内存溢出
- 自动过期机制
3. 异步处理
- 流式响应,降低延迟
- 非阻塞IO
- 异步保存消息记录
配置说明
ChatMemory配置
模型配置
扩展点
1. 自定义ChatListener
继承或实现ChatListener,添加自定义事件处理:2. 自定义ChatMemory
实现ChatMemoryStore接口:3. 添加新的聊天模式
在LcChatService中添加新方法:最佳实践
1. 使用正确的聊天方法
- streamingChat - 需要知识库、RAG的场景
- standaloneStreamingChat - 独立聊天,不关联知识库
- simpleChatForText - 获取纯文本,用于结构化数据提取
2. 合理设置ChatMemory
- 根据应用场景调整maxMessages
- 过大可能影响性能和成本
- 过小可能导致上下文丢失
3. 流式响应处理
- 必须处理所有回调
- 正确处理错误
- 及时释放资源
4. 安全考虑
- 验证所有输入参数
- 实施敏感词过滤
- 控制访问频率

