如果硬要解释的合理一些:程序单独启动一个线程,请求 api 等待返回。这个过程中主线程 sleep 6s ,起到 wait 功能。也就是说模型生成图片基本可以保证 6 秒之内完成。官方回应说是演示使用 SDK 开发,那代码写的比较随意也说得通。
因为脚本在调用大语言模型推理的时候使用的是异步调用: try: predictions = asyncio.run(推理任务) except Exception as e: print(f"Error in 调用: {e}") time.sleep(6) 这个 time.sleep(6)就是再次推理前等待一段时间。 Ctrl+C 的时候就会出发键盘中断, 就进入到 excep 的分支,所以在这 6 秒内再次 Ctrl+C ,就会显示 time.sleep(6)。 微软的代码有一样的部分( https://github.com/microsoft/LLaVA-Med/blob/b9a98a736d2ef05bcf5ff345be6403fb3a664eaf/llava/openai_api.py#L46) 知乎有一摸一样的问题,看来搞大语言模型的人还是少数,啥都不懂的程序员也挺多的。
@man2vec 虽然但是,KeyboardInterrupt 直接继承于 BaseException ,并不会被 Exception 捕获 """ KeyboardInterrupt 当用户按下中断键 (通常为 Control-C 或 Delete) 时将被引发。 在执行期间,会定期检测中断信号。 该异常继承自 BaseException 以确保不会被处理 Exception 的代码意外捕获,这样可以避免退出解释器。 """ 参见 https://docs.python.org/zh-cn/3/library/exceptions.html#KeyboardInterrupt