先确认app-server进程是否运行,再检查3000端口监听状态,接着验证/health接口是否返回{"status":"ok"},最后通过直连测试、network面板分析或强制指定后端地址排查跨域与代理问题。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

确认app-server进程是否真实运行
打开终端,执行 ps aux | grep app-server(Mac/Linux)或 tasklist | findstr codex(Windows),查看是否有名为 app-server 或 codex.exe 的后台进程在持续运行。
如果没有输出,说明后端服务根本没启动成功;如果进程存在但几秒后自动消失,大概率是被安全软件拦截——【Windows用户请立即检查火绒、360或Windows Defender是否将codex.exe标为风险程序并静默终止】。
检查服务监听端口是否就绪
执行 netstat -an | grep :3000(Mac/Linux)或 netstat -ano | findstr :3000(Windows),确认端口 3000(默认)是否处于 LISTENING 状态。
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
若无结果,说明 app-server 没有绑定端口。此时不要改前端地址,先回到服务启动命令本身:检查是否漏写了 --port 3000 参数,或该端口正被 VSCode、Docker 或其他本地服务占用。可用 lsof -i :3000(Mac)或 netstat -ano | findstr :3000 查出 PID 后用 taskkill /F /PID XXXX 强制释放。
验证服务端健康接口是否可通
在浏览器或 curl 中直接访问 http://localhost:3000/health。
如果返回 {"status":"ok"},说明后端已就绪,问题一定出在前端页面的请求路径、CORS 配置或代理转发规则上;如果返回连接被拒绝(Connection refused)或超时,则证明 app-server 进程未真正跑起来,或启动时因模型路径错误、显存不足、配置语法异常等导致秒退——这时必须看启动终端里的第一行报错日志,而不是盯着页面刷新。
排查前端与后端跨域或代理链路
方法一:绕过代理直连测试
打开前端项目根目录下的 vite.config.ts 或 vue.config.js,临时注释掉所有 proxy 配置,然后在浏览器中直接访问 http://localhost:3000/api/v1/models。能通,说明原代理规则写错了;不能通,说明后端根本没响应。
方法二:检查浏览器开发者工具 Network 标签页
刷新页面,找到第一个失败的 XHR 请求(通常是 /api/v1/status),点开看它的 Request URL 是什么。如果显示的是 http://localhost:5173/api/v1/status,说明请求根本没有发给后端,而是被前端开发服务器截获了——这时候要查 vite 的 server.proxy 是否把 /api 正确映射到了 http://localhost:3000。
方法三:强制指定后端地址(仅限调试)
在前端代码里全局搜索 fetch('/api,把所有 fetch('/api 替换成 fetch('http://localhost:3000/api,保存后重启前端。这一步能彻底排除代理层干扰,快速定位是网络链路问题还是前端构建问题。







