c# - 长度为 'X' 的 SyncTriggers 有效负载超出了最大长度 '204800' 。恢复为最小格式

标签 c# azure azure-functions .net-6.0 openai-api

我在 Azure 门户中的 App Insights 中的未触发的函数报告下看到此错误,这是异常消息:

SyncTriggers payload of length '225004' exceeds max length of '204800'. Reverting to minimal format.

令我惊讶的是,互联网上似乎以前没有见过这个异常消息。

我知道为什么会发生这种情况,因为我的服务有一百多个端点,而这个错误只发生在其中一个端点,因此它显然与该端点中的特殊功能有关。

并非每次通话都会发生这种情况。有时它可以工作 10 或 20 次,然后突然失败。当它失败时,它会使应用程序服务崩溃。我可以看到这一点,因为 Application Insights 中的后续日志项是 FunctionMetadataManagerLoadingFunctionsMetadata ,这看起来很像是一个启动事件。它运行了大约 10 次,这表明它一次又一次崩溃,或者更确切地说尝试恢复失败。

日志中没有任何与实际错误相关的内容。只是它在调用此网址 100 秒后放弃:https://api.openai.com/v1/chat/completions

The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing

这个问题不是关于“为什么调用 openai 失败?”。调用可能会失败,但这并不意味着我的应用服务变得无响应、崩溃和恢复失败 10 次。

失败的调用会打开一个流并产生响应,这很可能是导致该行为的原因,因为与函数中的其余代码相比,这是此代码的特殊之处。

这是我的代码:

await foreach (var token in api.Chat.StreamChatEnumerableAsync(new ChatRequest()
{
    Model = Model.ChatGPTTurbo,
    Temperature = 0.1,
    MaxTokens = 1000,
    Messages = messages
}

“api”是来自 this excellent package 的“OpenAIAPI”类.

这个错误是什么意思?为什么会出现?怎么解决?

(是的,我可以通过不流式传输响应来避免错误,但这是一个要求)

最佳答案

此问题的原因是连接泄漏。一些连接已打开(在本例中为 OpenAI)并且从未关闭。其他人都很好地关闭了。不久之后,这个错误就会开始发生。也许当连接稍后被自动垃圾收集时它又开始工作了。

我仍然不知道错误消息的确切含义,但问题的原因似乎显然是此连接泄漏,因为该泄漏已修复,现在问题已停止。

关于c# - 长度为 'X' 的 SyncTriggers 有效负载超出了最大长度 '204800' 。恢复为最小格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75799936/

相关文章:

c# - 忽略 JWT Bearer token 签名(即不验证 token )

c# - 针对 Azure SQL DB 的 WCF 事务

php - 新的 Azure PHP API -generateSharedAccessUrl

ajax - JQuery.Ajax POST 请求到 Azure 返回错误请求

azure - 如何获得检测到的实体的置信度得分?

python - Python 中具有计时器触发器和 RunOnStartup 的 Azure 函数在本地失败,并出现错误 "Did not find any initialized language workers"

c# - Azure Functions CloudQueue AddMessageAsync QueueRequestOptions LinearRetryPolicy 不执行任何操作

c# - 在类中打包事件参数,为什么?

c# - 不接受 Azure Function(ILogger 或 TraceWriter)的最后一个日志记录参数

c# - 使用C#从字符串中提取多个值