Whizi消息发不出去,或者回复迟迟不出现

快速解答

Whizi消息发不出去,原因通常是这五种之一:另一条回复还在生成,你把同一条内容发了两次,你触发了每分钟或每小时的限速,消息本身没通过校验,或者你的登录令牌过期了。Whizi会在错误文字里直接说明原因,被限速拦下的请求不会花掉你的额度。

简短的答案

Whizi消息发不出去,原因通常是这五种之一:另一条回复还在生成,你把同一条内容发了两次,你触发了每分钟或每小时的限速,消息本身没通过校验,或者登录令牌过期了。Whizi会在错误文字里说明原因,你看到的那句提示决定了该怎么解决。

你看到的内容状态码原因该怎么做
Generation already in progress. Please stop it or wait for it to finish.409你的账号下另一条回复正在生成停止它,或者等它结束
Duplicate message ignored. Please wait for the current response to finish.409同样的文字(和图片)最近已经发给这个对话了等正在生成的那条回复结束
Too many requests. Please wait and try again.429每分钟的时间窗口拒绝了这次请求等一会儿再重发
Hourly message limit reached. Please try again later.429触发了每小时的消息上限等一会儿再重发
A non-empty message is required.400消息为空或者只有空白字符输入一些内容
This message is {count} characters, over the 100,000 character limit. Attach a shorter file, or ask about one section at a time.400单条消息超过了100,000字符拆开发送,或者一次只问一个部分
The model is temporarily rate-limited. Please retry shortly.429模型提供方在建立连接时返回了429重试,或者换一个模型
Failed to send message.无,网页端的提示条发送失败,后端没有给出具体信息检查网络连接后重发
Something went wrong. Please retry.500后端出现了未被专门处理的错误重发一次,如果反复出现就联系支持
Invalid or expired session token.401令牌校验失败刷新页面并重新登录

被限速拒绝的请求会被撤销,所以一次被拒的请求永远不会从你的额度里扣掉一条消息。

按下回车键没有任何反应

如果按回车完全没反应,说明有一条回复还在生成。输入框在有回复正在进行时会故意忽略回车键,所以这不是漏掉了按键。Shift加回车依然可以换行。

Whizi同一时间每个账号只允许一条回复在生成,这由单用户生成锁强制执行,所以同一个账号的两台设备永远不能同时生成回复。第二次尝试会被拒绝,提示为Generation already in progress. Please stop it or wait for it to finish.,HTTP 409,代码generation_in_progress。当生成协调器在建立连接时检测到冲突,返回的也是同一句提示。

把同样的文字发送两次会返回Duplicate message ignored. Please wait for the current response to finish.,HTTP 409,代码duplicate_message。当同样的消息文字(和图片)最近已经发给这个对话时就会触发,这正是双击发送或者心急又按了一次回车的结果。

两种情况的解决办法一样:停止正在运行的回复,或者等它结束。停止操作在服务器端处理:协调器会取消对模型提供方的读取,保存已经收到的文字,释放锁,并把这条没送达的回复退还给你的额度。如果锁不知为何被遗留下来,它也会自动恢复:一旦持有者被判定为孤立或卡死,锁就会变得可以被抢占,过期的锁也会按计划被清理。

如果停止操作留下了空缺,助手气泡里会显示Generation stopped.,这是在生成被停止且没有捕获到部分文字时保存的提示。Generation stopped, but it could not be saved.则表示停止操作成功了,但保存那部分回复失败了。

消息在到达任何模型之前就被拒绝了

以下都是在到达模型之前就被抛出的HTTP 400校验拒绝,任何内容都没有被发往上游。

提示代码触发条件
A non-empty message is required.empty_messagecontent缺失或者只有空白字符
A model is required.invalid_modelmodel缺失或为空
That model is not available for text chat.unsupported_model该模型id在目录里对应不到任何文本模型
This message is {count} characters, over the 100,000 character limit. Attach a shorter file, or ask about one section at a time.message_too_long单条消息超过了100,000字符
That system prompt is missing or over the 32,000 character limit.invalid_system_prompt系统提示词缺失或者超过32,000字符
That image reference is not valid.invalid_image_url图片引用不是字符串,或者长度超过2,048字符
This conversation has {count} messages, over the 100 message limit.too_many_messages应用聊天路由拒绝了一次携带超过100条消息的请求

