现象
调用FastGPT的/v1/chat/completions接口时,服务器先返回INFO: 172.27.0.5:33094 - "POST /v1/chat/completions HTTP/1.1" 200 OK的正常日志,随后抛出ERROR: Exception in ASGI application异常。完整报错栈包含asyncio.exceptions.CancelledError: Cancelled by cancel scope 7f6a5de25540,且调用涉及sse_starlette和uvicorn相关模块。
可能原因
该异常源于SSE连接处理时的异步取消操作。当客户端提前断开连接、请求被主动取消或超时,sse_starlette的listen_for_disconnect方法在等待接收消息时会触发asyncio.CancelledError,该异常未被正确捕获,进而引发ASGI应用层面的错误。
排查步骤
- 提取服务器完整报错日志,确认是否包含
Exception in ASGI application、asyncio.exceptions.CancelledError以及sse_starlette/uvicorn相关调用栈; - 检查发起调用的客户端是否存在提前断开连接、主动取消请求或请求超时的情况;
- 确认当前环境中
sse_starlette、uvicorn与FastGPT的版本兼容性,需按实际环境确认; - 检查FastGPT中处理
/v1/chat/completions接口的代码逻辑,是否存在未捕获异步取消异常的分支。
解决与验证
- 在FastGPT的SSE接口处理逻辑中,添加对
asyncio.CancelledError的捕获处理,避免异常向上传播至ASGI服务器; - 重新部署修改后的FastGPT服务,再次调用
/v1/chat/completions接口; - 确认服务器日志中不再出现该ASGI应用异常,且接口返回符合预期。