落地并存测服全端:智能体 Graph/路由、后台切 8180、主账与部署脚本齐备,便于线上重发与验收。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -41,8 +41,14 @@ class Settings(BaseSettings):
|
||||
ytd_env: str = Field(default="test", alias="YTD_ENV")
|
||||
agent_http_port: int = Field(default=8910, alias="AGENT_HTTP_PORT")
|
||||
public_base_url: str = Field(default="", alias="PUBLIC_BASE_URL")
|
||||
biz_api_base_url: str = Field(default="http://127.0.0.1:8180", alias="BIZ_API_BASE_URL")
|
||||
biz_api_base_url: str = Field(default="http://127.0.0.1:8180/jeecgboot", alias="BIZ_API_BASE_URL")
|
||||
biz_api_token: str = Field(default="", alias="BIZ_API_TOKEN")
|
||||
biz_api_username: str = Field(default="", alias="BIZ_API_USERNAME")
|
||||
biz_api_password: str = Field(default="", alias="BIZ_API_PASSWORD")
|
||||
biz_api_timeout_seconds: float = Field(default=10.0, alias="BIZ_API_TIMEOUT_SECONDS")
|
||||
agent_callback_token: str = Field(default="", alias="AGENT_CALLBACK_TOKEN")
|
||||
# 兼容现网变量名
|
||||
inquiry_agent_callback_token: str = Field(default="", alias="INQUIRY_AGENT_CALLBACK_TOKEN")
|
||||
|
||||
# 企微询价应用(与正式同一套应用 ID;密钥只从环境读)
|
||||
wecom_corp_id: str = Field(default="", alias="WECOM_CORP_ID")
|
||||
@@ -62,12 +68,78 @@ class Settings(BaseSettings):
|
||||
pg_database: str = Field(default="", alias="PG_DATABASE")
|
||||
pg_user: str = Field(default="", alias="PG_USER")
|
||||
pg_password: str = Field(default="", alias="PG_PASSWORD")
|
||||
pg_sslmode: str = Field(default="prefer", alias="PG_SSLMODE")
|
||||
# 可直接给完整 DSN;为空则由 host/port/user 等拼装
|
||||
pg_dsn: str = Field(default="", alias="PG_DSN")
|
||||
# postgres | memory;正式必须 postgres;memory 仅本地骨架冒烟
|
||||
checkpoint_backend: str = Field(default="postgres", alias="CHECKPOINT_BACKEND")
|
||||
|
||||
redis_url: str = Field(default="", alias="REDIS_URL")
|
||||
redis_key_prefix: str = Field(default="inquiry_robot:", alias="REDIS_KEY_PREFIX")
|
||||
# redis | memory;正式必须 redis + URL 指向逻辑库 /1(与现网 /0 隔离)
|
||||
redis_backend: str = Field(default="redis", alias="REDIS_BACKEND")
|
||||
redis_required: bool = Field(default=False, alias="REDIS_REQUIRED")
|
||||
# auto | memory | postgres;auto=有 PG_DSN 则尝试 PG
|
||||
message_store_backend: str = Field(default="auto", alias="MESSAGE_STORE_BACKEND")
|
||||
wecom_aibot_bridge_token: str = Field(default="", alias="WECOM_AIBOT_BRIDGE_TOKEN")
|
||||
wecom_aibot_ingress_url: str = Field(
|
||||
default="http://127.0.0.1:8910/internal/aibot/inbound",
|
||||
alias="WECOM_AIBOT_INGRESS_URL",
|
||||
)
|
||||
|
||||
deepseek_api_key: str = Field(default="", alias="DEEPSEEK_API_KEY")
|
||||
deepseek_base_url: str = Field(default="https://api.deepseek.com", alias="DEEPSEEK_BASE_URL")
|
||||
deepseek_model: str = Field(default="", alias="DEEPSEEK_MODEL")
|
||||
qwen_api_key: str = Field(default="", alias="QWEN_API_KEY")
|
||||
qwen_base_url: str = Field(default="", alias="QWEN_BASE_URL")
|
||||
qwen_text_model: str = Field(default="", alias="QWEN_TEXT_MODEL")
|
||||
qwen_vl_model: str = Field(default="", alias="QWEN_VL_MODEL")
|
||||
# prompt/04:未确认不得打真实模型(出站 HTTP 客户端强制检查)
|
||||
llm_data_usage_confirmed: bool = Field(default=False, alias="LLM_DATA_USAGE_CONFIRMED")
|
||||
# Worker 槽是否允许对 ordered_actions 走真网(仍受上一开关约束)
|
||||
llm_allow_network: bool = Field(default=False, alias="LLM_ALLOW_NETWORK")
|
||||
|
||||
# LibreOffice:默认 Windows 安装路径;Linux 可改 /usr/bin/libreoffice
|
||||
libreoffice_path: str = Field(
|
||||
default=r"C:\Program Files\LibreOffice\program\soffice.exe",
|
||||
alias="LIBREOFFICE_PATH",
|
||||
)
|
||||
libreoffice_timeout_seconds: float = Field(
|
||||
default=120.0, alias="LIBREOFFICE_TIMEOUT_SECONDS"
|
||||
)
|
||||
|
||||
object_storage_endpoint_url: str = Field(default="", alias="OBJECT_STORAGE_ENDPOINT_URL")
|
||||
object_storage_bucket: str = Field(default="inquiry-robot", alias="OBJECT_STORAGE_BUCKET")
|
||||
object_storage_access_key: str = Field(default="", alias="OBJECT_STORAGE_ACCESS_KEY")
|
||||
object_storage_secret_key: str = Field(default="", alias="OBJECT_STORAGE_SECRET_KEY")
|
||||
object_storage_path_style: bool = Field(default=True, alias="OBJECT_STORAGE_PATH_STYLE")
|
||||
|
||||
libreoffice_slots: int = Field(default=1, alias="LIBREOFFICE_SLOTS")
|
||||
http_job_slots: int = Field(default=3, alias="HTTP_JOB_SLOTS")
|
||||
|
||||
def resolve_pg_dsn(self) -> str:
|
||||
"""
|
||||
解析 PostgreSQL 连接串(运行账 / Graph checkpoint)。
|
||||
|
||||
返回值:PG_DSN 或由分量拼出的 URI;缺关键字段时返回空串。
|
||||
禁止:连现网 ytd_runtime(由部署/环境保证库名,代码不写死切换)。
|
||||
"""
|
||||
raw = (self.pg_dsn or "").strip()
|
||||
if raw:
|
||||
return raw
|
||||
if not (self.pg_host and self.pg_database and self.pg_user):
|
||||
return ""
|
||||
# 密码可为空(本机信任);sslmode 走环境
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
user = quote_plus(self.pg_user)
|
||||
password = quote_plus(self.pg_password or "")
|
||||
auth = f"{user}:{password}@" if self.pg_password else f"{user}@"
|
||||
return (
|
||||
f"postgresql://{auth}{self.pg_host}:{self.pg_port}/"
|
||||
f"{self.pg_database}?sslmode={self.pg_sslmode or 'prefer'}"
|
||||
)
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def get_settings() -> Settings:
|
||||
|
||||
Reference in New Issue
Block a user