杠精派
派聪明
0/512

热门评论

Taodada 2026年03月20日 22:32
引用原文:服务端接收到消息后,会优先解析 JWT,获取用户身份,并为其确定当前会话 ID
@派聪明 这个会话id是怎么生成的?
点赞
回复5 取消回复
派聪明 2026年03月20日 22:33
根据参考资料中描述的流程,会话ID的生成机制如下: ### 会话ID生成逻辑: 1. **首次请求**(无历史会话): - 服务端解析JWT获取用户身份后,**自动生成一个新的会话ID**(具体算法未明确说明,但通常为**随机唯一标识符**,如UUID或时间戳+随机数)。 - 该ID与用户身份绑定,并写入Redis存储,作为当前会话的标识。 2. **后续请求**(已有会话): - 服务端从Redis中查询该用户是否**存在未过期的会话ID**。 - 若存在,则**复用该会话ID**,继续追加对话历史到Redis中对应的会话记录。 ### 关键设计点: - **唯一性**:会话ID需确保每个用户会话独立(通过用户身份+会话ID双重隔离)。 - **持久化**:会话ID及其对话历史存储在Redis中,支持多轮对话连续性。 - **生命周期**:会话记录有TTL(7天),超时自动失效(资料中提到“TTL重置为7天”)。 - **上下文隔离**:不同会话ID对应独立的对话历史,避免信息混淆。 > 注:资料未明确ID生成算法,但结合企业级系统实践,通常采用**高随机性UUID**或**用户ID+时间戳+随机数组合**,确保安全性与唯一性。
点赞
回复 取消回复
展开剩余 4 条回复

22 条评论

心平气和 2026年04月12日 18:07
引用原文:模型调用的核心逻辑部分
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:06
引用原文:配置对象随后被注入到 DeepSeekClient 中,在构造模型请求 prompt 时直接读取。
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:05
引用原文:配置模型的采样参数,比如 temperature、top_p 和 max_tokens
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:05
引用原文:ai.prompt,用于存放系统提示词规则、引用段落的分隔符、无检索时的占位文本
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:04
引用原文:临时编号
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:04
引用原文:支持连续对话
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:04
引用原文:没有匹配内容
1
点赞
回复 取消回复
心平气和 2026年04月12日 18:03
引用原文:系统规则始终放在最前面,并用中文直接声明几件关键事情,比如:回复必须标注引用编号(例rulai源#1),如果检索不到结果也必须礼貌告知“暂无相关信息”
11
点赞
回复 取消回复
心平气和 2026年04月12日 18:03
引用原文:整个 Prompt 逻辑,包括提示词、引导规则、分隔符、温度参数
11
点赞
回复 取消回复
包容的红酒 2026年03月22日 12:00
引用原文:如果此前已有,则继续使用;否则生成新的会话并写入 Redis,实现会话级别的隔离。
停止令牌,底层怎么实现的?用户通过点击暂停按钮,后续流程呢 @派聪明
点赞
回复1 取消回复
派聪明 2026年03月22日 12:02
根据参考资料中的描述,停止令牌(stop token)的实现机制及用户点击暂停后的流程如下: --- ### **停止令牌的底层实现** 1. **令牌生成** - 当用户发起对话时,前端会生成一个**唯一的停止令牌**(如随机字符串或JWT),并在WebSocket请求头中携带该令牌。 - 示例:`Authorization: Bearer <stop_token>`。 2. **服务端验证** - 后端通过解析JWT或校验令牌有效性,确认请求来源合法性(防止恶意中断他人会话)。 - 验证通过后,该令牌与当前会话绑定,存储在内存或Redis中。 --- ### **用户点击暂停后的流程** 1. **发送中断信号** - 用户点击暂停按钮时,前端携带**相同的停止令牌**向服务端发送中断请求(如`POST /chat/stop`)。 - 服务端收到请求后,验证令牌是否与当前会话匹配。 2. **终止模型推理** - 服务端调用DeepSeek API的**中断接口**(如`stream=false`或`stop=true`参数),或直接关闭HTTP连接。 - **资源释放**: - 取消正在运行的模型推理任务,释放GPU/CPU资源。 - 清除当前会话的流式响应缓冲区。 3. **清理会话状态** - **不保存中断内容**: - 若回答未完成(未收到`[DONE]`标志),本轮对话**不写入Redis**(避免保存不完整回答)。 - **保留会话上下文**: - 会话ID仍存在于Redis中,用户可继续后续对话。 4. **前端响应** - 服务端通过WebSocket向前端发送`{"type": "stopped"}`消息。 - 前端停止渲染流式内容,显示“回答已中断”提示。 --- ### **关键设计点** | **环节** | **实现细节** | |------------------|-----------------------------------------------------------------------------| | **令牌安全** | 通过JWT绑定用户ID,防止跨会话恶意中断。 | | **资源管理** | 中断时立即释放模型推理资源,避免资源泄漏。 | | **数据一致性** | 仅完整回答(含`[DONE]`)才写入Redis,中断内容不保存。 | | **会话连续性** | 会话ID持续存在,支持用户后续追问(历史记录未中断)。 | > 示例代码逻辑(伪代码): > ```python > def handle_stop(stop_token): > if validate_token(stop_token): # 验证令牌 > cancel_generation() # 终止模型推理 > if not is_stream_completed(): # 若未完成 > skip_redis_save() # 不保存中断内容 > send_websocket("stopped") # 通知前端 > ``` 通过此机制,用户可随时安全中断生成,同时保证会话上下文和系统资源的可靠性。
点赞
回复 取消回复

目录