Files
mini-openclaw/docs/聊天连接修复说明.md

46 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 原始聊天连接修复
2026-09-11,本地开发版已修复;未替换8002/3200的Docker稳定版,也未搬迁或删除旧会话。
## 已定位的原因
原始聊天的src/lib/api.ts固定使用8002,工作台使用RISK_AGENT_BACKEND_URL指向8003,导致两套后端混用。
对当前已配置模型服务发送最小连通性请求:默认参数返回HTTP200,但正文content为0字符、推理字段5字符;显式thinking.disabled后正文为5字符、推理为0字符。因此不能把推理字段直接作为答案展示,应使用该服务支持的正文输出模式。
前端原SSE解析器按网络数据块重置事件名,event和data分在两个块时会漏掉token事件;原后端允许空正文正常结束并保存空助手消息。
## 本地生效配置
backend/.env增加`CHAT_THINKING_MODE=disabled`,只用于原始聊天和聊天标题。该文件仍被Git忽略,凭据未提交。留空表示沿用上游默认,enabled表示显式启用;其他模型服务是否支持该参数必须另行验证。业务评审invoke_scoped仍使用调用方显式传入的模型,不受此选项修改。
原始聊天、会话、文件和轨迹请求使用同源`/api/core/*`代理。目标按CORE_BACKEND_URL、RISK_AGENT_BACKEND_URL、8002默认值依次选择;当前本地启动脚本使用8003。代理直接传递流,不缓存完整回答。由于原始聊天包含通用文件与工具能力,此新增代理仅允许本机Host,不作为对外业务入口。
已在本地重启8003加载配置。打开 http://127.0.0.1:3000/ 使用修复后的聊天;原Docker的3200界面未同步修复。旧Docker历史仍在原后端,不会自动出现在新后端的会话列表中。
## 错误与等待
- 空正文、断流、超时和HTTP失败均显示明确提示;失败时保留已接收正文,不保存空助手消息。
- 不用推理内容替代最终答案,不自动重试可能已执行工具的请求。
- 模型单次请求超时60秒、无自动重试;业务聊天事件最长空闲75秒、总计180秒;前端额外有90秒事件空闲/180秒总等待保护。
- 标题生成最多等待8秒,不影响已经成功完成的正文。
- 事件解码支持跨任意字符分片、CRLF、多行data以及仅有最终正文的兼容返回。
## 验证
backend/test_chat_repair.py覆盖空响应、最终正文补发、工具分段、故障保留、超时取消和配置隔离,并调用scripts/test_chat_stream.cjs验证真实TypeScript解析器与代理。
scripts/probe_chat_model.py为手动最小诊断工具,使用既有配置只发送连通性文本,不发送项目、附件、历史或工具;输出仅为字段计数、HTTP状态和时间,不打印凭据或推理内容。使用时会产生真实模型调用,单元测试不执行它。
统一验证日志:test-evidence/20260911-154025-c57d291,103个后端测试、前端构建、两套Compose配置通过。浏览器验收结果另外保存在test-evidence/chat-repair/。
## 2026-09-14:生产容器兼容修复
生产模式下 Next.js 可用监听地址 0.0.0.0 构造 nextUrl,不能将 nextUrl.hostname 当成浏览器 Host 或认证依据。生产环境的通用聊天、文件与会话代理现在一律先通过既有 access/context 校验管理员身份,预览身份、普通业务角色及未认证请求均被拒绝;不会通过放宽 Host 限制绕过鉴权。
原始聊天客户端和 SSE 统一复用当前标签页 sessionStorage 中的 xingbang-access-token。先在 `/data-access` 的“访问身份”连接管理员令牌,再返回聊天首页即可;不改变现有账户或令牌。开发模式在未配置身份时仍仅接受本机 Host,并拒绝跨站请求。
同时补齐镜像启动脚本 CRLF 转换和 HTTP 页面请求 UUID 兼容。原有依赖版本未升级,已记录的依赖安全告警仍需后续单独处理;生产访问应使用受控网络或 HTTPS。
验证:test-evidence/20260914-114958-af1a102,108 项后端测试、前端构建及两套部署配置校验通过;云端容器实测及切换记录保存在 test-evidence/aliyun-switch-20260914。