TypeError: openai.types.completion_usage.CompletionUsage() argument after ** must be a mapping

流式响应 (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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值