15 KiB
15 KiB
配置管理
**本文引用的文件** - [.env.example](file://.env.example) - [remotion.config.ts](file://remotion.config.ts) - [tsconfig.json](file://tsconfig.json) - [requirements.txt](file://requirements.txt) - [PROJECT_README.md](file://PROJECT_README.md) - [main.py](file://main.py) - [backend/data_builder.py](file://backend/data_builder.py) - [backend/media_fetcher.py](file://backend/media_fetcher.py) - [frontend/src/render-props-types.ts](file://frontend/src/render-props-types.ts) - [frontend/src/types.ts](file://src\types.ts)目录
简介
本文件系统性梳理本项目的配置管理,覆盖以下方面:
- 环境变量与密钥:.env 中各 API 密钥的作用与设置方法
- 财务模拟参数:DEFAULT_INFLATION_RATE 等参数在数据模拟中的使用
- 视频渲染配置:remotion.config.ts 的渲染行为
- TypeScript 编译配置:tsconfig.json 的编译选项与排除规则
- Python 依赖管理:requirements.txt 的依赖策略与可选组件
- 配置与代码分离最佳实践与密钥安全建议
- 为所有用户提供清晰的配置清单与修改指南
项目结构
本项目采用“Python 后端 + Node.js 前端(Remotion)”混合架构,配置文件分布于根目录与子模块中,便于按层分离与维护。
graph TB
A[".env.example<br/>环境变量示例"] --> B["main.py<br/>主流程入口"]
B --> C["backend/data_builder.py<br/>财务模拟与图表数据构建"]
B --> D["backend/media_fetcher.py<br/>B-Roll 获取待实现"]
B --> E["frontend/src/render-props-types.ts<br/>渲染数据契约TypeScript"]
F["remotion.config.ts<br/>视频渲染配置"] --> G["Remotion 渲染引擎"]
H["tsconfig.json<br/>TypeScript 编译选项"] --> E
I["requirements.txt<br/>Python 依赖清单"] --> B
图示来源
- PROJECT_README.md
- remotion.config.ts
- tsconfig.json
- requirements.txt
- main.py
- backend/data_builder.py
- backend/media_fetcher.py
- frontend/src/render-props-types.ts
章节来源
核心组件
- 环境变量与密钥
- .env.example 提供了 GEMINI_API_KEY、OPENAI_API_KEY、PEXELS_API_KEY 等密钥占位符,以及 DEFAULT_INFLATION_RATE、DEFAULT_DEFICIT_INTEREST_RATE、DEFAULT_INVESTMENT_RETURN 等财务模拟参数占位符。
- 运行时通过 dotenv 加载密钥,用于调用外部服务(如 Pexels、Gemini、OpenAI)。
- 财务模拟参数
- 在 backend/data_builder.py 中,FinancialSimulator 从配置字典读取通胀率、赤字利率、投资回报率等参数,驱动年金模拟与现金流计算。
- 视频渲染配置
- remotion.config.ts 设置图像格式与输出覆盖策略,影响最终视频生成行为。
- TypeScript 编译配置
- tsconfig.json 定义严格模式、JSX 处理、模块解析策略与排除项,确保前端类型检查与构建稳定性。
- Python 依赖管理
- requirements.txt 明确列出核心依赖与可选组件,指导安装与版本选择。
章节来源
架构总览
下图展示配置在整体流程中的作用与流向。
sequenceDiagram
participant Dev as "开发者"
participant Env as ".env/.env.example"
participant Py as "main.py"
participant Sim as "backend/data_builder.py"
participant MF as "backend/media_fetcher.py"
participant TS as "frontend/src/render-props-types.ts"
participant RC as "remotion.config.ts"
Dev->>Env : 创建 .env 并填写密钥与参数
Dev->>Py : 运行主流程
Py->>Env : 读取环境变量密钥
Py->>Sim : 传入 PDF 数据与可选配置含财务参数
Sim->>Sim : 使用 DEFAULT_INFLATION_RATE 等参数进行模拟
Py->>MF : 传入脚本关键词用于 B-Roll 获取
MF->>Env : 读取 PEXELS_API_KEY
Py->>TS : 生成 render_props.json前端契约
Py->>RC : 触发 Remotion 渲染受配置影响
图示来源
- .env.example
- main.py
- backend/data_builder.py
- backend/media_fetcher.py
- frontend/src/render-props-types.ts
- remotion.config.ts
详细组件分析
环境变量与密钥配置(.env)
- 位置与用途
- .env.example 提供密钥占位符与财务参数占位符,用于指导用户创建 .env 文件。
- 运行时通过 dotenv 加载密钥,供后端模块使用。
- 关键条目说明
- GEMINI_API_KEY:用于 PDF 解析与脚本生成(例如 Pexels 关键词翻译、脚本生成等)。
- OPENAI_API_KEY:用于 Whisper 转录(若提供视频输入)。
- PEXELS_API_KEY:用于 B-Roll 资源检索与下载。
- GOOGLE_APPLICATION_CREDENTIALS(可选):用于 Google Cloud TTS(如启用)。
- DEFAULT_INFLATION_RATE、DEFAULT_DEFICIT_INTEREST_RATE、DEFAULT_INVESTMENT_RETURN:财务模拟参数,用于 FinancialSimulator。
- 设置步骤
- 复制 .env.example 为 .env,填入真实密钥与参数值。
- 不要将 .env 提交到版本控制。
- 安全建议
- 将 .env 放入 .gitignore;使用只读权限;在 CI/CD 中使用加密变量注入;定期轮换密钥。
章节来源
财务模拟参数与使用
- 参数来源
- .env 中的 DEFAULT_INFLATION_RATE、DEFAULT_DEFICIT_INTEREST_RATE、DEFAULT_INVESTMENT_RETURN 作为默认值。
- backend/data_builder.py 的 FinancialSimulator 会从传入配置字典中读取对应键,若未提供则使用默认值。
- 模拟逻辑要点
- 通胀调整支出:基于年份指数增长。
- 现金流平衡:收入减去支出得到净现金流。
- 资产余额更新:正余额按投资回报增长,负余额按赤字利率复利增长。
- 现金流明细:将总支出拆分为生活、住房、教育、税、事件等分项。
- 修改指南
- 若需调整模拟参数,可在运行时传入配置字典或通过环境变量映射到配置字典,再传递给 FinancialSimulator。
flowchart TD
Start(["开始:接收财务参数"]) --> Init["初始化资产余额与年份"]
Init --> Loop{"是否达到寿命预期?"}
Loop --> |否| Income["计算当年收入退休前为年收入,否则为0"]
Income --> Inflate["按通胀率调整支出"]
Inflate --> NetCF["计算净现金流"]
NetCF --> Balance{"资产余额是否为正?"}
Balance --> |是| Pos["按投资回报率增长资产余额"]
Balance --> |否| Neg["按赤字利率复利增长资产余额"]
Pos --> Snapshot["生成年度快照"]
Neg --> Snapshot
Snapshot --> Next["推进到下一年"]
Next --> Loop
Loop --> |是| End(["结束:返回完整时间线"])
图示来源
章节来源
视频渲染配置(remotion.config.ts)
- 配置项说明
- 图像格式:设置为 jpeg,影响帧导出质量与体积。
- 输出覆盖:开启覆盖输出,避免重复渲染导致的冲突。
- 影响范围
- 该配置仅对 Node.js API 生效;当使用 Node.js API 时,配置文件不生效,需直接向 API 传入选项。
- 修改建议
- 如需 PNG 或 WebP,可调整图像格式;如需保留中间产物,关闭覆盖输出。
章节来源
TypeScript 编译配置(tsconfig.json)
- 关键选项说明
- target/module:ES2018 与 commonjs,适配 Node.js 环境。
- jsx:react-jsx,支持 React 组件 JSX 渲染。
- strict:启用严格模式,提升类型安全性。
- noEmit:仅类型检查,不生成 JS 文件(由构建工具处理)。
- lib/moduleResolution:指定库与模块解析策略。
- resolveJsonModule:允许导入 JSON 模块。
- exclude:排除 remotion.config.ts,避免其参与前端编译。
- 修改建议
- 如需支持新语法特性,可调整 target;如需切换打包器,注意 moduleResolution 与 lib 的兼容性。
章节来源
Python 依赖管理(requirements.txt)
- 核心依赖
- python-dotenv:加载 .env 文件中的环境变量。
- 可选组件(按需安装)
- google-generativeai:Gemini 相关功能(按官方文档选择版本)。
- openai:Whisper 转录(按官方文档选择版本)。
- ffmpeg-python:视频处理。
- requests:网络请求。
- numpy/pandas(可选):高级仿真与数据分析。
- PyPDF2/pdfplumber(可选):PDF 处理(Gemini 可直接处理 PDF)。
- tqdm/rich:进度条与 CLI 界面美化。
- pytest/pytest-cov(可选):测试与覆盖率。
- 安装建议
- 先安装核心依赖,再根据需要安装可选组件,避免不必要的依赖污染。
章节来源
渲染数据契约(frontend/src/render-props-types.ts)
- 作用
- 定义 render_props.json 的 TypeScript 接口与 Zod 校验,确保前后端数据一致。
- 关键结构
- YearlySnapshot、CashFlowData:年度快照与现金流数据。
- AssetDepletionChartData、CashFlowChartData:图表数据结构。
- ScriptSegment:脚本段落,包含类型与可选的图表同步信息。
- AssetCollection:B-Roll 与视频片段等资源集合。
- RenderProps:顶层渲染契约。
- 使用建议
- 保持前端类型与后端生成的数据结构一致;使用校验函数在运行时验证数据完整性。
章节来源
前端类型基础(src/types.ts)
- 作用
- 定义前端图表组件的基础类型(如 YearlySnapshot、LifePlanChartProps),与渲染契约互补。
- 使用建议
- 在组件中使用这些类型,确保数据消费侧的类型安全。
章节来源
- frontend/src/types.ts
依赖关系分析
- 配置与模块耦合
- main.py 通过命令行参数与配置字典驱动后端流程;FinancialSimulator 依赖配置字典中的财务参数。
- backend/media_fetcher.py 依赖环境变量中的 PEXELS_API_KEY。
- frontend/src/render-props-types.ts 与后端生成的数据结构强绑定,需保持同步。
- 外部依赖
- Python:dotenv、requests、ffmpeg-python、google-generativeai、openai(按需)、tqdm、rich。
- Node.js:Remotion、React、Zod(类型与校验)。
graph LR
ENV[".env/.env.example"] --> PY["main.py"]
PY --> SIM["backend/data_builder.py"]
PY --> MF["backend/media_fetcher.py"]
PY --> RPT["frontend/src/render-props-types.ts"]
RC["remotion.config.ts"] --> REND["Remotion 渲染"]
TS["tsconfig.json"] --> RPT
REQ["requirements.txt"] --> PY
图示来源
- .env.example
- main.py
- backend/data_builder.py
- backend/media_fetcher.py
- frontend/src/render-props-types.ts
- remotion.config.ts
- tsconfig.json
- requirements.txt
性能考虑
- 环境变量加载
- 使用 dotenv 一次性加载 .env,避免频繁 IO;在生产环境中建议通过进程环境变量注入,减少文件系统访问。
- 渲染配置
- 图像格式与覆盖策略直接影响输出体积与磁盘占用;在调试阶段可使用更高分辨率格式,在发布阶段使用更高效的格式。
- 类型检查
- 严格模式与 noEmit 配合,确保类型错误在开发期暴露,减少运行时开销。
- 依赖安装
- 仅安装必要依赖,避免冗余包带来的冷启动与内存占用。
故障排查指南
- “找不到 API 密钥”
- 确认 .env 已创建且包含有效密钥;检查密钥名称与 .env 中一致;确认未提交 .env 到版本控制。
- “Remotion 渲染失败”
- 确认已执行 npm install;检查 frontend/src 结构是否正确;确认渲染命令参数与 render_props.json 路径无误。
- “PDF 解析失败”
- 确认 PDF 可读且未加密;检查 Gemini API 配额与限制;确认网络连通性。
- “B-Roll 获取失败”
- 确认 PEXELS_API_KEY 已正确设置;检查网络与 API 返回状态;关注翻译与下载流程的实现进度。
章节来源
结论
本项目的配置管理遵循“配置与代码分离”的原则:密钥与参数集中于 .env,财务模拟参数通过配置字典注入,渲染与编译配置分别位于 remotion.config.ts 与 tsconfig.json,依赖管理集中在 requirements.txt。通过严格的类型契约与运行时校验,前后端数据一致性得到保障。建议在团队协作中统一密钥管理策略与版本控制规范,持续优化渲染与编译配置以满足性能目标。
附录
配置清单与修改指南
- 环境变量(.env)
- 必填项:GEMINI_API_KEY、OPENAI_API_KEY、PEXELS_API_KEY
- 可选项:GOOGLE_APPLICATION_CREDENTIALS(如使用 TTS)
- 财务参数:DEFAULT_INFLATION_RATE、DEFAULT_DEFICIT_INTEREST_RATE、DEFAULT_INVESTMENT_RETURN
- 修改方式:复制 .env.example 为 .env,填入真实值
- 财务模拟参数
- 位置:backend/data_builder.py 的 FinancialSimulator
- 修改方式:在调用处传入配置字典,或通过环境变量映射到配置字典
- 视频渲染配置
- 位置:remotion.config.ts
- 修改方式:调整图像格式与覆盖策略
- TypeScript 编译配置
- 位置:tsconfig.json
- 修改方式:根据项目需求调整 target、module、lib、moduleResolution 等
- Python 依赖
- 位置:requirements.txt
- 修改方式:按需安装可选组件,避免无关依赖
章节来源