From 87244d4dc2e766d91005467fbd539df9658e52c2 Mon Sep 17 00:00:00 2001 From: heimoshuiyu Date: Tue, 28 Nov 2023 10:42:06 +0800 Subject: [PATCH] update docs --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index da31324..e4b3dc7 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - 支持所有类型的接口 (`/v1/*`) - 提供 Prometheus Metrics 统计接口 (`/v1/metrics`) - 按照定义顺序请求 OpenAI 上游 -- 识别 ChatCompletions Stream 请求,针对 Stream 请求使用 5 秒超时。对于其他请求使用 60 秒超时。 +- 识别 ChatCompletions Stream 请求,针对 Stream 请求使用 5 秒超时。具体超时策略请参阅 [超时策略](#超时策略) 一节 - 记录完整的请求内容、使用的上游、IP 地址、响应时间以及 GPT 回复文本 - 请求出错时发送 飞书 或 Matrix 消息通知 @@ -99,3 +99,27 @@ upstreams: 请注意,程序会根据情况修改 timeout 的值 您可以直接运行 `./openai-api-route` 命令,如果数据库不存在,系统会自动创建。 + +## 超时策略 + +在处理上游请求时,超时策略是确保服务稳定性和响应性的关键因素。本服务通过配置文件中的 `Upstreams` 部分来定义多个上游服务器。每个上游服务器都有自己的 `Endpoint` 和 `SK`(可能是密钥或特殊标识)。服务会按照配置文件中的顺序依次尝试每个上游服务器,直到请求成功或所有上游服务器都已尝试。 + +### 单一上游配置 + +当配置文件中只定义了一个上游服务器时,该上游的超时时间将被设置为 120 秒。这意味着,如果请求没有在 120 秒内得到上游服务器的响应,服务将会中止该请求并可能返回错误。 + +### 多上游配置 + +如果配置文件中定义了多个上游服务器,服务将会按照定义的顺序依次尝试每个上游。对于每个上游服务器,服务会检查其 `Endpoint` 和 `SK` 是否有效。如果任一字段为空,服务将返回 500 错误,并记录无效的上游信息。 + +### 超时策略细节 + +服务在处理请求时会根据不同的条件设置不同的超时时间。超时时间是指服务等待上游服务器响应的最大时间。以下是超时时间的设置规则: + +1. **默认超时时间**:如果没有特殊条件,服务将使用默认的超时时间,即60秒。 + +2. **流式请求**:如果请求体被识别为流式(`requestBody.Stream` 为 `true`),并且请求体检查(`requestBodyOK`)没有发现问题,超时时间将被设置为5秒。这适用于那些预期会快速响应的流式请求。 + +3. **大请求体**:如果请求体的大小超过128KB(即 `len(inBody) > 1024*128`),超时时间将被设置为20秒。这考虑到了处理大型数据可能需要更长的时间。 + +4. **上游超时配置**:如果上游服务器在配置中指定了超时时间(`upstream.Timeout` 大于0),服务将使用该值作为超时时间。这个值是以秒为单位的。