中期成果提交:PPT自动生成 Agent(感知-规划-行动-记忆闭环 + aura-ppt 渲染引擎 + Web 交互界面 + 测试用例 + AI 使用日志)
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# ===== 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
|
||||
Reference in New Issue
Block a user