# demo-langchain4j **Repository Path**: devxz/demo-langchain4j ## Basic Information - **Project Name**: demo-langchain4j - **Description**: LangChain4j + 通义千问 Demo - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2026-02-13 - **Last Updated**: 2026-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🤖 LangChain4j + 通义千问 Demo 使用 LangChain4j 集成通义千问的完整示例项目,支持同步和流式响应,重点实现**带内存缓存的连续对话体验**。 ## 🌟 功能特性 - ✅ 同步聊天功能 - 一次性返回完整响应 - ✅ 流式聊天功能 - 实时逐字输出响应内容(SSE) - ✅ 会话缓存管理 - 基于内存的会话历史存储 - ✅ 多轮对话支持 - 完整的上下文记忆能力 - ✅ 双前端界面 - 主页测试页面 + 缓存聊天专业界面 ## 🚀 快速开始 ### 1. 环境准备 - Java 17+ - Maven 3.8+ ### 2. 配置 API 密钥 ```cmd set ALIBABA_API_KEY=your-api-key-here ``` ### 3. 运行项目 ```cmd mvn spring-boot:run ``` ### 4. 访问应用 - 首页测试:http://localhost:8080 - 缓存聊天:http://localhost:8080/cache-chat.html - 测试页面:http://localhost:8080/test-page.html ## 📁 项目结构 ``` src/ ├── main/ │ ├── java/com/devxz/ │ │ ├── Application.java │ │ ├── config/LangChain4jConfig.java │ │ ├── controller/ │ │ │ ├── AiServiceController.java │ │ │ └── CacheChatController.java │ │ └── service/ │ │ ├── CacheChatService.java │ │ └── QwenAssistant.java │ └── resources/ │ ├── application.yml │ └── static/ │ ├── index.html │ ├── cache-chat.html │ └── test-page.html └── test/ └── java/com/devxz/ ├── StreamTest.java └── StreamDiagnosticTest.java ``` ## 🔧 核心组件 ### 缓存聊天系统 - 会话管理:`ConcurrentHashMap` 内存缓存 - 消息历史:每个会话独立存储 - 自动清理:30分钟过期策略 - 容量控制:最大1000个会话 ### 流式响应实现 ```java @GetMapping(value = "/sessions/{sessionId}/stream-messages", produces = "text/event-stream;charset=UTF-8") public Flux streamMessage(...) { return Flux.create(sink -> { // 添加用户消息 → 构建上下文 → 流式转发 → 保存回复 }); } ``` ## 🛠 技术栈 - **框架**:Spring Boot 3.2.4 - **AI集成**:LangChain4j 1.1.0-beta7 - **流式处理**:Reactor 3.x + SSE - **前端**:HTML5 + CSS3 + JavaScript + FontAwesome - **构建**:Maven ## 📝 API 文档 ### 缓存聊天接口 - `POST /cache-chat/sessions` - 创建会话 - `GET /cache-chat/sessions/{id}/messages` - 获取消息历史 - `GET /cache-chat/sessions/{id}/stream-messages?message=xxx` - 流式发送消息 - `PUT /cache-chat/sessions/{id}/rename` - 重命名会话 - `DELETE /cache-chat/sessions/{id}` - 删除会话 ## ⚠️ 注意事项 1. 确保可访问阿里云DashScope服务 2. API密钥需有足够配额 3. 浏览器需支持SSE 4. 缓存容量限制为1000个会话 ## 📝 API 文档 ### 基础聊天接口 #### 同步聊天接口 ``` GET /ai/v2/chat?msg={消息内容} 响应: 纯文本字符串 ``` #### 流式聊天接口 ``` GET /ai/v2/stream?msg={消息内容} 响应: text/event-stream (SSE格式) Content-Type: text/event-stream;charset=UTF-8 ``` ### 缓存聊天接口 #### 创建会话 ``` POST /cache-chat/sessions 响应: {"success": true, "sessionId": "uuid-string", "message": "会话创建成功"} ``` #### 发送消息 ``` POST /cache-chat/sessions/{sessionId}/messages Body: {"message": "用户消息内容"} 响应: {"success": true, "reply": "AI回复内容", "sessionId": "会话ID"} ``` #### 获取会话消息 ``` GET /cache-chat/sessions/{sessionId}/messages 响应: {"success": true, "messages": [{"role": "user/assistant", "content": "消息内容", "timestamp": "时间戳"}]} ``` #### 获取会话列表 ``` GET /cache-chat/sessions 响应: {"success": true, "sessions": [{"sessionId": "...", "sessionName": "...", "messageCount": 5}]} ``` #### 重命名会话 ``` PUT /cache-chat/sessions/{sessionId}/rename Body: {"name": "新会话名称"} ``` #### 删除会话 ``` DELETE /cache-chat/sessions/{sessionId} ``` ## ⚠️ 注意事项 1. **网络要求**:确保可以访问阿里云DashScope服务 2. **API配额**:确认API密钥有足够的调用额度 3. **浏览器支持**:流式响应需要浏览器支持SSE (Server-Sent Events) 4. **编码问题**:项目默认使用UTF-8编码,确保控制台和浏览器正确显示中文 ## 🐛 常见问题 ### 流式认证错误 如果遇到 `cannot retry due to server authentication` 错误: 1. 检查环境变量是否正确设置 2. 确认API密钥有效且有足够配额 3. 验证网络连接正常 ### 编码显示异常 1. 确保终端使用UTF-8编码 2. 检查IDE文件编码设置 3. 验证application.yml中的字符集配置 ## 👨‍💻 作者 dev小筑 © 2020-2026