# 配置管理 **本文引用的文件** - [.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) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件系统性梳理本项目的配置管理,覆盖以下方面: - 环境变量与密钥:.env 中各 API 密钥的作用与设置方法 - 财务模拟参数:DEFAULT_INFLATION_RATE 等参数在数据模拟中的使用 - 视频渲染配置:remotion.config.ts 的渲染行为 - TypeScript 编译配置:tsconfig.json 的编译选项与排除规则 - Python 依赖管理:requirements.txt 的依赖策略与可选组件 - 配置与代码分离最佳实践与密钥安全建议 - 为所有用户提供清晰的配置清单与修改指南 ## 项目结构 本项目采用“Python 后端 + Node.js 前端(Remotion)”混合架构,配置文件分布于根目录与子模块中,便于按层分离与维护。 ```mermaid graph TB A[".env.example
环境变量示例"] --> B["main.py
主流程入口"] B --> C["backend/data_builder.py
财务模拟与图表数据构建"] B --> D["backend/media_fetcher.py
B-Roll 获取待实现"] B --> E["frontend/src/render-props-types.ts
渲染数据契约TypeScript"] F["remotion.config.ts
视频渲染配置"] --> G["Remotion 渲染引擎"] H["tsconfig.json
TypeScript 编译选项"] --> E I["requirements.txt
Python 依赖清单"] --> B ``` 图示来源 - [PROJECT_README.md](file://PROJECT_README.md#L50-L80) - [remotion.config.ts](file://remotion.config.ts#L1-L12) - [tsconfig.json](file://tsconfig.json#L1-L18) - [requirements.txt](file://requirements.txt#L1-L34) - [main.py](file://main.py#L1-L305) - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) - [backend/media_fetcher.py](file://backend/media_fetcher.py#L1-L72) - [frontend/src/render-props-types.ts](file://frontend/src/render-props-types.ts#L1-L251) 章节来源 - [PROJECT_README.md](file://PROJECT_README.md#L50-L80) ## 核心组件 - 环境变量与密钥 - .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 明确列出核心依赖与可选组件,指导安装与版本选择。 章节来源 - [.env.example](file://.env.example#L1-L23) - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) - [remotion.config.ts](file://remotion.config.ts#L1-L12) - [tsconfig.json](file://tsconfig.json#L1-L18) - [requirements.txt](file://requirements.txt#L1-L34) ## 架构总览 下图展示配置在整体流程中的作用与流向。 ```mermaid 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](file://.env.example#L1-L23) - [main.py](file://main.py#L1-L305) - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) - [backend/media_fetcher.py](file://backend/media_fetcher.py#L1-L72) - [frontend/src/render-props-types.ts](file://frontend/src/render-props-types.ts#L1-L251) - [remotion.config.ts](file://remotion.config.ts#L1-L12) ## 详细组件分析 ### 环境变量与密钥配置(.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.example](file://.env.example#L1-L23) - [PROJECT_README.md](file://PROJECT_README.md#L97-L111) ### 财务模拟参数与使用 - 参数来源 - .env 中的 DEFAULT_INFLATION_RATE、DEFAULT_DEFICIT_INTEREST_RATE、DEFAULT_INVESTMENT_RETURN 作为默认值。 - backend/data_builder.py 的 FinancialSimulator 会从传入配置字典中读取对应键,若未提供则使用默认值。 - 模拟逻辑要点 - 通胀调整支出:基于年份指数增长。 - 现金流平衡:收入减去支出得到净现金流。 - 资产余额更新:正余额按投资回报增长,负余额按赤字利率复利增长。 - 现金流明细:将总支出拆分为生活、住房、教育、税、事件等分项。 - 修改指南 - 若需调整模拟参数,可在运行时传入配置字典或通过环境变量映射到配置字典,再传递给 FinancialSimulator。 ```mermaid 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(["结束:返回完整时间线"]) ``` 图示来源 - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) 章节来源 - [.env.example](file://.env.example#L19-L23) - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) ### 视频渲染配置(remotion.config.ts) - 配置项说明 - 图像格式:设置为 jpeg,影响帧导出质量与体积。 - 输出覆盖:开启覆盖输出,避免重复渲染导致的冲突。 - 影响范围 - 该配置仅对 Node.js API 生效;当使用 Node.js API 时,配置文件不生效,需直接向 API 传入选项。 - 修改建议 - 如需 PNG 或 WebP,可调整图像格式;如需保留中间产物,关闭覆盖输出。 章节来源 - [remotion.config.ts](file://remotion.config.ts#L1-L12) ### 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 的兼容性。 章节来源 - [tsconfig.json](file://tsconfig.json#L1-L18) ### 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(可选):测试与覆盖率。 - 安装建议 - 先安装核心依赖,再根据需要安装可选组件,避免不必要的依赖污染。 章节来源 - [requirements.txt](file://requirements.txt#L1-L34) ### 渲染数据契约(frontend/src/render-props-types.ts) - 作用 - 定义 render_props.json 的 TypeScript 接口与 Zod 校验,确保前后端数据一致。 - 关键结构 - YearlySnapshot、CashFlowData:年度快照与现金流数据。 - AssetDepletionChartData、CashFlowChartData:图表数据结构。 - ScriptSegment:脚本段落,包含类型与可选的图表同步信息。 - AssetCollection:B-Roll 与视频片段等资源集合。 - RenderProps:顶层渲染契约。 - 使用建议 - 保持前端类型与后端生成的数据结构一致;使用校验函数在运行时验证数据完整性。 章节来源 - [frontend/src/render-props-types.ts](file://frontend/src/render-props-types.ts#L1-L251) ### 前端类型基础(src/types.ts) - 作用 - 定义前端图表组件的基础类型(如 YearlySnapshot、LifePlanChartProps),与渲染契约互补。 - 使用建议 - 在组件中使用这些类型,确保数据消费侧的类型安全。 章节来源 - [frontend/src/types.ts](file://src\types.ts#L1-L30) ## 依赖关系分析 - 配置与模块耦合 - 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(类型与校验)。 ```mermaid 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](file://.env.example#L1-L23) - [main.py](file://main.py#L1-L305) - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) - [backend/media_fetcher.py](file://backend/media_fetcher.py#L1-L72) - [frontend/src/render-props-types.ts](file://frontend/src/render-props-types.ts#L1-L251) - [remotion.config.ts](file://remotion.config.ts#L1-L12) - [tsconfig.json](file://tsconfig.json#L1-L18) - [requirements.txt](file://requirements.txt#L1-L34) ## 性能考虑 - 环境变量加载 - 使用 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 返回状态;关注翻译与下载流程的实现进度。 章节来源 - [PROJECT_README.md](file://PROJECT_README.md#L217-L233) ## 结论 本项目的配置管理遵循“配置与代码分离”的原则:密钥与参数集中于 .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 - 修改方式:按需安装可选组件,避免无关依赖 章节来源 - [.env.example](file://.env.example#L1-L23) - [backend/data_builder.py](file://backend/data_builder.py#L1-L200) - [remotion.config.ts](file://remotion.config.ts#L1-L12) - [tsconfig.json](file://tsconfig.json#L1-L18) - [requirements.txt](file://requirements.txt#L1-L34) - [PROJECT_README.md](file://PROJECT_README.md#L97-L111)