流式响应 (stream=True
) 时 OpenAI API 并不总是返回 usage
- OpenAI API 在流式模式 (
stream=True
) 下,某些chunk
可能不会包含usage
字段。 - 但你的代码默认假设
chunk.usage
一定存在,因此当usage
为空时,调用CompletionUsage(**chunk.usage)
就会报TypeError: NoneType
。
所以你需要在 chunk.usage
为空时避免 CompletionUsage(**chunk.usage)
报错。
修改方案
在 metagpt/provider/openai_api.py
里找到以下代码:
if finish_reason:
if hasattr(chunk, "usage"):
usage = CompletionUsage(**chunk.usage)
elif hasattr(chunk.choices[0], "usage"):
usage = CompletionUsage(**chunk.choices[0].usage)
修改为:
if finish_reason:
if hasattr(chunk, "usage") and chunk.usage is not None:
usage = CompletionUsage(**chunk.usage)
elif hasattr(chunk.choices[0], "usage") and chunk.choices[0].usage is not None:
usage = CompletionUsage(**chunk.choices[0].usage)
else:
usage = None # 或者给一个默认值,例如 CompletionUsage(total_tokens=0)