100,000字符的上限会计入整条消息,包括从附件中提取出来的文字。关于附件提取的文字超出消息预算时Whizi会怎么处理,参见文件上传失败

限速,以及一个跟速度无关的拒绝

上表中的两条429限速提示都携带代码rate_limit_reached。被拒绝的请求会被撤销,所以429永远不会从你的额度里扣掉一条消息:等窗口过去再重发即可。窗口的具体数值以及背后对应的套餐额度,写在限速说明额度用尽里。

同一类里有一条拒绝其实跟速度完全无关:Account sharing limit reached. Please use your own Whizi account.,HTTP 403,代码account_sharing_limit,当过去24小时内同一个账号上出现了超过3个不同的设备或会话密钥时触发。等一分钟并不能解除它。

回复开始了,然后中断或者根本不显示

连接一旦建立,失败要么来自模型提供方,要么来自承载这条流的机制。提示的内容取决于失败发生在哪一环。

提示来源
The model is temporarily rate-limited. Please retry shortly.HTTP 429 provider_rate_limited,提供方在建立连接时返回了429
The model provider rejected the request.用于提供方的错误内容无法解析,或者解析出来是空消息的情况
The model provider returned an empty stream.HTTP 502,上游返回了OK但没有内容
The model provider returned an error.提供方发送了一个没有附带自身消息的错误帧时的流内错误事件
The model stream was interrupted.其他任何流中途失败对应的流内错误事件
Generation failed mid-stream.已经发送了部分字节之后,生成才以失败告终
Generation failed to start.协调器启动失败且没有附带自身消息时的内部兜底文案
The generation stream is unavailable.协调器无法交回一条可以接上的流时抛出
Generation aborted before it started.客户端在上游连接建立完成之前断开,作为AbortError抛出
Something went wrong. Please retry.HTTP 500 internal_error,任何未被专门处理的后端错误的响应体
Sorry, there was an error generating the response.当一条流结束时既没有最终消息也没有累积到任何内容,就会写进助手气泡里

除429以外的任何上游失败都是HTTP 502 provider_error,携带提供方的消息,并截断到300字符。在流中途这条路径上没有带内错误事件:连接就是直接断开。

其中有一条提示其实是一条记录而不是一句消息。Generation aborted before it started.会在客户端于上游连接建立完成之前断开时作为AbortError被抛出,这种情况下路由返回的是HTTP 408和一个空的响应体,所以这句话是服务器写下的记录,而不是浏览器打印出来的内容。在网络抓包里,generate路由上的一个空408意味着请求在触达任何模型之前就已经中止了。

所有这些情况之下都有一个兜底:任何后端无法识别的情况最终都会变成HTTP 500 internal_error,响应体是Something went wrong. Please retry.HTTP 500无法说明具体原因。先重发一次,如果反复出现再联系支持。

该怎么做:重发一次,如果反复出现,就在同一个对话里换一个模型。这些错误产生于Whizi之外的上游,跟你的账号或设置无关。

有一件事你不需要做,那就是一直开着标签页。生成过程运行在按对话划分的Durable Object里,所以在流式回复中途关闭标签页并不会终止这条回复,回复依然会被保存下来。重新打开的标签页或者另一台设备可以重新接上正在进行的生成。The generation stream is unavailable.是在协调器无法交回一条可以接上的流时抛出的。重新加载对话,读取已经保存下来的内容就行,不用干等着这条流。

在并排对比视图里,各自一侧的提示又不一样:The model did not respond. Please try again.用于generate的响应不正常且没有可读错误信息的情况,Could not start a comparison chat.用于背后的对话创建不出来的情况,Something went wrong.则是最后的兜底。最后这一句是简短版,后面没有跟着重试那句话,这就是它跟500错误里那句Something went wrong. Please retry.的区别。

你的登录状态过期了

认证失败看起来像发送失败,因为它们都是在发送时才暴露出来的。Authentication required.是HTTP 401 unauthorized,在请求没有携带承载令牌时触发。Invalid or expired session token.是同样的状态码和代码,出现在令牌校验因任何原因失败时:令牌过期、签名错误、签发方不对。

