- 扩展 test_agent_execution(--homework、UTF-8 控制台) - 后端:uploads 预览、file_read、工作流与对话落盘等 - 前端:AgentChatPreview 与设计器相关调整 - 忽略 redis二进制、agent_workspaces、uploads、tessdata 等本机产物 Made-with: Cursor
83 lines
3.2 KiB
Python
83 lines
3.2 KiB
Python
"""
|
||
应用配置
|
||
"""
|
||
from pathlib import Path
|
||
|
||
from pydantic_settings import BaseSettings
|
||
from typing import List
|
||
|
||
# 无论从项目根还是 backend 目录启动,始终加载 backend/.env
|
||
_BACKEND_DIR = Path(__file__).resolve().parent.parent.parent
|
||
_ENV_PATH = _BACKEND_DIR / ".env"
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
"""应用设置"""
|
||
|
||
# 应用基本信息
|
||
APP_NAME: str = "低代码智能体平台"
|
||
APP_VERSION: str = "1.0.0"
|
||
DEBUG: bool = True
|
||
SECRET_KEY: str = "dev-secret-key-change-in-production"
|
||
|
||
# 数据库配置(MySQL)
|
||
DATABASE_URL: str = "mysql+pymysql://root:!Rjb12191@gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/agent_db?charset=utf8mb4"
|
||
|
||
# Redis配置
|
||
REDIS_URL: str = "redis://localhost:6379/0"
|
||
|
||
# 会话记忆:除 Redis 外是否写入 MySQL(persistent_user_memories),实现跨重启、跨 TTL 的永久记忆
|
||
MEMORY_PERSIST_DB_ENABLED: bool = True
|
||
|
||
# 本地文件工具(file_read / file_write):允许读写的根目录。空字符串表示使用「backend 的上一级目录」作为仓库根。
|
||
LOCAL_FILE_TOOLS_ROOT: str = ""
|
||
LOCAL_FILE_READ_MAX_BYTES: int = 2_097_152 # 单次读取上限(默认 2MB)
|
||
LOCAL_FILE_WRITE_MAX_BYTES: int = 2_097_152 # 单次写入内容上限(UTF-8 字节)
|
||
|
||
# 图片 OCR(file_read 对 png/jpg 等):Tesseract 可执行文件路径,Windows 示例 C:/Program Files/Tesseract-OCR/tesseract.exe
|
||
TESSERACT_CMD: str = ""
|
||
# 自定义 tessdata 目录(内含 chi_sim.traineddata 等)。留空时若 LOCAL_FILE_TOOLS_ROOT/tessdata 下存在 .traineddata 则自动使用
|
||
TESSERACT_TESSDATA_DIR: str = ""
|
||
|
||
# 智能体对话落盘:在工作区根下 agent_workspaces/<agent_id>/dialogue.md 追加 Markdown(与 LOCAL_FILE_TOOLS_ROOT 一致)
|
||
AGENT_WORKSPACE_CHAT_LOG_ENABLED: bool = True
|
||
AGENT_WORKSPACE_CHAT_SUBDIR: str = "agent_workspaces"
|
||
|
||
# CORS配置(支持字符串或列表)
|
||
CORS_ORIGINS: str = "http://localhost:3000,http://127.0.0.1:3000,http://localhost:8038,http://101.43.95.130:8038"
|
||
|
||
# OpenAI配置
|
||
OPENAI_API_KEY: str = ""
|
||
OPENAI_BASE_URL: str = "https://api.openai.com/v1"
|
||
|
||
# DeepSeek配置
|
||
DEEPSEEK_API_KEY: str = ""
|
||
DEEPSEEK_BASE_URL: str = "https://api.deepseek.com"
|
||
|
||
# Anthropic配置
|
||
ANTHROPIC_API_KEY: str = ""
|
||
|
||
# JWT配置
|
||
JWT_SECRET_KEY: str = "dev-jwt-secret-key-change-in-production"
|
||
JWT_ALGORITHM: str = "HS256"
|
||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
|
||
|
||
# Celery 工作流任务:对**非业务节点失败**(非 WorkflowExecutionError)的退避重试次数,0 表示不重试
|
||
WORKFLOW_TASK_MAX_RETRIES: int = 0
|
||
|
||
# 单执行预算:主循环每执行一个节点计 1 步,超过则熔断(防止死循环/失控)
|
||
WORKFLOW_MAX_STEPS_PER_RUN: int = 2000
|
||
|
||
# 单执行 LLM 节点调用上限(llm / template 节点每执行一次计 1)
|
||
WORKFLOW_MAX_LLM_INVOCATIONS_PER_RUN: int = 200
|
||
|
||
# 单执行工具实际执行次数上限(LLM function calling 每执行一个工具计 1)
|
||
WORKFLOW_MAX_TOOL_CALLS_PER_RUN: int = 500
|
||
|
||
class Config:
|
||
env_file = str(_ENV_PATH)
|
||
case_sensitive = True
|
||
|
||
|
||
settings = Settings()
|