现象
使用ghcr.io/labring/fastgpt:v4.14.16或ghcr.io/labring/fastgpt:v4.14.17镜像,配置AGENT_ENGINE=pi启动服务后,向带有chatNode工作流的应用发送聊天消息,会返回空内容且无错误日志。直接在对应容器内执行依赖检查命令,会提示Cannot find module '@mariozechner/pi-ai'。
可能原因
- Docker镜像构建遗漏依赖:
projects/app/Dockerfile的runner阶段仅复制了tiktoken和@zilliz/milvus2-sdk-node两个node_modules目录,未包含@mariozechner/pi-ai和@mariozechner/pi-agent-core;且由于依赖通过动态await import()加载,Next.js standalone输出的tracing未自动捕获这些包。 - Next.js构建转换问题:Next.js会将动态
import()编译为require(),而这两个包为ESM-only格式,package.json中仅声明了"import"导出,未声明"require",引发CJS/ESM互操作问题。 - 版本适配问题:受影响版本分别使用Node 20.14.0和Node 24.15.0,该互操作问题在对应版本中触发。
排查步骤
- 执行依赖检查命令:替换对应镜像版本,运行
docker run --rm --entrypoint sh [镜像地址] -c 'node -e "require.resolve(\"@mariozechner/pi-ai\")"',若输出Cannot find module '@mariozechner/pi-ai'则确认存在依赖缺失问题。 - 启动服务并测试:配置
AGENT_ENGINE=pi启动FastGPT,创建包含chatNode工作流的应用,发送聊天消息,观察是否返回空内容且无错误日志。
解决与验证
解决方法:修改projects/app/Dockerfile的runner阶段,添加复制缺失依赖的指令,例如补充COPY --from=maindeps /app/node_modules/@mariozechner/pi-ai ./node_modules/@mariozechner/pi-ai和COPY --from=maindeps /app/node_modules/@mariozechner/pi-agent-core ./node_modules/@mariozechner/pi-agent-core;或调整Next.js构建配置以正确捕获动态导入的ESM依赖。 验证步骤:
- 重新构建FastGPT镜像,确保缺失的依赖已被复制到镜像中。
- 再次执行依赖检查命令,确认模块可被正常解析,无
Cannot find module报错。 - 启动服务并测试Pi Agent工作流,确认聊天消息可返回正常内容。
来源:https://github.com/labring/FastGPT/issues/6865