在网站端,你也可能看到Failed to retrieve session token.,只要在获取对话列表、加载对话、删除、重命名或上传调用之前,令牌获取没有拿到结果,网站就会抛出这句话。对比视图有自己的措辞:Your session expired. Please refresh and try again.

解决办法是刷新页面,如果刷新之后会话还是没有恢复,就重新登录一次。账号上的内容不会丢失,也没有任何消息被真正发送出去。

这不是一次失败,而是一道限制

额度拒绝和套餐拒绝都不是发送失败。请求本身是合法的,只是Whizi有意拒绝了它,所以输入框那边没有什么需要修的:额度拒绝的说明在额度用尽里,显示为锁定状态的模型说明在故障排查里。

被内容审核拦下的提示词也不算发送失败。审核在任何额度被预留之前、在调用提供方之前就已经完成,所以被拦下的提示词不会花掉你的额度,拒绝会以HTTP 400返回,原因会显示在对话里。

编辑已发送的消息反而会失败

编辑一条提示词再重发,是重新跑一轮对话的方式,因为Whizi没有重新生成按钮。这条路径有自己独有的两种失败。

That message is no longer part of this conversation. Reload and try again.是HTTP 404 replace_anchor_not_found,出现在编辑操作指向的消息id已经不在这个对话里的时候。重新加载这个对话即可。客户端手里拿着的是一个服务器上已经没有的消息id。

Conversation not found.是HTTP 404 not_found,出现在对话id不存在或者不属于调用者的时候。它也会出现在generate路由,以及读取、删除、重命名、追加消息、切换版本和分享这几个路由上。

操作清单
  • 按回车没反应,说明有一条回复还在生成,不是漏按了键
  • 同一时间每个账号只运行一条生成,跨你所有的设备都算
  • 重复发送会被有意忽略,会返回409和一句说明
  • 聊天有每分钟和每小时的上限,任何套餐都解不开
  • 被限速拒绝的请求不会花掉你的额度
  • 单条消息上限是100,000字符
  • 提供方的错误靠重发或换模型解决,不是靠改设置
  • 在回复过程中关闭标签页不会中断这条回复
  • 认证错误靠刷新页面并重新登录解决

常见问题

"Generation already in progress. Please stop it or wait for it to finish."是什么意思?

停止正在运行的回复,或者等它结束,然后再发一次。这个拒绝是HTTP 409,代码generation_in_progress,同一个账号在另一台设备上生成时也会出现同样的提示。停止操作在服务器端处理:部分答案会被保存,锁会被释放,一条没送达的回复会被退还给额度。

我的回复中途停止了,我被扣钱了吗?

流中途失败会在没有带内错误事件的情况下直接断开连接,断开之前收到的文字会被保留下来。如果是你自己停止了生成,服务器会取消对提供方的读取,保存部分答案,并退还一条没送达的回复。如果同一个提供方反复出问题,就在同一个对话里换一个模型,因为这个错误产生于Whizi之外的上游。如果你收到的是HTTP 500和"Something went wrong. Please retry.",那是未被专门处理的后端错误的通用响应体,不是模型本身的问题,重发一次,如果反复出现再报告。

关闭标签页会取消我的回复吗?

不会,只有开头很窄的一段时间例外。如果客户端在上游连接建立完成之前就断开了,服务器会记录"Generation aborted before it started."并返回HTTP 408和一个空响应体,这就是为什么那次请求看起来像什么都没返回。过了这个阶段,回复就不会因为客户端而消失,因为生成运行在按对话划分的Durable Object里,答案依然会被保存下来。"The generation stream is unavailable."是协调器无法交回一条可以接上的流时抛出的,重新加载对话就能看到已经保存的内容。

Whizi说我的消息超过了100,000字符的上限,该怎么办?

单条消息上限是100,000字符,拒绝会以HTTP 400返回,代码message_too_long。这个计数会算上整条消息,包括从附件中提取出来的文字。可以一次只问一个部分,或者附上一个更短的文件。当提取出来的附件文字超出消息预算时,Whizi会截断而不是直接拒绝,并提示你只有前一部分被发送了。