93 lines
3.7 KiB
Python
93 lines
3.7 KiB
Python
# ===== PPT 自动生成 Agent 配置 =====
|
||
|
||
import os
|
||
from pathlib import Path
|
||
|
||
# 项目根目录
|
||
BASE_DIR = Path(__file__).resolve().parent
|
||
|
||
# 引擎路径(2026-08-24 选型:渲染=aura-ppt 主引擎;解析/搜图=ppt-master 辅助)
|
||
# 所有引擎优化只在项目内副本做,技能原版路径只读
|
||
AURA_ENGINE_PATH = Path(os.environ.get("AURA_ENGINE_PATH", BASE_DIR / "engine" / "aura-ppt"))
|
||
AURA_ENGINE_SCRIPT = AURA_ENGINE_PATH / "scripts" / "engine.py"
|
||
PPT_MASTER_PATH = Path(os.environ.get("PPT_MASTER_PATH", BASE_DIR / "engine" / "ppt-master"))
|
||
|
||
# 公司模板(--template 模式继承母版/Logo/页脚)
|
||
COMPANY_TEMPLATE = Path(os.environ.get("COMPANY_TEMPLATE", AURA_ENGINE_PATH / "assets" / "company-template.pptx"))
|
||
# 模板模式策略:always=始终用模板 / ja=仅日语生成用 / off=不用
|
||
COMPANY_TEMPLATE_MODE = os.environ.get("COMPANY_TEMPLATE_MODE", "ja")
|
||
|
||
# ===== 大模型接入(2026-08-25)=====
|
||
# backend: opencode=复用 opencode serve(零 Key) / openai=OpenAI 兼容接口(DeepSeek等) / off=关闭
|
||
LLM_BACKEND = os.environ.get("LLM_BACKEND", "opencode")
|
||
# opencode 模式(模型经基准测试选定:mimo-v2.5-free 结构化输出最快最稳,44s/大纲)
|
||
OPENCODE_SERVE = os.environ.get("OPENCODE_SERVE", "http://127.0.0.1:4096")
|
||
OPENCODE_SERVE_PORT = int(os.environ.get("OPENCODE_SERVE_PORT", "4096"))
|
||
OPENCODE_MODEL = os.environ.get("OPENCODE_MODEL", "opencode/mimo-v2.5-free")
|
||
# openai 兼容模式(DeepSeek: https://api.deepseek.com, model=deepseek-chat)
|
||
OPENAI_API_BASE = os.environ.get("OPENAI_API_BASE", "")
|
||
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
|
||
OPENAI_MODEL = os.environ.get("OPENAI_MODEL", "deepseek-chat")
|
||
# LLM 调用超时(秒)
|
||
LLM_TIMEOUT = int(os.environ.get("LLM_TIMEOUT", "180"))
|
||
|
||
# 长文档两级规划(2026-08-26):分段通读 → 汇总大纲
|
||
PLAN_CHUNK_CHARS = int(os.environ.get("PLAN_CHUNK_CHARS", "6000"))
|
||
PLAN_MAX_CHUNKS = int(os.environ.get("PLAN_MAX_CHUNKS", "8"))
|
||
|
||
# 生成任务输出根目录
|
||
PROJECTS_PATH = Path(os.environ.get("PROJECTS_PATH", BASE_DIR / "src" / "web" / "data" / "projects"))
|
||
|
||
# SQLite 数据库路径
|
||
DB_PATH = Path(os.environ.get("DB_PATH", BASE_DIR / "src" / "web" / "data" / "ppt.db"))
|
||
|
||
# Flask Session 密钥(环境变量注入,不进仓库)
|
||
SECRET_KEY = os.environ.get("SECRET_KEY", "ppt-agent-dev-secret-key-do-not-use-in-prod")
|
||
|
||
# 服务绑定
|
||
HOST = os.environ.get("HOST", "127.0.0.1")
|
||
PORT = int(os.environ.get("PORT", "5000"))
|
||
DEBUG = os.environ.get("FLASK_DEBUG", "0") == "1"
|
||
|
||
# 上传限制
|
||
MAX_UPLOAD_MB = 20
|
||
UPLOAD_DIR = BASE_DIR / "src" / "web" / "data" / "uploads"
|
||
|
||
# 文件类型白名单
|
||
ALLOWED_EXTENSIONS = {
|
||
".pdf": "pdf",
|
||
".docx": "doc",
|
||
".doc": "doc",
|
||
".xlsx": "excel",
|
||
".xlsm": "excel",
|
||
".pptx": "ppt",
|
||
".md": "markdown",
|
||
".txt": "text",
|
||
".html": "html",
|
||
".htm": "html",
|
||
}
|
||
|
||
# 枚举白名单
|
||
ALLOWED_SCENES = ("report", "training")
|
||
ALLOWED_COLORS = ("blue", "green", "purple", "orange", "gray")
|
||
ALLOWED_LANGS = ("zh", "ja")
|
||
ALLOWED_CANVAS = ("ppt169", "ppt43")
|
||
ALLOWED_IMAGE_STRATEGIES = ("web", "ai", "off")
|
||
|
||
# 配图策略(web 默认)
|
||
DEFAULT_IMAGE_STRATEGY = "web"
|
||
|
||
# 生成任务并发上限
|
||
MAX_CONCURRENT_GENERATION = 1
|
||
|
||
# ===== 网络搜图(2026-08-25)=====
|
||
# web=调用 ppt-master image_search.py(openverse/wikimedia 零配置)
|
||
# test=本地样例图通道(e2e 用,读 IMAGE_SEARCH_TEST_DIR)
|
||
# off=禁用配图
|
||
IMAGE_SEARCH_MODE = os.environ.get("IMAGE_SEARCH_MODE", "web")
|
||
IMAGE_SEARCH_TEST_DIR = os.environ.get("IMAGE_SEARCH_TEST_DIR", "")
|
||
IMAGE_SEARCH_TIMEOUT = int(os.environ.get("IMAGE_SEARCH_TIMEOUT", "90"))
|
||
MAX_IMAGE_SLIDES = int(os.environ.get("MAX_IMAGE_SLIDES", "4"))
|
||
|
||
# 引擎剧本目录(会话用)
|
||
GENERATION_SCRIPT = None |