diff --git a/.env.example b/.env.example index 3660838..2d16c1c 100644 --- a/.env.example +++ b/.env.example @@ -13,3 +13,10 @@ CREATE_IMAGE_MODEL=imagen-3.0-generate-002 UPLOAD_PROVIDER=smms SMMS_SECRET_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ########################################################################## +#########################stream_optimizer 相关配置######################## +STREAM_MIN_DELAY=0.016 +STREAM_MAX_DELAY=0.024 +STREAM_SHORT_TEXT_THRESHOLD=10 +STREAM_LONG_TEXT_THRESHOLD=50 +STREAM_CHUNK_SIZE=5 +########################################################################## diff --git a/README.md b/README.md index 1b9fa29..9f51d54 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,13 @@ # 图片上传配置 UPLOAD_PROVIDER="smms" # 图片上传提供商,目前支持smms SMMS_SECRET_TOKEN="your-smms-token" # SM.MS图床的API Token + + # stream_optimizer 相关配置 + STREAM_MIN_DELAY=0.016 + STREAM_MAX_DELAY=0.024 + STREAM_SHORT_TEXT_THRESHOLD=10 + STREAM_LONG_TEXT_THRESHOLD=50 + STREAM_CHUNK_SIZE=5 ``` ### 配置说明 @@ -136,6 +143,24 @@ - 用途: 用于图片上传到 SM.MS 图床 - 获取方式: 需要在 SM.MS 官网注册并获取 + #### 流式输出优化配置 + + - `STREAM_MIN_DELAY`: 最小延迟时间 + - 默认值: `0.016`(秒) + - 说明: 长文本输出时使用的最小延迟时间,值越小输出速度越快 + - `STREAM_MAX_DELAY`: 最大延迟时间 + - 默认值: `0.024`(秒) + - 说明: 短文本输出时使用的最大延迟时间,值越大输出速度越慢 + - `STREAM_SHORT_TEXT_THRESHOLD`: 短文本阈值 + - 默认值: `10`(字符) + - 说明: 小于此长度的文本被视为短文本,将使用最大延迟输出 + - `STREAM_LONG_TEXT_THRESHOLD`: 长文本阈值 + - 默认值: `50`(字符) + - 说明: 大于此长度的文本被视为长文本,将使用最小延迟并分块输出 + - `STREAM_CHUNK_SIZE`: 长文本分块大小 + - 默认值: `5`(字符) + - 说明: 长文本分块输出时,每个块的大小 + ### ▶️ 运行 #### 使用 Docker (推荐) diff --git a/app/core/config.py b/app/core/config.py index 7b9ac09..7faa49c 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -17,6 +17,13 @@ class Settings(BaseSettings): UPLOAD_PROVIDER: str = "smms" SMMS_SECRET_TOKEN: str = "" TEST_MODEL: str = "gemini-1.5-flash" + + # 流式输出优化器配置 + STREAM_MIN_DELAY: float = 0.016 + STREAM_MAX_DELAY: float = 0.024 + STREAM_SHORT_TEXT_THRESHOLD: int = 10 + STREAM_LONG_TEXT_THRESHOLD: int = 50 + STREAM_CHUNK_SIZE: int = 5 def __init__(self): super().__init__() diff --git a/app/services/chat/stream_optimizer.py b/app/services/chat/stream_optimizer.py index c3f0ef5..cdf3010 100644 --- a/app/services/chat/stream_optimizer.py +++ b/app/services/chat/stream_optimizer.py @@ -4,6 +4,7 @@ import asyncio import math from typing import Any, List, AsyncGenerator, Callable from app.core.logger import get_openai_logger, get_gemini_logger +from app.core.config import settings logger_openai = get_openai_logger() logger_gemini = get_gemini_logger() @@ -112,5 +113,20 @@ class StreamOptimizer: # 创建默认的优化器实例,可以直接导入使用 -openai_optimizer = StreamOptimizer(logger=logger_openai) -gemini_optimizer = StreamOptimizer(logger=logger_gemini) +openai_optimizer = StreamOptimizer( + logger=logger_openai, + min_delay=settings.STREAM_MIN_DELAY, + max_delay=settings.STREAM_MAX_DELAY, + short_text_threshold=settings.STREAM_SHORT_TEXT_THRESHOLD, + long_text_threshold=settings.STREAM_LONG_TEXT_THRESHOLD, + chunk_size=settings.STREAM_CHUNK_SIZE +) + +gemini_optimizer = StreamOptimizer( + logger=logger_gemini, + min_delay=settings.STREAM_MIN_DELAY, + max_delay=settings.STREAM_MAX_DELAY, + short_text_threshold=settings.STREAM_SHORT_TEXT_THRESHOLD, + long_text_threshold=settings.STREAM_LONG_TEXT_THRESHOLD, + chunk_size=settings.STREAM_CHUNK_SIZE +)