43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
from pydantic import Field
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
||
|
||
app_name: str = "X2WeChat Studio"
|
||
openai_api_key: str | None = Field(default=None, alias="OPENAI_API_KEY")
|
||
openai_base_url: str | None = Field(default=None, alias="OPENAI_BASE_URL")
|
||
openai_model: str = Field(default="gpt-4.1-mini", alias="OPENAI_MODEL")
|
||
openai_timeout: float = Field(
|
||
default=120.0,
|
||
alias="OPENAI_TIMEOUT",
|
||
description="HTTP 等待模型单轮响应的最长时间(秒)。通义长文 JSON 建议 120~180",
|
||
)
|
||
openai_max_retries: int = Field(
|
||
default=0,
|
||
alias="OPENAI_MAX_RETRIES",
|
||
description="OpenAI SDK 自动重试次数。为避免单次请求被重试拉长,默认 0。",
|
||
)
|
||
openai_max_output_tokens: int = Field(
|
||
default=8192,
|
||
alias="OPENAI_MAX_OUTPUT_TOKENS",
|
||
description="单次模型输出 token 上限;通义等长文 JSON 需足够大",
|
||
)
|
||
openai_source_max_chars: int = Field(default=5000, alias="OPENAI_SOURCE_MAX_CHARS")
|
||
ai_soft_accept: bool = Field(
|
||
default=True,
|
||
alias="AI_SOFT_ACCEPT",
|
||
description="质检未通过时仍输出模型洗稿正文(mode=ai,quality_notes 记录问题),仅模型完全失败时用保底稿",
|
||
)
|
||
|
||
wechat_appid: str | None = Field(default=None, alias="WECHAT_APPID")
|
||
wechat_secret: str | None = Field(default=None, alias="WECHAT_SECRET")
|
||
wechat_author: str = Field(default="AI 编辑部", alias="WECHAT_AUTHOR")
|
||
|
||
im_webhook_url: str | None = Field(default=None, alias="IM_WEBHOOK_URL")
|
||
im_secret: str | None = Field(default=None, alias="IM_SECRET")
|
||
|
||
|
||
settings = Settings()
|