{"knowledge_relations":[{"id":1,"source_id":"46b801f4-309d-4fdf-8069-ce2a858d6af6","target_id":"3503d322-12bf-4a2a-a06b-6956aa47700b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 46b801f4-309d-4fdf-8069-ce2a858d6af6 -\u003e 3503d322-12bf-4a2a-a06b-6956aa47700b","gmt_create":"2026-01-14T13:59:16.7675214+08:00","gmt_modified":"2026-01-14T13:59:16.7675214+08:00"},{"id":2,"source_id":"46b801f4-309d-4fdf-8069-ce2a858d6af6","target_id":"a7da7e1e-fba6-4612-9469-6b882a86acf0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 46b801f4-309d-4fdf-8069-ce2a858d6af6 -\u003e a7da7e1e-fba6-4612-9469-6b882a86acf0","gmt_create":"2026-01-14T13:59:16.7680891+08:00","gmt_modified":"2026-01-14T13:59:16.7680891+08:00"},{"id":3,"source_id":"46b801f4-309d-4fdf-8069-ce2a858d6af6","target_id":"ee54e1b2-9849-4ca0-9156-63c217c33f12","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 46b801f4-309d-4fdf-8069-ce2a858d6af6 -\u003e ee54e1b2-9849-4ca0-9156-63c217c33f12","gmt_create":"2026-01-14T13:59:16.7680891+08:00","gmt_modified":"2026-01-14T13:59:16.7680891+08:00"},{"id":4,"source_id":"46b801f4-309d-4fdf-8069-ce2a858d6af6","target_id":"51b08b3e-9ac0-4041-8f9b-96ac121b7cd2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 46b801f4-309d-4fdf-8069-ce2a858d6af6 -\u003e 51b08b3e-9ac0-4041-8f9b-96ac121b7cd2","gmt_create":"2026-01-14T13:59:16.7686121+08:00","gmt_modified":"2026-01-14T13:59:16.7686121+08:00"},{"id":5,"source_id":"95e101fe-02f3-4509-9857-eea13e6dfbfe","target_id":"70469ec8-ba26-4bc1-a8fc-fe425ba69fa6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 95e101fe-02f3-4509-9857-eea13e6dfbfe -\u003e 70469ec8-ba26-4bc1-a8fc-fe425ba69fa6","gmt_create":"2026-01-14T13:59:16.7686121+08:00","gmt_modified":"2026-01-14T13:59:16.7686121+08:00"},{"id":6,"source_id":"95e101fe-02f3-4509-9857-eea13e6dfbfe","target_id":"c4e63dde-4c30-4970-9dcf-f3312c2cd099","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 95e101fe-02f3-4509-9857-eea13e6dfbfe -\u003e c4e63dde-4c30-4970-9dcf-f3312c2cd099","gmt_create":"2026-01-14T13:59:16.7691309+08:00","gmt_modified":"2026-01-14T13:59:16.7691309+08:00"},{"id":7,"source_id":"95e101fe-02f3-4509-9857-eea13e6dfbfe","target_id":"4fb911fa-b070-4817-9e5b-c10e19e10e01","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 95e101fe-02f3-4509-9857-eea13e6dfbfe -\u003e 4fb911fa-b070-4817-9e5b-c10e19e10e01","gmt_create":"2026-01-14T13:59:16.7691309+08:00","gmt_modified":"2026-01-14T13:59:16.7691309+08:00"},{"id":8,"source_id":"95e101fe-02f3-4509-9857-eea13e6dfbfe","target_id":"b8f1357d-c635-475f-ade6-d658a8d35681","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 95e101fe-02f3-4509-9857-eea13e6dfbfe -\u003e b8f1357d-c635-475f-ade6-d658a8d35681","gmt_create":"2026-01-14T13:59:16.7691309+08:00","gmt_modified":"2026-01-14T13:59:16.7691309+08:00"},{"id":9,"source_id":"95e101fe-02f3-4509-9857-eea13e6dfbfe","target_id":"b7607fa9-dc73-44cf-8e2e-3ed5f207057d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 95e101fe-02f3-4509-9857-eea13e6dfbfe -\u003e b7607fa9-dc73-44cf-8e2e-3ed5f207057d","gmt_create":"2026-01-14T13:59:16.7691309+08:00","gmt_modified":"2026-01-14T13:59:16.7691309+08:00"},{"id":10,"source_id":"ac528719-8a01-4335-92b1-05f556f6179d","target_id":"f569ba72-be2c-4175-84ff-f418bff53572","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ac528719-8a01-4335-92b1-05f556f6179d -\u003e f569ba72-be2c-4175-84ff-f418bff53572","gmt_create":"2026-01-14T13:59:16.7696491+08:00","gmt_modified":"2026-01-14T13:59:16.7696491+08:00"},{"id":11,"source_id":"ac528719-8a01-4335-92b1-05f556f6179d","target_id":"746ec961-7070-4dc7-8307-33802395d460","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ac528719-8a01-4335-92b1-05f556f6179d -\u003e 746ec961-7070-4dc7-8307-33802395d460","gmt_create":"2026-01-14T13:59:16.7696491+08:00","gmt_modified":"2026-01-14T13:59:16.7696491+08:00"},{"id":12,"source_id":"ac528719-8a01-4335-92b1-05f556f6179d","target_id":"6fb127c7-17df-470b-9c81-0a1e0962d1dd","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ac528719-8a01-4335-92b1-05f556f6179d -\u003e 6fb127c7-17df-470b-9c81-0a1e0962d1dd","gmt_create":"2026-01-14T13:59:16.7696491+08:00","gmt_modified":"2026-01-14T13:59:16.7696491+08:00"},{"id":13,"source_id":"ac528719-8a01-4335-92b1-05f556f6179d","target_id":"2e505aae-b61a-454f-8bbd-22e574273933","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ac528719-8a01-4335-92b1-05f556f6179d -\u003e 2e505aae-b61a-454f-8bbd-22e574273933","gmt_create":"2026-01-14T13:59:16.7701693+08:00","gmt_modified":"2026-01-14T13:59:16.7701693+08:00"},{"id":14,"source_id":"3503d322-12bf-4a2a-a06b-6956aa47700b","target_id":"b5cbbc42-9bb4-4f54-b3e9-19b8cf9ecdbb","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3503d322-12bf-4a2a-a06b-6956aa47700b -\u003e b5cbbc42-9bb4-4f54-b3e9-19b8cf9ecdbb","gmt_create":"2026-01-14T13:59:16.7701693+08:00","gmt_modified":"2026-01-14T13:59:16.7701693+08:00"},{"id":15,"source_id":"3503d322-12bf-4a2a-a06b-6956aa47700b","target_id":"04e01b72-4d25-43c7-8128-751ee25d4792","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3503d322-12bf-4a2a-a06b-6956aa47700b -\u003e 04e01b72-4d25-43c7-8128-751ee25d4792","gmt_create":"2026-01-14T13:59:16.7707089+08:00","gmt_modified":"2026-01-14T13:59:16.7707089+08:00"},{"id":16,"source_id":"51b08b3e-9ac0-4041-8f9b-96ac121b7cd2","target_id":"8bc851cf-b45c-469d-bb91-924dc2744d4a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 51b08b3e-9ac0-4041-8f9b-96ac121b7cd2 -\u003e 8bc851cf-b45c-469d-bb91-924dc2744d4a","gmt_create":"2026-01-14T13:59:16.7718135+08:00","gmt_modified":"2026-01-14T13:59:16.7718135+08:00"},{"id":17,"source_id":"51b08b3e-9ac0-4041-8f9b-96ac121b7cd2","target_id":"34214d3c-6158-48bc-bd12-d799b73f6f95","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 51b08b3e-9ac0-4041-8f9b-96ac121b7cd2 -\u003e 34214d3c-6158-48bc-bd12-d799b73f6f95","gmt_create":"2026-01-14T13:59:16.7718135+08:00","gmt_modified":"2026-01-14T13:59:16.7718135+08:00"},{"id":18,"source_id":"51b08b3e-9ac0-4041-8f9b-96ac121b7cd2","target_id":"657bbb24-1acd-43f2-acdd-e6d2b4d98523","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 51b08b3e-9ac0-4041-8f9b-96ac121b7cd2 -\u003e 657bbb24-1acd-43f2-acdd-e6d2b4d98523","gmt_create":"2026-01-14T13:59:16.7718135+08:00","gmt_modified":"2026-01-14T13:59:16.7718135+08:00"}],"wiki_catalogs":[{"id":"019ac0c8-0912-49e6-80d5-80d5c957b08d","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"项目概述","description":"project-overview","prompt":"创建关于AI-video-lifeplan-demo项目的全面内容,重点介绍其作为将静态财务规划PDF和访谈视频自动转换为动态解说视频的核心功能。解释其混合式Python/Node.js架构,前后端通过render_props.json进行数据契约通信的设计理念。阐述系统如何结合AI生成日语脚本、财务数据可视化图表、B-Roll素材集成和视频片段同步来生成个性化的3-5分钟人生规划视频。为初学者提供高层次的流程概览,同时为高级开发者深入解析系统组件间的协作关系、技术选型理由(如Remotion用于视频渲染、Gemini用于AI处理)以及整体数据流从输入到输出的完整路径。","progress_status":"completed","dependent_files":"PROJECT_README.md","gmt_create":"2026-01-14T13:46:28.8363003+08:00","gmt_modified":"2026-01-14T13:48:15.6870088+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wV6bZZekrt/gvaWPw1udrgByvBm9Bx+t23ZSnQpRrJ4gxW0eRaRG+63rWmLNe8aCBpsggHzFYJfL48NtJ9qOaPFv6oRrFceYvefiMCci5bALHp9/mVwmeQGlJkUQsbRuLyFX8+wb6lkXSW423wDaGMSY+M8TWx7Lroy7KfNXJ2jyToOM+i0Cp+bncTqME5IykNoqw6Qe6HPvv7D1zL3milpRJPYWWksNfP68pMgqf6NkAqarh2+FW80A74dRNc6EchzM8ZSJQyDEVlUtbGBJj2TQlZh0Tze7GTTwiGucN4chVZP7P7geFmaNsxxEwB7v3mNUGwe1HelS4eILIPT/aPxX50AW0DgPEfLKlEm0MBEt69R5sdLdwlMtuj1VKruVmPGb4g51Ag6GsH3x8TgL5iHywQDeJyKG5frGHHmSYoXvkpKBi2wRhKy3HEqwyZ3BaIk+1IkYhNelPoEtYl0EfrZvy6K9nO3nRYtK0hegyt16ZJFo8m0OplT6rWG46fn8IkeukY4V92CORSaHraIHpIvGBcrWuawmr3qA0wysOADGiKK5Y1YI3RcWPIASffA7EGlV01YDoUdKjdasNXrV6gtkNNVKNywK+yscsf+f25FWgvby8Pr5i1nEcWBFfls5P67YHSgzdaRjbEKwSwQtWNbDl5lC1U6Ay5CPiKOu9adQ2OZPh/kQzLyy76WmGrFxb/Dj4DI7IGpvPd+vvnD6BV9WdbQX1lX6KPeZrN2cD8jXpeoIVYtGWSD3OybbB0u1yuleO1JYCy25VpFYCtHULr/pKWZSGrgmySDcQ3nKfhsnSwQPcXD0/fzZUfkXKh3uMWbrIoGGQRb4khvNMHdCeALY/u3fPy1QB++aKpjfZCVPKdU8NeLfbAMX6s3VwzSz3RRFtvXv/9v5Accg6AIGFF65oju5QGEOkbb+dvu1CXTJCHxWML1LTo2t/IG4GfZPkpHHo8zOHc7jsZPPbcbz/csEwQlk3QvBY554c/fXr9Zl8NwTGjq0PkrIqqZNVwWwUlZOhcKnZo2Mvp+Wn/nINb9gb0grxJ1j4GZ4842WOPxEvcs5eBuCPQztRolU0VRDImyosGju8KySTybELyL84GbbvblzMqSV4S1sN1jnMJH0B/Rd8SbkVofI+KJS9NSxhnUa2VfqqnNVipXBcmGAHYH0="},{"id":"56f8c573-425a-492c-aac3-286e8db478fd","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"资产消耗图表 (LifePlanChart)","description":"lifeplan-chart","prompt":"创建关于LifePlanChart组件的详细文档,重点介绍其作为资产消耗趋势可视化图表的实现。解释该组件如何使用Recharts的AreaChart展示用户生命周期内的资产余额变化,并结合Remotion的useCurrentFrame实现动画数据流。详细说明CustomXAxisTick如何渲染包含年份、客户年龄和配偶年龄的三行X轴标签,以及渐变填充逻辑(蓝色代表正资产,红色代表负资产)的实现机制。描述HUD区域如何实时显示当前帧对应的年份、资产余额、收入与支出,并解释数据插值算法(interpolate)如何实现平滑的逐帧动画效果。提供该组件与render_props.json数据结构的映射关系示例,说明YearlySnapshot类型如何驱动图表渲染。为初学者提供组件使用示例,为高级开发者提供性能优化建议(如React.memo、useMemo的使用)和自定义动画曲线的方法。","parent_id":"3277c20e-4746-4309-b936-43eb912efcb7","progress_status":"completed","dependent_files":"src/LifePlanChart.tsx","gmt_create":"2026-01-14T13:46:53.4490096+08:00","gmt_modified":"2026-01-14T13:52:24.5567208+08:00","raw_data":"WikiEncrypted:Ut51DFq4hphr7/Rxh4OypljV7hLNfiF0gIuuihp+Zfniz/P1rKsnc2ivzjy+WyBYU4u2uu+zR0uizg1RIUSuMOrzoXxyBccEhS4Dc3wSgHQJBtddCMohzECd651MYxFgWQVjhR7ojUrIpQP1vZ9LWYnniJlNkZg/sOVzs7tqyC38oDtdexZB4fDAJNSaf6Od0aM+WrCL1ta5E9BJIXRdSblNb1MrEU96Lt+B9mJ+SmJIBjLSkIukwdtuW+IlrFeUsfrFvgOeHBqWVkwoauww/DayM2cTH/sqC/Wo8UMLYkBU1IVHoqpgp6O8/iSF3kFmrqY6OAaJVwhy9jyvTjs452g9mwN4HjTSNqR9LBzuf8k3v6w+Y9a/4oBozXI5l1bsL49fXAyFHBaEUEUlKoaDC/EnE6DXyBjnHjsclD88mKvhDH3K0enObtxRCDb/1ko9mOmYNeDRmXioCSoJTmPr/bNCe04xSPWmAyIgIbgSaqSSg89ICGlrZEwShJph1KSqiaAjm0p4ZXoo4pl6qKkxhhek5B4JRkYdUBer/3ohXptXARwl1HobBba2sIdln14d12ioiD+4XfWBugMEcUkBed94pUcaky4qPp9tlRdHZPBwdUwrIuwXR2kvAVZB7737PNtLptRAg/U9QE/PMt+qCIixKstLHazKggzb+VwvcrtWuIVtSc3Qmp8LwZh5PMI92X29gKTc3nnJgN14yFdEVWATJS6fbL6kR154wJdtYCuFGhAPMFNFCVaXWMnGRjUxP+jQqREYLGQPVQEZpKKiit0FI3yIDL2Bw9NKoxLe1K8c36z5k/9CqQ13wX5cypWlbjGZuX0vhkdi71BZXuAijNzZKJAk+un7/3FQV+xBgzAAUsNtnBf19LS7bZJiTAE9MEEgdLGBDLr3OmHslKAvenrh7ZaVU/1NcOzTCN31JWoxUGuiS3RDjZLKtvNmcrimFfDRLX8mwmcL/eGmQ825nZzHV/jqDZUkY9CSgXDQgsqP+1cJ4zpJ/+NM/C2YDKs6k1PvtOLTA6D4NuGhljPAdtD+7u/dqILFyMMdtIDAh1UAw46sIftvTDB7aYMz/zQdC3dn2YgZX+yVo0A22wKPi2P5HJyw2G6izQKGJcHzNNs2d3OZkPDsvuiVwlmEBvZhT0v06z725eRh6kxC2szImWnLH1XpEVire1+WpxXUdflDC5OtNs3kQJv4aIRXD8pZcubDdR83677cSnfCL+Q/zN3TO24Wxxv6E/Gj+hIXbRHrCYJlQcqF4Z7X10HahzoNhhktz7Z2TPSfG/V2I2Hn1ox4yPNYz/sGq8U0easgS5tbRhOOLVSeoBOlLB3JGFENuILj30GkpX4X2qyH7JDQdTpHDOgDD1UUIZnEglxPjf8UWrAJZQs0/gcOk8qMpQxMoPfONNUhDEbwiuVIl3ux+8pKiXQli8t42uPhbOOMbVEEAc/2Su7Oe54+Lisffy/4DVFtSTnBWGq5jc+b4AFRwRtmmxipomN1pUSHJVN2BSmInnvwD/v3WEIHfV5NCsL/nvin8kEzcBJlKrjsP/00uxDSGeyeI0D7iY9urOi7lLu8JbXMklv7qQGZ1qYkjlLX","layer_level":1},{"id":"9f93b8be-210d-4bfd-9b6b-9823a477568c","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"数据处理","description":"data-processing","prompt":"创建关于数据处理子系统的详细文档,重点描述PDF和视频数据的提取流程。解释extractor.py模块如何使用Google Gemini API解析财务规划PDF报告,提取客户基本信息、资产状况、收支数据等关键字段,并结合main.py中的extract_pdf和extract_video方法说明数据提取在整体管道中的协调机制。为初学者提供数据提取流程图,展示从原始文件到结构化数据的转换过程;为高级开发者分析Gemini API提示工程策略、错误处理机制和数据验证模式。包含实际代码示例,展示如何扩展支持新的PDF模板或处理不同格式的访谈视频文件。","parent_id":"563baa06-b18f-4c4f-92e9-78c9620a10da","progress_status":"completed","dependent_files":"backend/extractor.py,main.py","gmt_create":"2026-01-14T13:46:54.6970171+08:00","gmt_modified":"2026-01-14T13:52:03.6954253+08:00","raw_data":"WikiEncrypted:YZI97ep9QXDPfRNDXs4+JLXXMdCwOi/ahqqUZ1y/iQK0CF9ult5k4OZ2gL9Y0E2zAfnzoyMSJtoNE4qD4UYmVW8Fx+WuR1//jUSc6qMzd9lucykAr2AGt6pV5uiLi2osNPH/baFuu6SnR7+W8q8ffVaaoaOOR3okLqxwaMmUL2tW7BKoCmvtJ7tV2s4mY6h5ktT6ux7Aux7gI/v8AGyKjIbhBfVyrjMXD4jzUZSgqSJE4qdkeqKNtSAaX3vZeTNvjptFSrM1wPjW8PgRkDgFzti3RGzLph2+XGuBgWD0vmBmHU1nsVyniagCirBN0egMajbM8V81CwEY09WWK1S8qElKPPkkax89naQxQs3GJHZ0bM3RjEEuajg/a/1r1tUoWMrxdclFWxXsv3oEA+eAvPWmNB2NKPAq1CfcGHEhQIOSwXynVMIitmU5sKZcVv5h8s3LKNwMFpmalnZZ/REXWCDlmOa7tEm610H1wTs3abfBBgUKWmwOC5lssk/8XkfvDSC8s5RS6Xh2xBcn7VsKNDpTO0/XbNbRyteXwmRuyMQemJoRPPUJqBwxyl0uTYSXQsDTG4k6ldb6KHQ0+fBJ94nu0cFYqbc2boeun2yCVGR7wu2GkK+7NCz9ic7fJIn4J0Lqh8pONl6tK2lgSEw5gDHp/AT0kcmbWyFybdO584XPAm+kHvpMMF99HuT8l8cXGCVJGSs6U/WKe4G6OYnuUB1qWBleVZmfm1NGPNnAzT7JtMKo3wtLlRNvVgGfLbEspU8cW74WRPFBpx/6FXS9MPPn98pxxj0Ypo1HRGW8vjDFnS114Yv1T5C8eoaPUS0RPJknhpQq4YZfje7Slh/gUxIo73FDyFfT3XvzoJVrKkCtFN+2ZYiypGJ0Z2ZeHocbV9qj5F6DBj2u5LwmmAxxdSDDXZRk/uN37x99PL97r5ffEotM4rELhSb6xabQ/478cWsIRSHYmOCnbTH+hDtdWKz2pW+OyOeWZ3og4HA1ZVYb0a5ry6DeUDK70iR1GU2wNdm3FtXcVQ4izE66OjYR/cXUbohi5RiYe/cK9rA7t36g1j7xQbUbgG3LHcX9+Giqr2brJqwb9t0y/d4rllPUEP2bLLH23+54kqG7L7s/hZRAFLBc//klhYc58zwqgX+rmxB4eU4hOHVBs/YJbeckGgTHbPenshNl+qDBy9b3Pg/khnNN+qLktwMUyOJT0+qfAAMW/ciw8zUsNf6GsG3ltywGVsRkhm+PaAeU9D+N+TsqGCtAg+Dq4wq5Ks/poM+PofONeoU9rTR+Gj5J4I2Ctw==","layer_level":1},{"id":"0a34027c-ec60-4e21-8d52-ed31a7d97a25","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"数据提取","description":"data-extraction","prompt":"创建关于数据提取模块的详细文档,重点阐述PDF报告和访谈视频的数据提取机制。解释extractor.py中如何使用PyPDF2或其他库解析财务规划PDF并结构化关键信息(如客户姓名、资产状况、现金流数据)。说明视频元数据提取流程,包括如何利用FFmpeg获取视频时长、格式等信息。结合代码示例展示数据提取后的内部表示形式。为初学者提供流程图说明从原始文件到结构化数据的转换过程,为开发者提供接口调用方式、错误处理机制和扩展自定义解析器的方法。说明该模块与后续脚本生成和数据构建模块的数据契约关系,并指出常见问题如PDF格式不兼容或加密文件的处理方案。","parent_id":"f88446ca-8b48-4cbb-9145-8a4d91240442","progress_status":"completed","dependent_files":"backend/extractor.py","gmt_create":"2026-01-14T13:46:55.0550543+08:00","gmt_modified":"2026-01-14T13:52:22.076666+08:00","raw_data":"WikiEncrypted:tJ25FWc3qLS7BXDXgna8sAQ0vwkSLJ/qzFPW0ymNZIO+YypN+lEb69KdjY6gPbUzFY36iEjkYC5VsBUUMlRfZPC2qf4TDCjjlL0nS0qmsicJRgFzJ75X5/x1BURUjziYQmzbn+Z1b3f3bBgOaTti7nuUXQdXFt1b27xBvoyVNzRyZZ5T5BeP8dnQtNtIzuE5oZ34cVEmQ+uPiRytwxeA1FoC/5vwKwnvWD1K09gNJ8Ygfc4Qipj+Cpjt/6kHC2D3PL7DsxlN8BFFikgFXOokrHtD/spf6GgPVYcZUbVwEYJ/WMLazKqWWCLz7UOKNIJZS4pNebXPbC1MhE8D/52yrpdaq3R42D+hQJsL75lKXv6VviQBf7y7JN+gyBLVy8vm1IRjE1np9mzCbMr9y16xzu6Ck9qQVVngKdtMoG7FVLsmUHBYEGsTnZcSx/qMeZi1KwpDbEnuhSEFlqt5RnuEbiYHwBEL0nQ3LNWHNQjLjZgJwi9h/Yd/MsbjHeZ8RhYr2O5P1w02W4X0YK9ZBC8pxcutH3h57+4UryjiytdzQ0qUJRMvH7Aej0KZooFk4XcDsUzWQD3OHwX97toKXIVvRz4c0MoI7z2XGetmtNhwuA/jRf8+YfdKP+bydtRo1v1VQjkSXB0X9VzYL2EmnhBIjOEdwsRdu769qznNWzTYPa/dYJ8B1Z1MLQ+usDv678MBCblnaKI014MzhfD5bB0+vU+L1esN0zQy5EcKG5zYNTBVjyP5zcAeA1a7M3zfUav8oZh4qH/nVl+2EgS+GChVrMR3+vMXbFqBb3HPvOIYoQxP/8+erwRKZ/Sn+anmK4efUo4evDNfmzoxAnH6lWg190xEUlL2lifHWoBjo0FnfZcdUn0aYmPMacHQR1de2aJmCEBFwqM2JlEeUWEeooiVmROyFRK1XLuQVIsKw/1y2tzu2Ygkx88uaGrHDq3XLdzVlHGsD+NTUwyYOQKcz8IDYB7G1FGmb1Gsy2gWZE5oDc0giNcqO7xMdtMtbiuYw4VG7SMJE7RNDAddq4jsybxJ9jcifXHKN3N0kZykylIkUhmo795X8PwLGOxNFbU5a66HHOPUxHMu+C5u0nIEVcI4AaI8KWMXKnKE0ORJ+0q3N2A2KBwiPxGzTFLhpWwnAaL3/C/u5DcgL3HmQCw9hiBuFQ1UtPmAU2qNRLw1vI4GNuaB8qKERR85axlV8Sr/6HNeVS1Y+/99FlD9qeih90dmuNBEUPCkQOwSt7b94wJwsja7ouKI+znp5ml4/xMAhEH723qL1hxFomJperioanqG0148j3I8lUKCOQ7+hgiU7zfzzndGsp6j4QBuA9UwpKUQhhvuAuiCLCs8Hkw/4RXGTKzE0pS5UL84QliTB/XwZIykFQEUFTq2TuxLFLKbksTi","layer_level":1},{"id":"c94015a8-5e41-415d-a1da-92f5bd313718","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"PDF数据提取","description":"pdf-data-extraction","prompt":"创建关于PDF数据提取功能的详细文档,重点描述如何使用Google Gemini API从日语财务规划PDF报告中提取结构化数据。解释PDFExtractor类的设计与实现机制,包括其通过GEMINI_API_KEY进行身份验证、调用Gemini Pro模型解析PDF并提取客户基本信息、财务数据、人生事件和保险信息的完整流程。结合main.py中的extract_pdf方法,说明该功能在整体管道中的调用时机与数据流转方式。为初学者提供清晰的流程图,展示从PDF文件上传到结构化JSON输出的全过程;为高级开发者深入分析提示工程策略、错误处理机制(如API密钥缺失)、数据验证模式以及扩展支持新PDF模板的方法。包含实际代码示例,演示如何自定义提取字段或调整LLM提示词以适应不同格式的报告。","parent_id":"9f93b8be-210d-4bfd-9b6b-9823a477568c","progress_status":"completed","dependent_files":"backend/extractor.py,main.py","gmt_create":"2026-01-14T13:47:11.7467873+08:00","gmt_modified":"2026-01-14T13:57:19.18201+08:00","raw_data":"WikiEncrypted:fPGEW+2eX64DkSaLiOBt9BWfdEurpqYnqk9H82aw8JtKB//KFIQhS7t9i0OLAeTMLm0y7TONBaR+BvOOf4f2Ca3tw4+0bC9/Jiw5WPb4AmmTYO45HBV5gerAhbliUukysWeF6V4MkhyWoxkI3sid1Ne1bQgXq75NBJMZvJlsCZQWk3DUzrMlLgWsk9pImEGaOej4ofHlqxhjqIjjfiQ/6di9k5suB9nku64YZ4p9CuwTrbWTtORwlHFgWNee8yoUXYwKVgH1WfEQxRWBQ5XjoHerjHg3OPOaMt82SjbeJ6uI2o6tfkbHZSt4mrhIFe5BCd16dqSqHiM9FYLbDsGA9jXU0kcScLs1l/Fu5AptXfs7fXSG3MtlHZCJJzHiocmdtyM2M9GwAKYuWebPd6xSufBr0obwkI98FTVWTUVXUsdLz09fukMpfBjxqZL/7UOxcwSr6y9+0FUxHOSbKTzdtfAgEdSnGGDGgy88IJGF+2FqA6dhbmeqIE5dMwE58ZelubwWWY2H0miG7OTEdI+dxBoONdb5VKXMv5kuOUmepv4eKJhLjcj3dMnd5+vUONP7F78MSNny0zdSeIgAkzyaEQ3X3l03qqmsPAO0rBtUtoKh+mRcxtdCe0W1l7p3ad39WAS/t3wqimVCYU6RujeEhKFAIU9eDZYdIm6WbhL+0V1FJU8590c50dQXl3j0PxEC1lrLdy70+4z24uRE8yo9U/oqZa57rGMoeO5RBXhJHPsMeg8qyApGT+CbZZH908uMaXjUAwW6a9upLdARO+veCgLvEv5bxjczNu+fCfcRXLxYCBJqO3P1SVa1HaJrgTGd/pIMMPFyFuAbho1LUCrIqlmILkVNdIR5I14MMHw/DKWDnmrXAn6o1GRuVYm9YvbTqWQpZxX1vbH4I0/E8fnGQbA7AtYkuXT/N7h4u7HXgQrFvpaXCmPTaO1Pg7tv5HKXpO0lXtK5Utf9JPZclZ38ldILBIDK5gmB0t9OXp6PGHf5cwYLKMry+kyuS768qSyfEBrz5/j+8qvqFIMy8D4eY4K55hS8xWgmWqKIa3XkCGrmYgNN9LfPjwT5S1It7Ia/ZisJcTzEF1wP0PbkE9i/QBIMYgMGEHkBYLum3GAX4aHyTrnLBMI1l4LU2x/gB4/UsO9AY/NXl8IEHyqEGa+OaWe8DxKqxqbkYRFakbUls+niuYqWj9ArlDMS8ntkzHhNU4NHUX69WH1a5wN91EvtpeDhEiNAB3NuGwDFYEkyW7S3F6MsVCMwqPmzph/qMaB6xHX2tMv/woo+AYh8gMrGmRxyP14OSxW5nL9EKDbRPpeUyHZfN2sFfuGcbN8+FVJ+rmfl+ntaO7TW1cOX7Xol5HPC70c0loT/Xo8tU3Zm67azwqBHz9iKsHyws+2Dr2x0ZDBxQNiABfjV7MGyGbO8rODiUHZzWK9Yy0XmFayUKNYaMvG3ulIc8koPXcRaXxi/x23le9nOMLrnK+gZ9Hs9Cf9XEpdpgjn74848M2J3xiy9hIZo+KMM30s0C3AU4hAP","layer_level":2},{"id":"992c8cb9-2047-4059-b273-61d257ba0383","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"数据契约","description":"data-contract","prompt":"创建关于视频渲染系统数据契约的详细文档,重点描述render-props-types.ts中定义的RenderProps接口及其Zod验证模式。详细说明YearlySnapshot、CashFlowData、ScriptSegment和AssetCollection等核心数据类型如何构成前后端通信的数据模型。解释Zod模式如何确保render_props.json在运行时的类型安全,并提供validateRenderProps和isRenderProps辅助函数的实际使用示例。结合backend/data_builder.py的输出结构,展示数据契约的同步维护方法。为初学者提供类型映射示意图;为高级开发者分析模式组合策略、验证性能优化和错误处理机制。包含实际代码示例,展示如何扩展数据模型以支持新功能。","parent_id":"cee466df-e148-465f-b3b0-e7dc457aa2da","progress_status":"completed","dependent_files":"frontend/src/render-props-types.ts","gmt_create":"2026-01-14T13:47:15.5369999+08:00","gmt_modified":"2026-01-14T13:58:08.4602508+08:00","raw_data":"WikiEncrypted:/j3nBh2eZGsOhaH4GyKbokiR7itiM2xo7ApFX13bldMtBgXAQJEOqh0Gg4b8kQcMTeoYNe9Vl/DNKUz5I/xC7BkhK8uAHW21XVuGqY1Wx7IZafpnte7m0VyR8+9um4AYvtOfONWi9rXnbEcZDdgsUp6jKE8TRl3gmZKWXkeQqMVRpHxg1yeYe15rb424irpq8d+RWQ6BMWlVzRVIDi0QbVU731hGhKkvv+qmrT3qOBfDmgN+pqci+ywoA3xpJLNKQ1sTjs4oQ84YMS1AMhCujoGk2j36G54SOEL9AUi2oDmY3LH+W6aalMpBJqL+YlujiNRXAWd2lYZ45AGtXFODVtUWJkbhS6+aOaCPYM5fP0uWvxYstnmLfZ7w5hynEsolbBDy1o64kNN8fHWI0nkQ5OhP5NyHq5ZRXStLfv65BjTTrIe43+DtLW9UX4MOqGY0ELcEydLGt9mC2pN/zspI1YcWO2yCMma4Lg3ixBRshqiCbEPzYEkP6b7D6QlG1S1qOk2XK9LesRbTG+OwnQX3nzhCr7Yz1YtIPDrvlBvqoFPreIPRnCEasi0DFpQesxi43qdrHGzNExFX03KXFj+Dn4dmMXirHS1NJF90zHLtc/F1RIRdhJ9C4YgdVTYGKm5ZQ7BW6J8gcgdAagUVlbh0dySGerKzc9Ycv7N9zag1GX92B5HFllRQUKa/M++RW8xzqkU4cnCTp3Vu9refJHoPTVCm+bFYeNNf+NDARjyLtZf1Tz9xTAaAyYU1no1AQjYNysCNlV7M1VXFdrgNCDFrracaIcYv72lCLh8U+ai8jD7xkdGMfr+Arb/hrRPHDg2W53E0PapYG3XAIkx51cFMK+LboUXJW+NBsQn94fXK8pE+mHPRGJL4Lq56F8oPOS7GsN/2bmMn8nAMRVsE7RFo1w77iJsrlzddSOPUtMBbQF3FbT9TOKEPrso/hnt4mZXkjs/piO57l2Q+65lirXKKzJCw4gm+zMN05+Gg6t1o3LceFeHxP7vVkwNuqz8PMBbhnLnp59bs5ZB1tt9a36xLQ+dNK66eouHYOfSk6ExUgbRdEe7/UQE7MBH877uSempEnORWj8MSXCms4jVJFDpiuaPMl8XF0oLMDMd6tXmuYDZTA+idz9VvX5WAVk2S76ukwEshPfep2L3Jrh81+2AqEhXRd6vkxj7h4rEUYqePDtG9zJ42lOfayZgi/Xi1I7oFREjuOP/aMbrJiaWsSwrNWg8EQBdCyCS+bkL3vf/Eh3cS2HjQ8/Do9KV+plR62gAO+VLt3TDkoVpzu05Ej/YTYwF4a9LfKu0eoPlU6Cpg91ZZr4x9NY5ZAtUxiJoUs7hRFAOVvlZRplmQYQkKtU4IByQVOOnGlkCVipekNCv3iT82VAsvoc0pC5SxAuUtRfMwBggKZuZKpp/SfvGEVMO+PQ==","layer_level":2},{"id":"563baa06-b18f-4c4f-92e9-78c9620a10da","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"架构设计","description":"architecture-design","prompt":"创建关于系统架构的详细文档,重点描述Python后端与Remotion前端之间的管道-过滤器架构模式。详细说明后端作为‘导演’负责数据提取、AI推理和媒体处理,生成render_props.json数据契约,前端作为‘渲染引擎’消费该数据生成最终视频的双层架构设计。解释这种前后端分离架构的优势,包括关注点分离、技术栈独立演进和可测试性。结合代码示例(如main.py中的处理流程协调和render-props-types.ts中的数据契约定义),说明数据如何在组件间流动。为初学者提供架构图解,为经验丰富的开发者分析架构权衡、可扩展性考虑和潜在的性能瓶颈。","order":1,"progress_status":"completed","dependent_files":"PROJECT_README.md,main.py,frontend/src/render-props-types.ts","gmt_create":"2026-01-14T13:46:28.8363003+08:00","gmt_modified":"2026-01-14T13:48:39.3874771+08:00","raw_data":"WikiEncrypted:EPw1VhZSv2AMLpYzHbCG5QXmatSKh1iukhkKRz99kcVPFHJKZVqOFStJHt5slSqzsunLJoqpKyeDoj/jTKKfGR4Fjd/OA9RyXv6kAew+iOL1W5gMkXRYSDG2tfNzDYpnr8J7ciJ8e1ZbfIQBw37nzIUWin+tCPojtcs3O761iTn7nrWpEiqHCH9opfu0N883fBSk06xX9qTFa5fpFjYZ96SulQowLSMlnD6MOqGS3Q8OHZZLwMEvLP20BmbgWHu69nfrdEjDJaw2uk0WDCb1n54z81yBVmz0Xqgj4oEbSf8gaDDLdyGGMefIo4sfUrjYYA4Ym6o0up9uFH63I0UxByc8c0wx5jwWD+WEqdXxvp/kF6IWH+fVOIJmdVq68w8EhVrDTZMNKvyh4/J+fZSGrSJdH/z4pIrDplUFnAxXfh4TN67aKnrb37HJnKOfbHTMuth+84V+M70JpO0g3JXBp+5Yl8Ka3xEHjF8BVyAsFknivefmDGHVlCv/HlXaTAH/ukCnKQ/LIj4huZ+5kDuDxaRUHrymVLS1bW/HEy2oN6ZI2CCGAoJZg88fPjSubAGu49rGV+FJ7uQltwccBK1n/OmsMEP41HOfBEsp6EkIxW+EgaEjt0if0iG1l7xv1EXA6maCoyzg7uqcut69OqcNcPmqGoGbk7TdFgOGRE5oxo8pglhprrWnN4J3fblXqW1aEOWlsPLvlfqpbWOQpCye8Gx7s8xV0ttcPI1GywCHxfEmBYwaOMJs5SWTMLIXjucOFH8XeWxSXnfTgLP2p5ZiP2pJicn6i/wc3OpPoND/85f8Cw3uZwIuweEMZW9UUvDmbAbSfByfk84PjkU8wg2g08l72MRqw7qjcIfRlphR1Ed+BIX5Gofo4aeYwg0GANkf/ESM5Ps3Z2RsNfSCsJ49jmNM56f2AY92GQ3I4Zoycu1c8x7/tTMJ3oCsgJjb5Tf7R5TK1Wuofgx420UH+mgrSRhHJFWy+c2mnboEMcM1al6BKYc5y74kLhOqnPAhQcOoHn12ixuJrkBNRV/HwrE23Tl3tj1uQCk6pyrtBT5NZcIrymVTLLqQw/M4EzF5YJio3BvBTQ2y0bKqWEpanWPEu04EhFy8mZfKMG0Ty/rY06qVIZnwLjWhvjWC/T0hgfL62g1bZL5riqTdq27227x4UJKrdFZugTE7Yt8/HE3enAvv28rLw725TQbKA3Q6RcNnB0rKde9ZHzUuycXQNWJS6PL+3bk53xdKbMnxXeKdaFGdEt49F9GN8tlUX++P2UKYCcGUk/kfjrRrZG6R8aSEinbqOkaeDxyrFoGu989bt4q79rXm7Pv7kKEVllnWirJYtjcLo7E/pNCWiIaS9OUVEWcrkeTxCsbD+yjV2S6aARj0Zz3cQ/ONqSzyjOuFx8pY28d9L3VN1HkiUrv1G+GUrssP3uEvEFLYJLVKEJnm3c8="},{"id":"e8641f76-c37e-44d9-95bb-6ddbbfbf56d1","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"现金流图表 (CashFlowChart)","description":"cashflow-chart","prompt":"开发CashFlowChart组件的深度技术文档,重点阐述其作为复合图表(ComposedChart)在展示年度收支构成方面的设计与实现。详细解析该组件如何结合堆叠柱状图(Bar)与折线图(Line)来分别表示各项支出(生活、住房、教育、事件、税费)和总收入。说明sequential growth animation(顺序增长动画)的实现原理,即通过getMultiplier函数控制每个支出类别依次增长的视觉效果。解释在年内进度(yearProgress)期间,如何通过插值点(interpolatedPoint)实现收入红线的水平延伸动画。描述HUD区域如何计算并展示净现金流和总支出,以及Y轴域(yAxisDomain)如何基于完整时间线数据保持稳定以防止图表跳动。提供flattenedData结构如何将嵌套的expenses对象转换为Recharts可读的扁平字段的代码示例,并说明与CashFlowData类型定义的关系。为开发者提供修改配色方案、调整动画时序和集成新支出类别的指导。","parent_id":"3277c20e-4746-4309-b936-43eb912efcb7","order":1,"progress_status":"completed","dependent_files":"src/CashFlowChart.tsx","gmt_create":"2026-01-14T13:46:53.4490096+08:00","gmt_modified":"2026-01-14T13:53:35.4987338+08:00","raw_data":"WikiEncrypted:G9hRMsSEggCR69M90I3bWcV3ZX8vDP1hPO+DSZQxyRNSuFTzxbJ8loQ+e3m/ytE98Xgzfuj0ZAJwD9IF9GsxT+WsGR0Zz3Bn3aHziaL7pZUUrvTTmvOdLoUGUm4YEAuUEU4BgTzYzmmJjSvuQRArZrZtAuAV5e+R/b8kATLIJclXjPebpEj5FathPQhayKqKw08Qt1646onoWcGdd+8Omt7+CSwN7DUayXiSY6rDUCc5Xn5Vvm7rFnj+nngeUB+H0BH5WGBMuHcLvViDagxyt8tS3mOEBGBk8uBFcOYH8CsaXjkwVHaPrDnR8IdeoRkd9hJ66SOXU25wKoUOz2Y+I+jNrDhl3NQVB62mxeRGfW8JhxHngbOuMzlD3ALMS6au6ko134OmrUJPxY0lluMGH+Km7Nq0EhlaIcn4x36dvVwynhoJYVxfTHyQmBDN+M/POEe8p3VWITEE0ddvdZylEtoCG7YJi3zHu/QAlkWp6EBTs88x+TkPSgc1qllVQe4S3gmbdIvWKBvM3ryS3QWgnG/op7mW6WZmHfEEUrRMhbRE64aijm5zxw68cYN6ZSJ7y5OMKFwGq0mJnA9EGG5EYKtzFwKO7SYXPUEqlszmzn8+HNqUTlLS3uvg5Y/eNmi9ltYCO1mPdpdl7nvSirnH2nWUKjjQVyGPWXM8clhhinnE+347ijc4aKcBHndW6Be99uAtenMdvhKx9ord2I4iK12cyJNRk1Sr5Y8E9h/fCwKqzSNSgOPaWoNmZklC9EeJWCOOTQulsbdDnz2IrqN/jGds9yZ164kQQ40yd8vEKV6CDgiz8AiSfkIHzcbOYoe9cX3bLXBQ574fL4ZxMl23Iahlx0aD2jcMMf5h+qbCVfQ8cgl27342aBeT6OJA93JhvJcnJ8XanQWYL+rUoEV4oiYQZQAOVvvwRMXPjOu8v1vE5NcWIPvCIvxLxrQRZ10IYb3+CiAOik/GMpP3KP6rFSD2tcaZxqFTMS8TpcxvHJt8+ykNVEcPsNFeWL2BVIMLl2Wx1HSkApf1Y84j30nTV2xhmW9Ixv5WgoEObN3Zp78OlcRySba5wVeYmN1hBumVJqvlYdR6yzFaqlLDqgj6QEjjFgfktSAkrANMxnhcWZQV17I/8Az+80a+P9YJRnII9HELQ3pp8bpKb1QLz9P1KNpDXbPnTqYgC5KGWbWzzDR7D0ER2rfM7LiM+hhq4RexUL7v7ioF8RgNUbcOYHgVb57DXesRLr8CRy5pr2PvcKC1K/tsdrW3HRLgYGXtxSRpKGvBKG13XaA3fvW4/Us+7wH/vmHBZ/UklAzeuKCwb9FJmYxCKbSKGufm5+q2o7z7mLP35kQ0gqA8oqy+l7smWS/nRIRM8c2wBXtVmKY5pjc4eD3Yno+A12/tEEDAQzXpJv1JVUrgoF2n4CXxERoGFJcKi8gW/cXEhSsx6RjLXMFS1VMwvioDSyizag9MWqdGwuI/PQMwvADXqkUROQYhPYInyfTcEjam+tx6EJYxVmel79O1mKQxfq08P245M3E3htgwogRk2M4f7P45dUEgqxvVhGoi0+KjA+yXNjO38az2tELs1j3S/7V0VfZ1jFmUXtexuftxfzcnX+fmFfKZLQAs+bBoLWzftQSA6uXpBlvaWdLg6nEkvDxHMG7/Wvsqg222moIheCBqMh688vhnPpeiedjvw3a/4KFM1W3/f5thWXneGjuffi+Jy81+KQOeFjAvlzfGPcOmxVdX1ibCYw==","layer_level":1},{"id":"0842303a-d277-4788-ac40-881553f75f28","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"AI生成","description":"ai-generation","prompt":"创建关于AI脚本生成系统的详细文档,重点描述scripter.py模块如何利用Google Gemini Pro API将结构化的财务数据转化为自然流畅的日语解说脚本。详细说明提示词工程设计,包括如何将客户数据、财务预测和视频节奏要求整合到AI提示中,生成具有情感色彩和专业性的解说内容。结合main.py中的generate_script方法,解释脚本生成在整体管道中的位置和输入输出格式。为初学者提供AI生成流程的可视化示意图;为高级开发者分析提示词模板设计、响应解析策略、内容安全过滤和多轮对话优化技术。包含实际代码示例,展示如何调整生成风格或添加新的解说段落类型。","parent_id":"563baa06-b18f-4c4f-92e9-78c9620a10da","order":1,"progress_status":"completed","dependent_files":"backend/scripter.py,main.py","gmt_create":"2026-01-14T13:46:54.6970171+08:00","gmt_modified":"2026-01-14T13:53:37.0973361+08:00","raw_data":"WikiEncrypted:g+WP5AcyNm3IY4RYG7jJaTHCof6XoyamhzGviij5jZPE7sJ41JFxqP89OrFb7e8nUGaPlkTp+Q4uDDrSZkBqGPK/rGMEdqyNUBbqwcGHA5VY+aiVlU569rqQPxvNQ0AS1HiMU1H9plqMlYQNkAl/sEr3Vo4OnAv3WFHPjbpwD9L0bCBzsmvtTZmV/eiT4ci/sd2BMfwY0aAq/B2zVXFhTzXIPI+tpasPkZXeLZS/E+vilMWPDdwynBjr9FK8HDS8EA9cWBhk/s0fXisLUVGVqTDD+MUSfUcUSOlhv+Jsr87Hrs6EwoUCBSVX3HCDstdyCQUDI2q+dkx3yn13tNHSiKgVrfPw5RnAfrVeXlOmHdYPUi7UpcBgoGKXMM5mm6oowzHJ9+NZteDvQybJdYlthlARTTnouyzWHcfkERJoZhgG6nuG0ODI/KNucXhaanWK63Bo5ZsPxu6NKK4GFOPdjKDI1z6KgmLq2IhE18FZsh8VXpqzpteDp/Jt3wAJwfYOvl3UYHfp4VWCPLxoYfmpC2VMHZgtUe5QCAl/0ssXrtm+bSrfDb//Pb+XBN8K1IJAN165euSpxmmSMr1kY76auLABjURo/+FMCuDe6RKLb7LNxYsaTLZEOGvd+VPVIJc1g4ydpk639SlESASu1UQL2XP2pJAjjBCxHdwO/fjRivTcVLrQaUGJFZF+dr2R0KbbOMjytNLWRDz/J2yMJyoZs6ECz29b9+KW66U6+8EQk0Oy2KEP9YklJt6El8vrcjKkfm+FDGptLB8y9rUhcTgUyS3ExlK9GvfrVgniMyoEqrXlNVTaNd8Z9LXlN0PHU7ieQNLaoaW3vV6gMa4lLzHPmBLVPjB5CzfoXtFmu7Xv8C7uzZ4/tzGp+1OsMLP+U2Bba5qJKHc+oOSz0OlVFH1tzzpqJ/H+rFBEDV4nztrxhBnfmbp50RjOZm5SgRFDw5IIfk2GTTkjUB/ntQRYGQA0E56XCK6WrqGnNhoCx/GQAuexbkXLV9DF7R0B16z702cp2OfZmsgMWVTqoldaJRnWHnacl+ugJdWi64GUpVEmnRnBokd+mYa6TS6Fv2MmHQF7n6f1MAWD2+s1NHF2PGaZGWUvC1GJn1w61cytQ8K3QoYA5uSF9oqFpqj8rgmn2Mvo+hxOlWpStvCiGzCDP+Z2slTQNKVTNPpRns/UDRh6vjnlbVyGQakeNVoNLM+uUiw7vdDUHw61pv6k2PHTo5RMICghrVUPa+7dVEn3b49H8yFo/Cu+YSAkJizC83i9xcPBVpVx7yhpnsF/f8xZqBBxL8KmkH71jFL5v2lTCKwGhlL7sBhbiM/Mfrb8PjTE0xrQWr1KYelP8GoGVceUQEZipg==","layer_level":1},{"id":"ba905076-a32a-4f37-9489-88c222349d45","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"AI解说脚本生成","description":"script-generation","prompt":"开发AI解说脚本生成模块的深度技术文档,详细描述scripter.py如何利用Google Gemini Pro API将结构化的财务数据转化为自然流畅的日语解说词。解释提示工程(prompt engineering)的设计原理,包括系统提示词、上下文注入和输出格式控制。结合实际代码展示Gemini API调用流程、重试机制和响应解析逻辑。说明脚本段落(ScriptSegment)的结构设计及其与视频时间轴的映射关系。提供调试技巧,如如何优化提示词以提高生成质量,如何处理API限流和超时。阐述该模块如何融合PDF数据与视频访谈内容生成个性化叙述,并讨论多语言支持的潜在扩展路径。","parent_id":"f88446ca-8b48-4cbb-9145-8a4d91240442","order":1,"progress_status":"completed","dependent_files":"backend/scripter.py","gmt_create":"2026-01-14T13:46:55.0555481+08:00","gmt_modified":"2026-01-14T13:53:26.4578206+08:00","raw_data":"WikiEncrypted:JMwpWF0BBZx06HpfZvJKAqAyMH6W7/LxqRIIFcFNhjX1w8lQaOC9u7spUuUxaXvTy3cx3no4rPSa9m7Hk0b67wBs5Kq8BjBBWz1TGAHtiXkNOGrLmnk/6Lw6N2cbzcvNTzbAxrxIz5m1gRIzpUnGptdQviMQJ+B1PxHu64z9ojF93x+SriR9/8ElCkDWRpmUqtRR2u+HFJRcpgHPP+ZElfkQ+qveHbq1s63KPPm4zHa1e578CGaOP5jNf9Vp3/ZfTcCTH794Y+Je4eMYxePJ+Y1q30AEU7VWpOCD5eHWMEPw0vajp8IgFAOcnBL4OH+MqL1uEHHQU4305wMOljVAyXXHA7tVmmSoPTt0WyjFntPXCkZp/GyfeFloISsXlcyao0FIoKiVDzXcx+1Y+wPXe3e1Hg1nxkV/XUAShMmQGP/AuY+ZgntgqGwJZYatpIL34dcprE7eVDTjfYAq5P9+BDHBufOwyksXdWFHpL0TVdU39bmvBmqVKUxcYGNc6uJQzWZ3dE5/gnXWVZ43P0mdb1ZJ5kPwu54q4nzg+mXy5CYoVEHXaVeeqbG61wevohJZY4HQK/FZtR+OpsJGgnSz5+K8YYWiDeMwKisOacj8STeyZedcrWCe5Fp/tK2H2MUqsts/UdHPOMKA6af8jZQ7NoRVh1JlU7zjQoItnrwLnu3r+hm2D6zRQIJkDjJhwEyi2DoQeUbsaaKe4+EJZaG+EhR0PVdxEt90dFvcslCp4XoRXuUWQ1ndfpaCfWxdiU96b7GDiaVFEdh0lHn/bI4VN4MtEuep4qjfIrl7FjBz4IYsavqGrFHE6CqW/V3yweUt1vcQql4hbAm09urf78oiycd7mRhZnzBlvOkMRyadFocJ+7d5AymzKNlxxNU3UI3RZfJR+d309YUdHgIDP00DjIrj082B14hbtCU0tkgsmc1gFf0AanyxjXH+HZbmCzR1bX7tvfmAVMaeRmfwyMem2qelwap7oZbC18TJ5Pqp+h+DgA3Qus+ElYgeubeciRL5X1kn9OpRw+xhCvyU1muVx5uZR3rihb4dzjHYxK7wJBze/8htk2AKHxPCtQGwy9Phg931nPTYOeoQ1+e6KtV0TQAaOpB1Rh4j4p1iH+qIKdrB7zpS8BfNErWaiDu8EGZS6p76jeMI6nd1OhVmsUv8LDuXbDQKz+y1AAk2SLB0OXnSXURWddjnY0PVDO8mzRUz8RljYp1s5J37E/O35mFXuvvWlNHUQXqBH/+2GJcDuL45EympGDPyM6nd4Lgbwk70I+PgQwFJMhBQX5oohAO3WQGTgU0UGd5iH/XkpGoDHgKgALd4bCLc7PKz2QKHvRnIQZkfET9htbKwPpL/LUqIgnBlR8mZYbb43DIO/guEYbo=","layer_level":1},{"id":"cb84c2dc-1c51-4118-a472-1770bebcc52e","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"视频数据提取","description":"video-data-extraction","prompt":"开发关于视频数据提取功能的全面文档,详细说明如何利用OpenAI Whisper API从访谈视频中提取语音转录内容及关键时间戳。阐述VideoExtractor类的架构设计,包括其依赖OPENAI_API_KEY进行认证、通过FFmpeg提取音频、调用Whisper进行语音识别,并生成包含时间点、文本内容和关键词的时间戳序列的完整流程。结合main.py中的extract_video方法,解释该功能在视频生成管道中的作用与数据输出结构(如transcription和timestamps)。为新手提供直观的处理流程图;为资深开发者深入探讨音频预处理策略、关键词提取逻辑、视频片段分割建议以及与B-Roll素材匹配的机制。提供可运行的代码示例,展示如何集成自定义音频处理逻辑或扩展支持多语言转录。","parent_id":"9f93b8be-210d-4bfd-9b6b-9823a477568c","order":1,"progress_status":"completed","dependent_files":"backend/extractor.py,main.py","gmt_create":"2026-01-14T13:47:11.7473213+08:00","gmt_modified":"2026-01-14T13:58:27.2815749+08:00","raw_data":"WikiEncrypted:/pvGPLaEVo9VWauq2W2Leq6kvTqposiGwXRGwTk7MlghHNbehp6sNWHFzfVZwH/i+rxQlwLPQHYuUcZAuf7SPXn8m6f3Jx2K0Bujp4kEy4gfxIvMZoySHzyGfks3RZsHK/gW+ev3I8cLP0r0+1IhsahflG8eLGqxoBdufmX64O+Anhb8Af2ETmtz3m4C8ALg+7xbqulhOBwrhB/GCGJLAEw4YV7CQTXnvToO1FGMNTUrhUHKIfJPHD/IzcMEhNdy53Sz0IoYitnNc2it7siYpchdHG9/eXqffsejVBFRibvFAs06igjc+3Wb807s7pbdCYnfCyvzyBxZgv38kOqWh5isPbmivHA2mbS7z3EmyUrBW/FFLIuVaPeE7DHPuVxpMvQsKlU4cvX7E6Ds+wmaslFr4/LZoc6t5mYtUtkJHI3YzvC7MfIOLPA7K/1NGBCnUHDerPnAfoTF3w31ZJOBATEtcRV+jfrOUBASYm1sRQuiyV1RlJlrtF3wONqIAjmEosan1848I2hzACKgY2EFqLVsKATcg2LUl8Tm5QItrMbNKWblqbVgFB1EgAJZyBrpaAuANOzCCsvq7dEnmo9dSf7GaHxCd6Hr3SorQfzWh0v3wFVSVQpK977BY2KZyaCHtLXH66nG+Dkenw6mNKr+koN92Fc/SBK9hciocM76vzs2a+UNHoqB8sS0HdutF1a5TfQGTl+xpI/9oNbghrYjfbO82+SJoC0J1sbxYFY4wb/vS0NKOEDzJVRafwH32PRuKOxTEHgQ97iiDYtPeiCoqArK85DM62za3rUVUPzevUKde4DZCBbfYAAr0IuJ50qWlZcvOlu0anye/EpGk/C7FXpX7boInxklxeg1/7h9z6c2BuLVfGGV7cSF0yn7y4ksrYu3xaERTwdaMBqsDb8/FQqeMc7Osyvg7jwa/7yzRmhzNk4ITg7YWTkdxMV+D8fMG5s2Nc006ObUC9OWTSF7z2CF8pM/w5aGaRjjAOUDHX8Vhouw2mGUPV6cVlwjLyHQe8juC1f4EwhTC+HCffpstcytjCMMye2j4U3Rz/zG1KMfhcnVVPnW0KAOu27F1it7F9juXw7TwvnLg5QM+iLg2ymfVW1JLto+LATcqwbCcr6jRucVgzVOVG3KtIuRc4TvFr0Z3e3GKCjCOZGY1kmezA/HxYl98/a/zOJXupHJ2TMwL3WcsXi2QZq1nDzmoatuaUmALH1IIeL4Z3Mlh/ZpZNAjxTWEnFJaERl4KzFYT//DwCnE4MMwnyMvya/2E21vuwcfOLmdq7M77hlxMQ1FJGtcNUMIzUgUI9OLdV4EREUttv350KnhhtTBgBALmzShGD/MpsIHWhUAZoGhuIUOJv5dIc5Ljrs4KPdo2MvICOmX/9N3fkHpDpFMuIEOPMlTRA2eqxJTZuBkT5jzRONOfa+rD3uOKv9RUF0HdNNxtvI9fleHK4NVG09U0HUeiqV4EsG7OLNIi4nlHzLlZCrIl4P9MeYJlgaKBQQdC4PrK50ix+lrBsuPLlKgTtAttPw0C2v98IMl51M7OsHGE+yYkg==","layer_level":2},{"id":"d57d34fc-9ed0-4994-9dc3-ed3d8607c2db","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"图表渲染","description":"chart-rendering","prompt":"开发关于财务可视化图表渲染的详细文档,重点描述LifePlanChart和CashFlowChart组件如何基于render_props.json中的数据实现动态动画效果。详细说明DualChartView的双图表同步机制和LifePlanBarChart的时间轴展示逻辑。解释React组件如何利用Recharts库实现平滑的数据插值动画,并与解说脚本的时间轴精确同步。结合scriptSegment的chartSync字段,展示图表高亮和动画触发的实现原理。为初学者提供图表数据绑定示例;为高级开发者分析性能优化策略(如React.memo、虚拟化渲染)和响应式设计模式。包含实际代码示例,展示如何自定义图表样式或添加新的财务指标。","parent_id":"cee466df-e148-465f-b3b0-e7dc457aa2da","order":1,"progress_status":"completed","dependent_files":"src/LifePlanChart.tsx,src/CashFlowChart.tsx,src/DualChartView.tsx,src/LifePlanBarChart.tsx","gmt_create":"2026-01-14T13:47:15.5374607+08:00","gmt_modified":"2026-01-14T13:58:51.7346595+08:00","raw_data":"WikiEncrypted:yV844D5O8AJCQC5NtY1ih/kPhPOvHR6GjXkvvEbhheCK8dl3xPZfsWrumzHVZUvKqpoAWfAYah/f8PcPV3opoHgC1tufxqy8qDUUjpJzoQvRhhYYomVz+m4mOFbDfs1yK0PSFpq0vQxWnwJh7hNvPVpuqk+ejSiwuT1skdA7HgGtWNhVe+daHIv0tlFa6gHUz/ZvYgB53SKmWi3eH53fZAATfK72ycWShLXUHpjWEuO3wBiaMugMdRwqQDbemDgDX+Pu3adXfiQfQljZJcAMzuFi9zpVbh81aBwmUAmH1aTZu2L+mHHx+9B+abqqybTTRTN8wiZ0X+KKWKkXHfdLfUa+ubtrQVENTMDdhcFM8HnOALWip0yUszW4x9SIy1rv7hdjNCkSzvlCLE5WaWYZRNUJl3RaryJ4I6Ze6ON/tYWLVbK8QtQY7QiRRreiSlhjcZfZQBOqCt7halJNSCdQlFns/QSpx3IaIC2XKHziWMKE10nkvoIXkobJR8tYTcbb0xbK2zCqFNFz3EpK8fy3tkugDuDANa8RrSJrDkh229t7qT44nRmi771A9wgUGQe0ShfZy2Rrlsmg5RIhsfJVTs4LPmS88wD2dqearNM1ZDui5HWe8M6Y3jfyWxQigMJCKx+w2QZyqDDykaUoK98ZiBc5C9qSf9XU4FiwsQVVtIYqfGBZGXS7ttJFo5SV8UYqASIcLHN/nXfCX02gv937nNdhn0CdZA615DimGiivg7Y6Fs29hAf1j7k/YMQjosrF34MLmoCx6qwqe5TlDG5fOoQES8NgRhiVUvVs7MC3RxTXPBqtWeck+8/QBMASn8LC9zigp8t1fgxl2JWwigDEW0jv3G3Jz6mN8n+ZirlyCJzhxtVgnlpaFmnl6B5Jh1tIGHEvxlxystBiM3aMlKhl6808dT/J1Hi31TlKKPcOAqmywnyktG8/JgSZjLbUPTmOcmHtHRFONBC9uneWviGdFnxFelPFY6dpHNeM0sSXsSDoId5ZNDqKDc7WB5+5qUYyEP/2BtCScHe0JvRhkgHo1NxQVpGtWcRv82UOgoSN+6EzlxafcEI0Q/bTuKMFchUS2ZQre0+4IbaKaYNQVMq1pgToymyozzFV1YNGkQGbQaN5z31ZbCe5I2Jv7jIlJ/4wHdEnp2mjIh8CBLkk6ZbgoovOnvXWEr6uSLHJ0avQ4J1Z5bB84oYU2Bhrn53bYzr3tc9VvCZ5j4c5KoXXrLGD2RyqSS78CySEiR1zFUDfuCHIyU/vNf+LLhxUbO5NnW5QcuXDgCe35q0XyQecxRQFe5PRq3sUR36aFI2tr0G9wRY8EhcYD9YLoBtwqBBPAU0AixNljZI1Wdb5HegFFd6q8HXmsbBNcN516Pc6xhvyPhw37PlyEpciYP+Ipr9tbI9CeGM3fFHm0wjCS4L6cRA1f5caJ/m36Ro4ET9Sp4tYuPlDYq5UmGZ+YpFSIuj51M2w+Susrl6bO6KmAk3gnc4exA==","layer_level":2},{"id":"c7a0406b-803b-43ae-93f8-716f315885ca","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"快速入门","description":"getting-started","prompt":"开发一份详细的快速入门指南,指导用户如何从零开始配置和运行本项目。内容需涵盖:1) 依赖安装(Python和Node.js);2) 环境配置(基于.env.example创建并填写API密钥);3) 输入文件准备(将PDF报告和访谈视频放入assets/0_input目录);4) 执行生成流程(使用main.py的各种CLI命令,包括基础运行、带视频输入和干运行模式)。提供清晰、可复制的命令行示例,并引用PROJECT_README.md中的快速启动部分和.env.example中的密钥列表。同时,解释每个步骤背后的原理,例如为何需要Gemini、Whisper和Pexels的API密钥。为初学者提供手把手指导,为高级用户提供配置选项的深入解释。","order":2,"progress_status":"completed","dependent_files":"PROJECT_README.md,.env.example,main.py","gmt_create":"2026-01-14T13:46:28.8363003+08:00","gmt_modified":"2026-01-14T13:48:20.8318694+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWjuiNN7p/9UiziFtG8VxSN3lDZPQFx0/QJ3DnzLYLtDRB7RRVeh02fjqVZIHEIN6gnUd9TUvA0a+tXySOYNMTfh1wt1E8YrI6nB+8sKtXSDwg9hHVEzvAB7Qbm9d90teLxWpXOmQDn45oDYxI8OFeDc4n0BSZSZ/73ywRzglHakMImlSTTgMq8itWEoK4J3XrxW9oznybPBOQc3UcBJxRmWpvjUr+WMeKJujZRvJBSBgu5cQMH0h5gq9uRp1vvCbaYqNQm0ZQiqE8/2pJ8DrIiLwCV8FYkI3ZCHSK7csZg5ItkG0zRkM2sruF2KZ5Va9jq9V064qFtz07v1z/jbK89CrGPht2c6I05XTRJEo9trIQPW+rA549LScNwOLAM6oEYY8VygwDLnd9Bsi3vPd4pu4iS76+xq5dnR7aFgI8G1qto97Au9JKKtCTteqXs01gpVMPmA6ZjqoBHOkXgY8dVdunmBlPiZfL3OaFASWlTskYulbmiKP7JnCEVnov2yN8yMYb9UC255uCokMWUNHsRy7+lIeTkt4f/bahRH61tSeoPt/NmHjUk8Sjum2qutLJpJda/81lPhxIH0yEYZ2VGR2ZVuIT0JkDqGgvonvVnSX0EYON0jIBXCWxu4yAU9jRtFpo/k3Sy9IYI1Ynxk4gXaTtE7YvEhc20TiZngU1hDk0Z+JFjMTC+FR6aP6uzmUu94wCJ9SXP0CK0qiwNoAAhGz65T7awzj5zogWYz3svCvcJ8nrY6l+Uu5jfJYKVp5mMskE+g8ulfht5j0kPAYzQj2EkQuz0NKZYaDYgHFcoWhEnv3k7bDWq8raM2MMdWh4HLGwvuo7+dRLl/jI+1z/pDgxcZvxKLWjyS2MI2L5KQUi674YNny5ua78mPKa0ULyeHYiQmyTI1CQqTXY47i584P9Rnq9Oqz2VJWuglT/2dZvSEPL2J0Q6QXzjmymnqPXRG3ZgN8LiTfOLQdPnKPfbtbj1q3NvV0hZA0cjOWfYYk6/TaCt8bNEmHW5Bxae+oEmzs1p3tN5APnH13PTWQNy0nCLjtEmPpT+B/qeSyTKrj7umUjDYR1gzPOIi6HJF07ne06w+ubuRw7f/8VWQBmEcpnUpBq8+O4rNJUrRF9m+KcWrKiEV2Kv6qL/1rXWFd49KgMOM91Or6Rq+iaKZaJc1B+hcs7KAN8y1+vSyiP0YR60PkM2IZi9lFcfLN8dsQunTdNEwdvFlKyBgtNNV9X0A7L4FKivmpUMAfmgYkJ4mO8k375i4WHtQRFokdxaQpAgZwpS8Nz/fj9kSjzINcEDFK66U/nLfCiq3GyksBDNozsMWcRrlJYTBPudbRFBvJxhd+vbdMzwruS/8WAJgIv9fL"},{"id":"bc6e9bf7-2d4b-41ac-a0aa-6b17be4004cb","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"统一信息显示层 (UnifiedHUD)","description":"unified-hud","prompt":"创建UnifiedHUD组件的全面文档,该组件作为视频画面顶部的状态仪表盘,集中展示关键财务指标。详细描述其UI设计,包括线性渐变背景、分组布局和响应式间距。解释其props接口(UnifiedHUDProps)中各字段(年份、年龄、收入、支出、净现金流、资产余额)的作用及数据来源。说明MetricCard子组件如何根据指标类型(如收入、支出、资产)动态调整颜色和图标,并特别说明净现金流和资产余额的正负值颜色逻辑(绿色/红色)。提供内联样式(inline styles)的组织方式和响应式字体大小的实现策略。给出该组件如何被LifePlanChart和CashFlowChart复用的示例,并指导开发者如何扩展新的指标卡片或修改现有卡片的视觉样式(如字体、间距、颜色主题)。","parent_id":"3277c20e-4746-4309-b936-43eb912efcb7","order":2,"progress_status":"completed","dependent_files":"src/UnifiedHUD.tsx","gmt_create":"2026-01-14T13:46:53.4495561+08:00","gmt_modified":"2026-01-14T13:54:52.1823122+08:00","raw_data":"WikiEncrypted:iaIcfwdLscso9uJYzNYkB9JXo9GkONIzTrjcBYu1q5hN3InJEW+tFRfiRsgXaGraOoNTmmpVX46H02dwtzP6sDzlVT4r2NV+g4JfFzVf712MttcY7ed2Zg9mIISY7UMjyhi06sTuxMTed0+eZ+nv//1ZeDkwlvJ2NXt5xCtc1c3Y+M99e+kZrWQjNAG9H3LkgIql1PtMrpUXT7Er0yt7YvnBLGnAke7XRNevXjxRc9Qu/uKDLnjDCHthLKX+pdyCMo3Dmhc7XAaJzagNgX0JFrfu7ltPn09znAwUDGWGmh5SVv7cXxpz/VLhQKv+x2g9zDX0nIn7HvZqpM9R5Xth/+tUuhzviVhFskMHRiQ23v1eUwmriAjBQSC7S+A8sg8PN75S8OBHD4APOqrH6hOnpSeM+KbPKND35Upig/9nDRsnp1JjED09g7qJtbOGzguZ1WLJVM5AXxpfvrjwTNKloy2rMmh5ys2aAsQT088G9oNVV/fW2Jrhhvra2jkTPykCT4keSm5+lRAjNRzoBpphxAeevpzrsUgFwgJ70bxJrg3kXqQojssmq/z24Ijqvsb/Kuo+OZnqTdC8cmO1PhbW60Kpo81i15i56XiNuViMt9hwM1veQbq9h2E4uVbkYdu3wEBpzUb/nNRA2Vs9yBYgu171XIFruQ0+Qv4p/yEIUkvEpm2S7u06gCYkJAsczQ9QboT7dPVNFXZyFQXdvXULp9QD4gv5iAmjuk2hmqnXLVgoNM3h7dfU9Vulj7zRZK6r0WC/aV97osxPy666H4bLL7SPdPjVae9+xqIw6HtAOGXkg2QJYzarHw9L9wB1q4ssoZvzd42Ch2R2yqebQxsbCw0vk6W/aEooAkn/TrTPtrUOvBAI/EUicu03tH9LCtfIvkTsOQBD930KfQmhtR44CnGjks6yrdDW8TMRktBoUoFeiJbhbYlRX2GoX37UZewXo4/T6mO7I2rabTqSkoCpPtK6e3dCqAg+6KS+BBKmOnQk+hOM/4hfAr21TlCAMY8uwEDSy/hRDVM3GJW9iIoNZg9Kl3BxX1ZKSDBE3n0FwcDj3jYm5UVylAwrYgwk9wHEFdyBjHR/FTOrY1+Fbsrn/oHUfdeZNhn/hHG591rmUPZmciwMPpaGcylXVdF91I/Lb6Bsn4Cys3RVzfnZ69Ib5v7aGNbI2gclzaryP/seRYzrqsLY8JzABXll3db112iRIm8YJFJJtdt0VyVSljtt392aZLHkJkIklnRE+VBDfooV/xBdWrtbMdArOejQaq6C88SR1kiT/V0t1dmkrmg7Kwp1eh1H06IvNR6RvwFW96lFjJPI4xwmDYgTx3XpFPXH0mTv8OEbBdoQdyt6ns4vLrOu2TxDeqpFyILQYdpv/D5YFyCq5/Xs4BPu2cdlf8aargnCN7SgwOV8/E8hmkVsy1jezWnk0xOwRmOtZa7ksF0m+WvDt0qwyrYCKfKeevDfb44K1nWiXQOdx8dH8RvMGQ==","layer_level":1},{"id":"fc1f874e-373b-4658-9011-f8fec3a02e00","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"媒体获取","description":"media-acquisition","prompt":"创建关于B-Roll素材获取系统的详细文档,重点描述media_fetcher.py模块如何通过Pexels API自动检索与财务规划主题相关的背景视频片段。解释关键词提取机制,如何从生成的解说脚本中识别'退休'、'家庭'、'教育'等关键主题,并将其映射到有效的搜索查询。结合main.py中的fetch_broll方法,说明媒体获取在整体管道中的协调流程。为初学者提供媒体获取流程图;为高级开发者分析API速率限制处理、素材质量评估、版权合规性检查和本地缓存策略。包含实际代码示例,展示如何扩展支持其他媒体资源提供商或实现自定义素材库集成。","parent_id":"563baa06-b18f-4c4f-92e9-78c9620a10da","order":2,"progress_status":"completed","dependent_files":"backend/media_fetcher.py,main.py","gmt_create":"2026-01-14T13:46:54.6970171+08:00","gmt_modified":"2026-01-14T13:54:51.6529531+08:00","raw_data":"WikiEncrypted:YfQK7cGsmLf+7Mh75xR10mooPbA6i5xL7M1f+yHjWNnOZAQoKqBfhFQxGy4l4W7O0DpxorBwgoUuf8i8tBfUNlWeO5hX/fTUqhbOvab6sQ4mENCoHgT+90IXyNMDvjEEupxpFrsUYasNQZA7jAK+U3McB6iZuT4LK+h6wNh9sr4f/ksmcjthrMVXR3i7HPGzXKf/vkqMKhK7WL6ttyCxoZ4yKBC4mP6OVebtr6ocRuzLem+JEtwSksXEVJkZbKWbEFHEMyo1zbAJWQHiVNwI8ZO12rGRkmrdy0xiFQ1QlNATlp8aOloAP61phsH3pI7MexxYjUcBPmQHlO0CPzdNZAqK31v3uRtBtvuvckm9nKb0APDiFAosH1kB8nhlpXOnsjE3at5g7Ljb3ev5fRvMHfcEsDbOHPpq127g1Da0U7k4VRfN5FfDRHr/fdq2BcnB3oF4YwWwlig7cSqDWzO9FiE/Pw48TzK6syttAugvzcfWiTKV9Dt5JwzRBg8LTFTPZgmo8E4pDVUvUmdEz2j/TSjPBlJfSX2K8f1BdurNsnuLNj4pImVK3ZVzk8YoqgzOWFJIX8oW6Lmv+GkVN9p79NFLHUo9U9gqOZRrHB/f6q3ElaZyrR9cEM1PzTxT33Tva+WK7Xp1k+wLetfNuzWuutV1YYrGf0DrJj4e3oo8Ks4i99/X6hzlGF1vKrOQ8ylf3dSmlSoYi2UML6HBx82eNzCI6yM+A9fE/Z1frvqbO16waa9i3DPRt5P/dbtDbiQXJ/a6SHivTef9eTArdBAN+soS8cUcGX8oOBiXErUogtngU2fvuqnRh4ayAHlif+NS2j2q5d/sXjZw3rQ2LEQTWbkMRz2WhJSdP3Qu/pD7ow25kX/OHM1xNAr8aBw6QQ0IfrJ/Ir+EVlQCtuEv0iWUIiYIxSHSTSiJMEN2QZXAAclj8vvWNKIuEdy2Obs6ORWAel5ZqnwycVdt/BGVV9xA3/KPNN2JhgdV8XN0jHoT8ETBgRFUj6A7IKC/Rct+WQxj8UL3BmI+859+VRNZRhPMq6KGJT/D15AV1eo2YENHSq3av4A2XT/jBoLyadb5aPlCLVu/Uzre4v/FvcRFhw/TSTOwsxUigOL+eNvIfIYexE/yvKwa+9ZkRlhGiV+TSCzKURx8fOy+VKXC2IcmqiOCJ1o6890hOqpfGVYSzShGRrIBn9vvThB3NiKAFf5/6Qrv1bYJ7xNXHEYLIDtCFvzLAxwkV/yxlT102wC3c9vLjECWaHiEHfiZGFBq2jFu9ok0vwDlM5WUSE+fyTWqUqAh8i0H73U6oI4usLtCWkmR55s=","layer_level":1},{"id":"ae4557fa-89d1-4f40-a6ff-30de3ac18964","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"B-Roll素材获取","description":"broll-fetching","prompt":"创建B-Roll素材自动获取功能的技术文档,详细说明media_fetcher.py如何通过Pexels API根据脚本内容智能检索匹配的背景视频片段。解释关键词提取算法,如何从日语解说脚本中识别关键主题(如‘家庭’、‘退休’、‘教育’)并映射为英文搜索词。描述视频筛选标准(分辨率、时长、版权许可)和下载管理机制。结合代码示例展示API请求构造、响应处理和本地缓存策略。说明broll_fetch_results.json的结构及其在后续渲染阶段的引用方式。提供故障排查指南,如API密钥失效、网络超时或素材质量不佳的应对措施,并讨论替换其他素材源的扩展方案。","parent_id":"f88446ca-8b48-4cbb-9145-8a4d91240442","order":2,"progress_status":"completed","dependent_files":"backend/media_fetcher.py","gmt_create":"2026-01-14T13:46:55.0560429+08:00","gmt_modified":"2026-01-14T13:54:45.3288198+08:00","raw_data":"WikiEncrypted:PTqxv/NWgLMkRR0/hSN2N0XZAKpsL9OtP+Bt+wW0QT7mJPS3PWIaAWkho+jynYimwxKH+LNIfr3h2INJKgxFSEO0UK92vKHt8tPwxmF48dzrSK9ui91GF1Ask2KvMmZmew2QsQC84bUzDjQD/IUqqzlmyCUAvRNSh4oWet6J+FFZNkWK8kUjgg2FbYdAq6GdkN/+ILPJEx6R2ygCu6s0vW8JCG5VuDLQwX/7wdwl8Ek65H/nD5BRef7chdALUcDt5QF0M6Y2CDGzBVt3OFdSZnJ71y6NRnqZ+YFQfLdsuKBEkn3doXMsGE3byK/wPAR/EU44M7z5wXDf0mzAhWEtnGDP1SWEyoIF6mZGCb6x9t06wzgztWbOiZKY4zufFUwB3lFjsrgoOhBzFMkpniudwJF9Z9pbJEhp7zy3NTN/ZP2yDI5ACb03UYj34EiAbflo0+odZwxYfMI0N5rMr+FpZDm5yeWfUTVITAi7Rvw8QA9aSARUlz+JRsW3hKHjJMB2GDDXnZ+yoVFa5TpirRGxnTnx2fOjE+2SmamW0fgSEhCl+BAQLAgtvSxlhE1q54jNM6VpBayhPGdZUtLpPS1GsRDOdGj/SGQWlslguQ+GJRNr1B65OpAbmYSDnCFxTl4LanbIaIMWhko6u91dhcv/ZQaZoLY26gYnyL6mV8w1Z02tZ1c2ecllfbol+LQUJiSwTZYG2F2GNp0F4ugUiLeuo48gTSqMKelV6w4TnwsDClDRc57OxbegBDsfeSIYRSuSnF8qXRQ8lz8hv0jP5YXux+IyXlnidljIwFsnpb6WJKDqFF1m7eMS06NN9J1YCXexLK2mblfwRTlFYywLO94ISWIRLMZHWgLT4MhP4lSpmQne5vH2ZR1S8IlTdBg1Tf5MvRdptF3I+h+QS9YKI/rgs9CarZHI9H94YAVqvaHPxMEVnkD/OYhIoDglt7bCts25HZlKkJAFB6+jF2M1sD9pp7nORyHn82q94+EkaNoIw6tsvRMcQyY3Mo3lOT/lV+3fjqxRWqU7AUxHteyjN39KDjmDeqWR98jz4TW86DyfkIintTq46PUcOy+GWzpJSQlmEjacPBfGL+dB5lqzwcvEFFpbLAH+oK2fLt5NupE1muK81SPiNZJ5fowXwazwP/Iz6TUo0/DcAm95/ZCggYElmmzvo+bT62GHf254hLdOjAEPZBxf9YAp0hLOITDBns7yYUrvdv76q3XnIQACQbODMsNKtUGNiR71rLy8tXnnkS3dMI1g8K0+2YiWO+cJQK6SDjpE4ohIjAuwA4IrPcqdpgC1pmVDYLUuY2LK/Z/xWgmS/3w0JnvC3WiKlAGvnA44lWVelTAh1D9X9z1hPVPpNw==","layer_level":1},{"id":"ac1936fa-1ae6-495f-8467-f89da2972fb4","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"视频合成","description":"video-composition","prompt":"创建关于视频合成引擎的详细文档,重点描述Composition和Root组件如何协调B-Roll素材、解说音频、图表动画和转场效果的时空编排。详细说明UnifiedHUD如何集成多个可视化元素形成统一的用户界面。结合main.py中的render_video方法,解析Remotion渲染命令的调用流程和props传递机制。解释时间轴管理、媒体同步(音频/视频/动画)和分层合成的实现原理。为初学者提供视频合成流程图;为高级开发者分析渲染性能瓶颈、内存优化策略和错误边界处理模式。包含实际代码示例,展示如何添加新的视频片段类型或修改合成逻辑。","parent_id":"cee466df-e148-465f-b3b0-e7dc457aa2da","order":2,"progress_status":"completed","dependent_files":"src/Composition.tsx,src/Root.tsx,src/UnifiedHUD.tsx,main.py","gmt_create":"2026-01-14T13:47:15.5379641+08:00","gmt_modified":"2026-01-14T13:59:16.7286294+08:00","raw_data":"WikiEncrypted:/pvGPLaEVo9VWauq2W2Lenm2OOb/dH7UjajBmTP8Iu5/xJQI/hBJf+AwJxoHmTcb4stWpSjbEVPPJ/6CKwjLEwjZH32HLF7xvqA5pnNgvIp/lxj0NxU/wGyV66mF+XEIYyNvGmcNvUVspJIPdWM8TbhQW284+OSBxhjuKJ3gm8a8tUe0RBmhjMZn9PyV0Mg2B36rqPm6Oi6XzVHA3R0PUFzsfnRoCaRhtHzOCgvtG4Ry8dRTUm9L5ZMQndKsTqEM/MtgguA3Akl1KMFHYGul1cYD5/yUvk47G3HhC4j9Ou+4yTHIHf6b/5RILX4HO2/cNDDmotszX8jIrJO0jgVdjcTHeMONjd4+XlnyHsONJYwz7kAGJp7/qzVEb8Rtl/fJJyvoDQWmVnhWFoQcxl08die8ZUE4rei9ijYRLS2J1LDSLVmllbMStTbfAG50bIG4Sn1FrFulBIN/qGdV6k/rGcTQg/GHhHy19BO5WGAyb+rcLdeKNqkl5yCVaRF70J+qSmLYvSzTCBS/zlD9nMxWxPcryzZ2g4aU64l0puTCZiWpmCn1OtWBAd/RlJ3IPTdg63dX0TIrR1vH9cxdhp6Si9E7MrlAgjE5KZXXpXv6jU2YMxvKlQoVZqf45JRKnnN/z5odFfl56oxUpkNwtydlNIgTBWnnwiTl1QLx8oTdQtOeSqLuxvayeu+w4K6RW5o9DPJ25BaqwHiMF1YRD5AS7KrsmQp/XhTRa0CwNQV4WZje5L2gnRAuU/OhZ31Dgm5fU9kvbqkqh16qVAGY5ACZX+hzAzV5vpWveezWDC1hWgxgDsnrAo9lr6/Y3Y5ghxyK7Q716+TfCR80xGr/Z82u15ZKkftYHyk1nfdygTBKh+lwQxYUJe9IpKoJPlYKU1Kjgxt2JrM+IUP47/xuKJT7Z2SJorrgszDCY0KW6bHnTIg61WdinPjPaNNJypRrbpKPi/erEiWe9xR8rZO4wOLrGgh24LbJr6ciQG2f0NGCdG7k9sXOfaKlGugfmqhO14pA5Z7Un3uNZPCNXPSVu7r6Er9u1GXYgaXNrLoU3oiHLg/JX3pbq+l1725Q4TbJWqvBqCxsxwEmloLQ/mnHtoOjqZf/tUkihVHt2R/l7yZVoS1NYUNmgpTwZlZKKhC7m+EjtLxEFl2lBuQaa/lUBoJzQfPDNt+e1Ydp9GLkr4K2Op++slKx9QJZGZd6gnXLCtAwXCscwYqNt3786xV+9D9Iqy18t19g2iM6yz05GURrcPfuz7DDHm7M53vZ/jjNtPdmZGaRcp8fIWk/TGN6gEB8xlSQkU0RH5pKUmGMA5MzlNyTTPoudMo5dZ2uKvZj+m7T65pt5nd0V7nC7BkbMQnoxYxBA3S9jHMBETY05LzF7oUmhO24N2iGTDxFb5QvlQeZ","layer_level":2},{"id":"f88446ca-8b48-4cbb-9145-8a4d91240442","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"核心功能","description":"core-features","prompt":"创建关于项目核心功能的综合性文档,系统性地阐述从数据输入到视频输出的完整功能链。详细解释每个核心功能模块:PDF/视频数据提取(extractor.py)、AI日语解说脚本生成(scripter.py)、B-Roll素材自动获取(media_fetcher.py)、财务数据模拟与图表构建(data_builder.py)以及最终的视频渲染合成(src/index.ts)。结合代码库中的具体实现,说明各功能如何协同工作。为初学者提供功能流程图,为开发者提供各模块的接口说明和集成方式。重点突出AI驱动的内容生成和数据驱动的视频渲染这两个关键技术亮点。","order":3,"progress_status":"completed","dependent_files":"backend/extractor.py,backend/scripter.py,backend/media_fetcher.py,backend/data_builder.py,src/index.ts","gmt_create":"2026-01-14T13:46:28.8368156+08:00","gmt_modified":"2026-01-14T13:49:04.3135085+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4gfD6KbzJyTAydbcRfVv0b4BXBAF9G/unmbHb0x4cm5f5JJeO16NqGe5C5EiggSB7jwqz9VZJcVGKQlCX8MV1hHiMPVjDQ/LiRkXZvOy6lYXk3qPdG9gqMMK3c0J738BpyWfGoQTWD96gsyy5OSUTMx6/vZyPF6e2D4aVHoHUfY1G+Gds/mVjXALj3jv2nXgyZ/sy55zebHYIsRo3oIKxiBbFfP8r+NVFvBzm/qrKTUKQPtzcqqdMkDSj8ZUB5c95d/SxmsIQUlUsBMOv9eQjkGSFetqIaENWxzWZl2WFc7DOP9s9xciZg6ODuudtZyZlnGMMRcbPxuPIjpk/YIjxQ8D4sQQTAX2HjdTeVoF8VQlqKjPhyddxvNxWH1nKQcg7R2VtQ79q9sJf0CFrGq8QiJYa+zwxOpXHE7Qqs81bXGkFRUv/1sQBxgZUfXavgMl9+Kjprs/X0dd3Rv7VrYwDfMgBn/bPaSbV0yWwJDoBZH088z0fXXn9Cp0An15dYsqLjoXxjxlYk1DYvFn+aefoKcXqGZQKXOxQNa/wvkKpLSUKgbv/D8HtZ8y4a0CLOF413KJ009vNI+fYe6vlxX38+uD9adhPI5Q161Efnv56uFGCJRjBnTpKdamWzJfmV0hMhy9iNDuDnP9OhYtl8OVdGeTMP1nBItZNEpN6vyNyRyWoqt+OzzVdGp2eWYo9guwd5/h+XDqCIhR2/sCaPI5kNOhr3purUlJdf31Vrgxk3xbhp9fj1WIbkeyiAu4Q4O7GG0OI+yY7s6krLPbw+5Gx9Q8hxwmCOKRvIftIVEuaKdVK/mugtO0XpcIUkV6Nj8wjNnJ3pKxcxJzG42QrXowqqZclJxqlM+Lt+1LmUdFlklJjziFWFeclDIm9FK9qEbOrUgiUK8HY6VdfwOq7KnUPLZGWT7gPFLAs/V8MPE/rit3dCwvQcR/BgpUXXn1kqX6R7v7YoJeOjBivemLTohRHWU/J0b53sFLpy74JGJ1f3Ah3soql2amBb4ZhNTGDNv1sfStI/aWb82ekqG3vFQHT+dUGBpZ3eDaHAjwDkbS5PxtnvNz0TWDq4d7cO/xHzzI8Yy+kRZRHvLNcMCb+EiYqv/j8l4kvqCNRVIaATR8UIGU1HqrK034++uu8pOY4UtHogo1asVPMCh011LxA58jIAARswM15ZEuk9wEA4HaDyTFW0ZTbzFqtG3wUTAvij67c8TrHU0mxWwFqidKXTgKyFrXb9RiUmIMTn7TQPWx9GsF39y/lB+bPjToaep+kWUkSf+5CiWdoQtf53pqkSOfL/C6DUX8FQ3SNHWEuC6HTopPULv0a9nm+4J4L4HMRcDnroIUT7nSO/HeZKhKdk76OjYzqMpF+MJ4nz2tmnaOgbxdJYJLj5t4slOIdQqV/piHduuMmbL7YhUEtG72IWvBExW3bCS7wvZRrgKAvP2EvOKR9xJIuuMdjokDQu0x22n1AKFJWQ0Lxjr/lgIaAFPfTpk="},{"id":"75415347-4bf0-4b58-8790-8290299306b1","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"视频合成结构 (Composition)","description":"composition-structure","prompt":"编写关于Composition.tsx文件的文档,解释其在Remotion框架中的核心作用——定义可渲染的视频合成单元。说明MyComposition函数作为Remotion入口点的基本结构,尽管当前实现为空(返回null),但其命名和位置遵循Remotion的约定,预期将被扩展以组合LifePlanChart、CashFlowChart和UnifiedHUD等组件。描述在实际应用中,该组件应如何通过Remotion的Composition组件注册,并配置durationInFrames、fps等视频参数。提供一个典型实现示例,展示如何将动态数据(来自render_props.json)传递给子组件,并构建多层画面布局(如画中画、分屏)。指导开发者如何创建多个Composition变体以支持不同视频模板或客户场景。","parent_id":"3277c20e-4746-4309-b936-43eb912efcb7","order":3,"progress_status":"completed","dependent_files":"src/Composition.tsx","gmt_create":"2026-01-14T13:46:53.4495561+08:00","gmt_modified":"2026-01-14T13:56:03.2278166+08:00","raw_data":"WikiEncrypted:olSRviQUvb/fDqvwC8uYM3GORmJoNumJcpOVtN5oUl4zh3s1+NAcfhfxUsAQ1YWhL84pcOD04NK3nHTAbzqvk84ndxg0MQ3dTrC/rFJwVeexUDAhzX6O9KTqHlL1vWQYK1REcnsHibD9W0B7upPDrABby6HVsECR8y7z62S+gVtzZOXViu77Qe4dlDhLWdKmGFYwB3neq4UwPmU1ArLI9RWIHUwuj11Ol85RogDrwu4tRzOYRjeGd+Q29ygY4DyHusag3Hyz+ZLHJWZ/XhL1MWVfAHwRL/ZpUa4VLfM++tUx899/uCyWVC6xE6MOfuaj7EAmVdQq6mDye1k4O14E+0OaEabRG4OMp5h/J9SQdxP5XQf/bURpz7SyheAHsm7xxf1laYnt9eltfUR+CihlliRdwkXZoNBYYyS41JMiyIPdgyw64uZ31XsX9Heak9B7rGHRq8aJAktx8SE8+gKldG2b7G6ZZp9n8/c4FnA6RvZ56gQzJS3LABryzTeOOnbQQN7StfBOZfih862gKH9ZvcPsCBFGrWVo7G1M5rEeVYjdwSSBG020ezw+N3E+LNJ7ir3VmHTVL4D2derAfdSbBVAH/h0TXopWVrZ72QvLTbO0I5MqIJwUW/FYDxZ4pThsgTM6zZAQccEHegF2E/fnqm6iuyIFLN9Sd934EE4pOArRn+HUz4bvwyqBHPujJ6jmmD3DWzC01rSe8a8mREtGL8MEjf6YVo22xSAefAyPpD+lhZz/K3Z1rE+jGStrDJZGbobEyO538R67Img62nwZKEj3rIoahOQ220+svYfUc9a/wQtT56G9WaTP9GCgdfJmAwStFZWJhs6MaTRTRgix+wiYldI0jqtOM4MSpyUIwBWbYnJIP/J0CRFOz+OQCsr34OqAyTiahJIHkIJxn+v/D1O+d8J3mtyRIB8+Z4KyqZq6KU0mnII1JD3aWjB+e3Wr06p2EdR1KEJykVqwcNpK5azL8hPwC2PaHs1fHUgZRUiAp4ZmCsa5BIPeAPzxZC0UiAOrmL6y+VAeM/IrX/s72ZFrakaOCgOQrGztBCONosD/3mJC7q/McjPUJLKGVOqYCB3HEV+PHZEAQgcfFFfv2Nsat+iOvQErRe0jfq4gNEC/GaEoYiaGzR2PowDlo9i5dCjiV5vXfo6RntJaMEPfPwWW+aO8dUGjdHqEIpvvEcmttEwg4c4i6mL535qbb6mmIfZI9zEEAfwEqlMLfePbgIvSKn/ncfJgpRLp0QC+qOMyDzbLzdmgqATBtPdf1/tjEvXVSzOMRRPghfjTc0qhxgBp1RH57yNQWlug3ZxRyOIYDMmh9mps8vwD3ghKxZBHz/otHBQTU33M/dnZ+EvmHQ==","layer_level":1},{"id":"cee466df-e148-465f-b3b0-e7dc457aa2da","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"视频渲染","description":"video-rendering","prompt":"创建关于视频渲染合成系统的详细文档,重点描述Remotion前端如何消费render_props.json数据契约生成最终视频。详细说明render-props-types.ts中定义的数据模型如何与后端输出精确匹配,确保类型安全的数据传递。解释src/index.ts中的视频合成逻辑,包括图表动画(LifePlanChart、CashFlowChart)、解说同步、B-Roll叠加和转场效果的实现机制。结合main.py中的render_video方法,说明Node.js渲染命令的调用流程。为初学者提供前后端数据流示意图;为高级开发者分析时间轴动画插值算法、性能优化策略(如React.memo使用)、响应式布局设计和错误边界处理。包含实际代码示例,展示如何自定义视频模板或添加新的可视化组件。","parent_id":"563baa06-b18f-4c4f-92e9-78c9620a10da","order":3,"progress_status":"completed","dependent_files":"frontend/src/render-props-types.ts,src/index.ts,main.py","gmt_create":"2026-01-14T13:46:54.6970171+08:00","gmt_modified":"2026-01-14T13:57:24.1460919+08:00","raw_data":"WikiEncrypted:/pvGPLaEVo9VWauq2W2LekWR8Vbet68k0wKn5x8KfIx4nmRXv2GMsDfzg43rcKznlyLGIvlpeZWj2Zh5qQ7EmVya2/9y9/SvsdqOwtOmwG1/6n+q+Ez0WcLQtJcJWZLZ1O5ibs8FRutawMLxDmMYpYjDMX/nj5zxiBso/+BmFMRegnXRMxDuXgKIIPzHfKNQrD4oOlwnpH4EOOfcqWPuiS2VSjkHEglvZcKKhUAi2RGEAyzIy4kAnfj8inqD/PRywZpubSMaJP7a89f3ZlCYQXaHcqcXoiJdgEzkWdIKXn6VWH1ZSLexl99M5hplUM0vB48VwvjomRjhgQrXYy3IJuKaRHmAORsE+jpegTltcTh4jN5VskSeN6tnitq1P9KZIzfDr12QYmY+/bUf3G6IrCPvr+xUZkHAIY7jJEY9am+9auGq2KuMN2L79xtKma0XHy9n7HO6x6XOpfHWth0V2bsJKbVQxnXGB0e5aYDnvmGX//sra9w99MV1VvLmCYS55e+CnzFNPVhw16ViUCkkmjxReNAbN7DCqa4qkoNmWjG1+qJWMq6PoM5032TL46UyY+v5XU1Y0hvL29dol7chKwY1DRQ+cB4O4CJ8lAr84P1nkFCkJAl1F3DbYVmjA32MRJU/2aKCQqGuE91+1hMg1PDUz2U3leUqb+pNaPpEZa4opJD+ocJdVrZSmkfphYQzhvHjN0IYDVqW99IUMfy2a5Lt7C2dSIuSX1IQYUIWMJStFRbQ02gLDVUP7JfCTG45Eyu9F44+J0wbEMsSSQKKiUxg0UNXxL1mXIwkVTzwypEyh6RtxHPlhc2tsN4/NkTzTEts8Mx/mvMZC0BGMTpzSll2Qz99ZaXGgkhzZPJI09eR76/ggzuNIOmf3tV0wkdqvItCi6jay7vUkdXjBD1JmvRlCNj0n75eCD9SBahmd22Y2zcmpnQ1WX0XBzA08fa/xB2Aa6yuwcJGk06hpkYZIfoFfGhlYdMuLmyUh9fB9odOiTN/nZDeX1AIq52MuNIxNUtfC27fRCsBd2Vc4A914ObhUV8db6aNDf62ab9nkGKP1OjaOb9uu2XoD1MG+kYB3cGRTxdiKnQueM8YnH8hN8FQXmv8xmkfl7Cn3lj5BLw9ETrp5JCRsNdmTqaG60jInGiuuuTKQ3/kDa3JkVe3SaGZUwFyvVh9Dkt0N6cRYQ7WtBhJexUf40W1oSqrlmB9RCbmetrtVGimr7ebZmC6JSYJH4u9AFxd1Ln58/nv69Og0qHbxBIEzrr8VgiU0iCtgS7B8oz1SeT7PhpaDCFTFZyXjgh2bFobrMWwDn5sBZKLqIdT6E6H7pnxXH1ke1TQnVfQj1uiOWJXxZbnc+46swaWVFOgT793o9sHagQWX9vM8ylcaaQMmbbFwHxlm1Og43DPtd1VW81LMJuXv13cKgY+I6LCKCQjBbo6XUy+CxnJr9cVy3aQMWdKD6hH2i1cjOcOvVcTo6TgKEFvofhI6V1RovL+RGHJHZYj/70Ld/E=","layer_level":1},{"id":"d8a8c204-63d3-42ff-8feb-5521f58ca9f2","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"财务数据建模与图表构建","description":"data-building","prompt":"编写财务数据建模与图表构建模块的全面文档,深入解析data_builder.py如何将原始财务数据转换为可视化图表所需的结构化时序数据。详细说明现金流模拟算法、资产耗尽预测模型和年度快照(YearlySnapshot)的生成逻辑。解释CashFlowDataSchema和YearlySnapshotSchema的设计原则及其与前端Recharts组件的映射关系。结合代码展示数据插值、单位转换和异常值处理等关键处理步骤。说明render_props.json中charts字段的构造过程,并提供如何自定义财务假设(如通胀率、投资回报率)的配置方法。为开发者提供性能优化建议,如大数据量下的分段处理策略。","parent_id":"f88446ca-8b48-4cbb-9145-8a4d91240442","order":3,"progress_status":"completed","dependent_files":"backend/data_builder.py","gmt_create":"2026-01-14T13:46:55.0563664+08:00","gmt_modified":"2026-01-14T13:56:10.6599213+08:00","raw_data":"WikiEncrypted:hg9aKe585ITpSZbh1AL30zZ5OQGXmp0ygALKIo4WAem5Q41wOSacrQ99ksJ17Tc/B2F56Gj4mp27rflZn9u7UqE+4cljzm2qpF1OXJlC+fMy4KuvfXGbc4lmzEte8yQtATZj1l0w4d+1n/pElCFZKd11DYi52aapVt+XCJXbWCIt7jjqwkJ406DxgPOEGfFcd7JgwIr9H0NMtrsysNE6HVjEvUHpu5IPxUaW2fCNj86gExhuGaIdOYT4Ef/ze6Ij0fHeaTqMhotiQq6AYzm8XbcoLMEf+v5ShSk9WzTCGsSgfedXY8m2BI12RToVpk9ngdj/Jd115dCV8VY0VhgyPyYVrDyTUpKS5GZ9UQhDo53hBQIME4fqFhsAJPuezCDYc0KEoDXxC6lUsv6xQKcV97fxfBk8nH/ZvMInji1Tfgblsq+o78NwJQDSILICOzPayEXUU62Sy1biGsXZpijE8Ewz4PzKSXw8e931FrwK6Cm9mVbAYwMor1el2A88iF8eiBGT9wFPbqUo3Oa94oNJvqRtkPVWnolIs13NJBE/eViJUKw7wydLoQvQnsSt3fXz5/jC6YxX3lCqEosG5SmYG/lhKh5i5MVbnRs+sdzqu/Csy88acwBCfy4xYMCu9LgFuIjM/nh0rDXLCTNm3+mINgT8Rl4AXd3H1F5MZm9cn4HLiuwm7e/18rNDxDHU2/8jXM8V1gooPnBgzXCVNmuldag8SaMA9utHomOqF32wRj+RCqnIuaLOoPK9iZ7DxEFIWya1F33tFCVRZC4WAAu1ubzTcCkQvJIwv2MUmSoeIzmZ/hxmJmOqtWkSYeD5pzdSPqVQWqDYzwp2aSuGqJHJFVC8OlfXSKsxT3am7qyKi0gAr6460sWmnZ7EJ3/lNR1hoksVLHiHDNk0fPn/uUOFmiGl792t05+uwq317ADca+WNB6/OROB9k4HURbuBAM4rIKGHz41XDoPU08X4ljtRJQONwZgc6pODzqlmehCpsG2xCLl68SkonzGR+dH5ZxKgIVtaZcgQ7XUkKtKL/Zk11F7v6usaxSThaQ1M7aEZKYQ02duNqvp53xiQMa8CVY1h14RlU0Z3RqcGvlmMkv6w0TKwngflducs5t2ztFKfBOO6jJGwgtLzSXoIDc6FOUiSDQBxuoHItbOwzGVxhyOVWw7wmzpZW1kumB/WKL9LDW+gl+JqLahR9GGQIerwgrblJRmcmnWZOn9RStsbYq2hTrPnhJO/4g3dGYkE61d+IpQ5aos+kc+109NaawgWLNFNz7O7St0RIzkLsx2gZyZLqwvy1QUFWiTlx41nu4YBAlzDz24wPLxrWMVrZLFTOpT3p8OfZ4lWJtw2XNPMxfL30w==","layer_level":1},{"id":"c7202979-3dc7-4e1d-b9dc-6ee608bb852a","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"数据模型与契约","description":"data-model-contract","prompt":"创建关于核心数据模型和系统间数据契约的全面文档,重点分析RenderPropsSchema的设计。详细解析render-props-types.ts中定义的RenderProps接口,包括meta元信息、charts财务图表数据、script脚本段落和assets媒体资源等组成部分。解释YearlySnapshot、CashFlowData、ScriptSegment和AssetCollection等关键数据结构的字段含义、类型和业务逻辑。说明Zod库如何用于在运行时验证数据完整性。提供render_props.json的实例,并阐述该数据契约如何作为Python后端和Remotion前端之间的唯一通信桥梁,确保系统的松耦合。为初学者解释数据契约的重要性,为开发者提供数据结构的完整参考。","order":4,"progress_status":"completed","dependent_files":"frontend/src/render-props-types.ts,src/types.ts","gmt_create":"2026-01-14T13:46:28.8368832+08:00","gmt_modified":"2026-01-14T13:49:37.1995387+08:00","raw_data":"WikiEncrypted:klcgW2PbPxJambbKMzvFt0QNhIu997Uzwr3eDRtxxcw2LfqopDddcA9rYCW0MOjApJfqIliTwkQ7mRMNwf315f3LPbk+KNbIROuvCe8cAMzI93DTsVcFh6enKbS+mg76HBfhU8U1rmFeqOetXVMOME9YqPiKcbIWhFKecV99QfEkKEaSrqYF+m/jorEPyuGso4AuOfAGU4iSwS8XJiR7kl3zCFoEDGVv9vzkjHBe7CKrDwKMX1NH9l9B/mczuaq8hVpJmIyRLZrrN/eGqUndqDWA7PUgBPf/T8TeEUHb/3aR2MoLBiyTA9XcT3RbomYMMZyimAqu812J3SuvulfOv954cTjxyrXhOW/1YZ8PXfDpypaXmOuajypfyWicMDFMvUKvAf0+5Oq7NJt97QSCg2UU23yLV95t6SxChAnzz2H1go964rwCteLYEgPZP41cIXdouORaPfvww9Uo9ynjUf1mbTh4rU4A8eMoisTwCVgRqQPV8MaHmpeAmsAjUcen9wDZ7QY5wkiAiEIyrobK5BBkpc0kt2sij+JmFAZ+SNV8rLLUXyjHTwBUwXrnuJj0d/6piUwgdmlM715uzNaAIrF+Inzk37zbdlUUhyLhcCPojSpr3v2pQ19Xu4oj1BzdQ1wIjouUG3UexYIzNZZYIy/am02k69TEKGUZlddFNW7ZtvtURqLCT4N4YG0WziXX8EsH4TDRDmdeIgA+fsefHndJMC2mFeVZp4REYK+Pz0tr7GozYPFv8ZmKVC41k5FzzqBpSYFUn1TlPqJhvKM+Cr300TrxmdMUgc8Uxzh+O2muyC7921QqJ1I5IKgAJtqnKjqs5WDISASTLjQjmWsEFKOW2aK2jH0Nh/rjsPBBY2aADTg0eGSkBhzsQ9+8rjlJ7g1/rGwuYbs7eokwB8BhnJM4S9qJYMyzNLp0wQfSmvXoQQmjMqgB7yY0F9GzzS2WyseT0gv/r4IZeUaF5OWj3y+y/JsOgMH8Ee39BjzTJ9ZJ1A7DA0kkyHFeFLcLHKvjZ2IDu+4Okk84SIktlBNhd/NPr2mUFGSh9s6zhq7zQxZZIgPJVeZxWRKEHUH7LoBi+NYzQX55vHQpte20cw5d8gKOOP2vDrEstzRDwpUFn3d2IhxrDg/ZENWm5R+n2arzxzS/5Jsj/6v6u5pMGWpY7rnnFD1p7z2TB+izC5LK/IszGJkEwPmGS2h/VOwdMNYHC1dk4Hc5bVGSW0PzgI+Hs8qC8rO82abmeJTLhuAjsqvmMTvRwgH5cYxpw0xEDkSFjS6dgbtv9DmwcQ49jhRDZuYTyOmrDP2AjGaJuMkTNNFvEBDi3cyR5DxXAnsmWpBMHcavuGN1D3XZGelgwFAiC3lRgfVe85UBm96JvcXKMNj3+Vn+z4DKRdMg1j2SMjmjZHo74h7+VrupQsLXW5L5Dg1TLOewc61wkGXFYp29QiC+s+s0mAh/H3v6ta/u7Z40Kf+aeVpLE5UaQgRHm4g1Cw=="},{"id":"17178390-4c6b-468d-a4f9-c1ef40647889","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"视频渲染与合成","description":"video-rendering","prompt":"创建视频渲染与合成阶段的权威文档,系统阐述基于Remotion框架的动态视频生成机制。解释src/index.ts作为渲染入口如何加载render_props.json并驱动React组件进行时间轴同步渲染。详细描述RenderPropsSchema的结构设计及其作为前后端数据契约的核心作用。结合LifePlanChart.tsx和CashFlowChart.tsx说明数据可视化组件如何响应式生成动画图表。说明音视频同步机制,包括TTS音频与B-Roll视频片段的精确编排。提供本地预览、分辨率配置和渲染性能调优的实用指南,并讨论如何扩展支持新的动画模板或交互式元素。","parent_id":"f88446ca-8b48-4cbb-9145-8a4d91240442","order":4,"progress_status":"completed","dependent_files":"src/index.ts,frontend/src/render-props-types.ts,remotion.config.ts","gmt_create":"2026-01-14T13:46:55.0566287+08:00","gmt_modified":"2026-01-14T13:57:33.3688619+08:00","raw_data":"WikiEncrypted:/pvGPLaEVo9VWauq2W2LekWR8Vbet68k0wKn5x8KfIw60tHPP5PFNMUOGUQZPnsvoIsO7TgShlVCDOCwJuVySDDfAH7X1ecUbSB6VP8LeNNyg7JK1DvhHKZzf9BgMnAKu4QvfWzdUJ8c8Uc3F+LTwzN4UqmTTvS49fh/0rQCqGRD+J2K9KYYRsqekflaYQ4PbD74H04ICv1ni7btT7ujIE2d+SPudSbx4M8lziHeUqctHG1TCHa1Zt6D73ebPyZtdn/pjQfsiDY5hIJlZgUv6wzp+07LEQw8m+mZI1Thg/txs7lsaJBlzofwWDFuJJn0hJ++sXjN4Y6UkedsHLrnZWstohcc5siYI/qJLQoAYyl+t2j/cDPo0t6aAIb1Wi/i74l7RWTMB1FBIlHBJuUvSvg4LIvwSDer5ZEzCyPACpEK/VhnKmxYYfZH7ALq/GCxaM97v0eIm+j+yXlUmlHlpG983lDo8OPPKWVciHCWJpUNKjC/5/NWkuGM034oe2jmlHnFsZY8qfTyon+v9A8ffdZXCAYGptjL3AEiXdT9f6o/o5vQa5gxv5RaPOSDlUWiVoJ8VVWIpGB8po63fykUbw5DFoVHIT7+aVgiB+0pdVM2Pisp77i4eDlemQ3jusHm+xG3bb/cmvzMo+oZHzUtbcbsJruM1HdLibgKF5+Ot0alZ3aZnPImYb/ROk0pQwEuTMbYZi3cRB2cT4vSnf6WI8zXDFgoRxo8OFbeaS9V9FEDdJ7PnKrfYSk8vOD2ZcgJxqw9qbmQsjREjsY84P0l3zDH3ECcVPZqvXucu5TbXYJI6HPIdcjpU+ZEb3oL/iGAiqoh6S6Odvgc5cikKmRcuJqp5Izu36eohMFvwCDBGgeVot1/kmaaCxGZx74GVKxnEsV78bXYDriyD+93v49RBDBfwYYUdAjlTsG4W1ok2SdU6z8OeMkVF/ATpR4M4VhsbxCUkpgkFMP+OWKjJyw5HWOBtY9gFSxaO+2QGy0xwfGddr3Iwlf2CdPyVAuO9V68u+K/H1PjVEEwKgJjeAYEgllM+XUYAiqHjzK07jcc6pxpX7QiO/ISh3LHHddYJa6GqMf4sU/Wql1yt1fuNuiVRbFSdANRwJkwyqHDbOGPnhmFWryr495fs9/agn6M+aukvvibgqzA4+puv/pz+DIjMs9pj7ftuFtR2zvAj3soG8mth6FuPj+UGTer1EeWNfPUBfpJyOfp9qFDhX6vHfzuPI8F2BBwdckJMEmsELpoWBKUwzWquUsO4RmuJZvwfyelFV30qBPvgJ0EBmxUb9GIS6CqnnaiA+v/FB03IsOrDANpZytwCg635eMfO+PxtiXu+bnUdxSAoK36y7ATnszSlC4qQvOg4aom93tVp9mOhUk=","layer_level":1},{"id":"3277c20e-4746-4309-b936-43eb912efcb7","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"前端组件体系","description":"frontend-components","prompt":"创建关于Remotion前端组件体系的详细文档,重点介绍用于构建视频画面的React组件。深入解析LifePlanChart.tsx(资产消耗图表)、CashFlowChart.tsx(现金流图表)、UnifiedHUD.tsx(统一信息显示层)和Composition.tsx(视频合成结构)等核心组件的实现。描述每个组件的视觉设计、动画逻辑、响应式行为以及如何通过props接收来自render_props.json的数据。提供组件使用的代码示例,并解释组件间的组合模式。为初学者提供组件预览和使用方法,为UI开发者提供定制化和扩展组件的指导,包括样式覆盖和动画修改。","order":5,"progress_status":"completed","dependent_files":"src/LifePlanChart.tsx,src/CashFlowChart.tsx,src/UnifiedHUD.tsx,src/Composition.tsx","gmt_create":"2026-01-14T13:46:28.8368832+08:00","gmt_modified":"2026-01-14T13:49:57.7635114+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsBQkxmdK9VEWEB6rlQ8V+1n3+8ehC1YI3uvDR9AKl6JkcYRMdUE3jvVBOrOpE54oWqQcTwwcugGXc9n8kPAlzQP8EwGzpRsdWgvWbw3xY37VGV/u+Shw2K06wgrn1VEsyaTYsu7oXHQBzEaobNU1BIL5YzWrLAKBSV8O92XGdG1FmZrt19uCg1NWN8wY6eXhAtuh+I3DLm4NxyGRAb0DH4MpuPova0AVaP6dHvA34lryuMP/eG+sWjVTEakSRDECbgEV4f0WkIZb4NslymXLwg0gpYpSaXuhZJXpUGbR2Ks9l7zph63SyjssJaLdH0aDy1S8p9NXmrHewNiWw4bHXqUTHyYL5MCbiknbf1304Fx88m4epzHZSOqm7pgaDPuHXnvLaiMWhepk55JpuoV3xzcc5cBSRYe4NI/66XHJjLTTm/87xwhrBNO+TnX7pflhz2r3tG5qQBSIK5HrfP+vhsaDqSpmo/QZZoNyNa0ReVDCcpDh7W8I8yM/HtcjiijKB5pnB+8BKt3e5rZWl4XXu2++0+zyYdDqnBaTIKlEmPTXQbLI4rDGH02Rrqvd5ToGpFVWULIIQRukUmNHm8cs28R6OwlAdfS40o96w7Rs6MemmlZGsPGWLEQCEpqC5mNnfmcAVN2ArBpsTChmN5Q7xegQry2lqtuiwbXgVe2AaY6CYdR/Ic35uShvGGy8RCW+vZ1/uWUWZvo/8kIrj1FK7rf6r3LYP4hfKcP6HdODt5dX6hzeiJ27Pvpq3TcsNG18PfidTcaPS4jObFNuXst3ADY2LY2bgEUhm/lWxATxEjLeE+8Xku5H8GB2QllyKpic95xVVdi9Q9xIVf/aSf/81hywGKxHxSqrv/BGdi8N0iR1/DaOjMcoJbvS0VND5KeeVQSgpu8fEQLlcScI0R07ygL+iQFYOPSfKOU16XZe5PvYL7f+NTqc0osN1uRqrJtPxaU27/XWp0kwIr9RRJ/5VG8AQ7LEzamKjhTgHSi6EJLeOups94YJpmjpcFD5TG/jO05N6nsRUCexwcum6th/OMc4/sxkNS+88zycLVrotu4Og0YsgoJPWQ4WBr6PvH14kFTQtLQBj9218dgE/Nr70RyjWz0T74i3j5ec/TU9Z2I36XvJ6cc3Gp/MW/zMvu2u5FbAiZmnQMvtCRVxlKjh2hzftTyUiIOXIfOvASGW2Q7BWhYh4T7Cmcxt3u1iaQk2p+KpVb4/RuaStAzXJNKoKd4ersppR90dGvuiqR4UZpDuMMs0F6kDmlZDGBhlYdErjyQb9STbjZIOlnb/3q/l75RW31p1vlBkpQ+SbzUbjB4uQE6xGouvXXNVqxFSMe9+fxCRuayRRSDPIlAUH6xM4+wEGpjn1eoWjvg6Fa9iqlqO"},{"id":"c58bd467-781e-4b79-b867-32403b172e6e","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"配置管理","description":"configuration-management","prompt":"开发关于项目配置管理的全面文档,涵盖所有配置文件和环境变量。详细说明.env文件中各个API密钥(GEMINI_API_KEY, OPENAI_API_KEY, PEXELS_API_KEY)和财务模拟参数(DEFAULT_INFLATION_RATE等)的作用和设置方法。解释remotion.config.ts中的视频渲染配置、tsconfig.json中的TypeScript编译选项以及requirements.txt中的Python依赖管理策略。强调配置与代码分离的最佳实践,并提供安全存储API密钥的指导。为所有用户提供清晰的配置清单和修改指南。","order":6,"progress_status":"completed","dependent_files":".env.example,remotion.config.ts,tsconfig.json,requirements.txt","gmt_create":"2026-01-14T13:46:28.8368832+08:00","gmt_modified":"2026-01-14T13:50:08.0416991+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllPgfgMGT84WysP5aU7jVGgMDPSKvWZp7xsAQzGtWF2TB4Rm8ZVH4zR7QDXSHsvp7GfHmHdtQbOsTkI9S4DawmJV7CoYRbJ24J2Pcv5B5qSW0jGZ2o2GqqyiZ9uy/tjoHOtoOAOYyevB2SU5Bvy3ueMy4P/YpFSnVraTGooVZ98+qICEtzP37TKFqcRzl7z2yKeCKXjN2SQjBxFJGSFOqnc/vIEEbz+N65rayVS+nJ6zoP2eYnCCOLq70npEeE+gjZZKpZjPSyYMtEdHpzZjYe7UVVGJTCtFjmNY8pE3QvWFXYf88L6MIoSoXJoWbmqGmu3fjzskHdEUB1o+YbJUIF21POUOZRujsxqXhyiYYbsfnRN8nE+bmsICXZtb73Jh6mFkAR7Nye5DM/R0aJCKDZmOyE0PPhm2I/MQQPole0tJJuIlGTD2s5j0OIejimD0EYUxBk8rzljXK2sIy+9aoVUdK4cBoP3Y0ptLrfnpC3c+WEhLBunY9m4TF/A8Ze+lFZj9++LjsAgSzaToH65hpnavK4RXZauyz2w3j1kLLA/d6tH+8wCRmBL2/mmo9jTRD3QPe6LNy7jsMvpT9BOy6GEOOvIzOOpMLif3XZAtq0wIobqbNIQvk8FE0y8ju/7CaZLRWZCkNc5sLMfa2Rccf88gUfgTuKgWId0kA+Q1R2mKxqx3mrhovPlRW+2iU9PQONezknksnSMDGr1RGlsCZ2SHrABTiMX3T7sg9UfqinlfKbcMCgIGh6jGFVcp71h6KalXjVywOVBKWrDbAjINJHub7+cLRkgkNmyJi9zeUgN9pKAmy8gH1PNdW6EQ1GXEFUj++TGf3fZSmOcDWOi3w4/us1VmRDG98pBRk12sfyS0TM0+JWWC7K2tY8IKjrZVtwEUwvV/h6Ovj3XPqWYQyh4MULADzEKYkX8T/tJBcaKnRpehJRskGqZqNoT5FhbZMSfFC3H9tVBIDWGbE7ARCekBFPm8d/LCtV/y3FiQwMweA3V3dLQTA07inil4d01O+aqI+tJrKCmVcnARIDm7ur5rKiWpbT/XMw/J6OCzz46VKhvnTKnensIKWbOK+Z7nqz4teY6To7Gr+giA05SPrTl5TIneJ2DhzJmFhVrdlulXE/CVduiPFkuEr5fAhbs3Y+6rhRC4IMz8o6ndg6+Eu0Lw8nUgVRiloyGPpfoZdi8jvsLpOppi1bEykeGdBacs8Esfyn/uw5y4PVtbgAeA1PF79bwJjCAlULO8H5qSyKkmIRawptHRpOd48/OB43MZSuDMLskcfCYJojzGhfk175W+TGvH9xqFXUd2oHC74zq7A"},{"id":"0e5262c6-272a-4083-bf7b-d8cb73cae79e","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"测试策略","description":"testing-strategy","prompt":"创建关于项目测试策略的文档,阐述如何确保代码质量和功能正确性。介绍位于tests/目录下的单元测试和集成测试,特别是test_video_cli.py对CLI接口的测试和test_video_processor.py对视频处理模块的测试。解释测试用例的设计原则、如何使用测试夹具(fixtures)以及如何运行测试套件(通过pytest)。为开发者提供编写新测试的指南,并说明测试在CI/CD流程中的作用,确保后端逻辑的可靠性。","order":7,"progress_status":"completed","dependent_files":"tests/test_video_cli.py,tests/test_video_processor.py,tests/fixtures/README.md","gmt_create":"2026-01-14T13:46:28.8368832+08:00","gmt_modified":"2026-01-14T13:50:36.6724434+08:00","raw_data":"WikiEncrypted:a51tw9+B5Xez88YuZqi4cPV0J1CJauHTZselAZQ9sG7l4kxIBXkREciZA7/pohakdE3sC1hkisnzN73PhaoUxWg4ROKfZ3A3EmQlUVX8IRwUf+pH8XLxFyoqEBWSnBCxX0nbUioH9PWQY0toOmNKTN9ITN74IXQDJW3eptTMjoFEL/Nvo3gv4NsKI+/Q3Zb7Emyrcbq2N6AQ5BisSWlh14I00Z05Cjn/ddul6PWthxOY1usTbBMDIFCGpnfBe0R/GnEObuIl3AuSDAv2CNKijMtJ918en9GNegcbagGrQUvRuzJd2r5EJNP4NvjQ4F4dx7SVN086pPJqDZfbrbKp48FHH+khbeXAzza1Kftjnimnel74kn/WQV2CzeVAHbZTzQbQDk23dzaL+w3et6UO7NfMKbTZQIwq+93yV8H4Qaem7plG+w8l3sJ5503xfD7YQrlwlG0eHK3Smr5GIasjDNPgNISciXpnv9LI0sZigXmX5ZAl2UXYZEbKPTA2Wy0xaANj5ULsaZSRTQTXPh3zO6NC8iXGc+m/yYJKfLba4vOVLOvANC1bvMwPRzKjTrBQwmoYSZFGxBENbJ48g0+kgydauiB1ERcF02xxcLUlJwwanl3i/VzMdBj/gZoPFEFW6axhMKRn+/asUhkOnS2FeTZ1RlB8V0Csk+dj5iuiBsacYLXNo/7iqajcn57OehDsjxJKp+gOcpRiOAriRtlDrGc1rBjHCoQcZSNP4w4bI8PioWB39R0f0epgApM4qzI1v1LVydvCcvhX2nPmdFE/7YXKCuN9+/jrTMlsl+sO8hUO069iq7i/ixcCLnuiRD2H4AgA43GHAWV/E6WINVozESsjV8Bi+qIKWkTH/UAzmFmGcZvl8Z9pEo0d6JkJn/iMWiUwUrnuXVANYexRZ0ECon9hREWEjwC6ZBwIJ3fhwlKGr3SsIy6hj5Gj05ocOyjC+XtaIlKexaBdwYmBAv3Hx1NKroI2dJyPnVl4Axdm14IHDxyYlD4K8LbtMIig4vzoYhQd35zgJM51hK20l1xpwwNSGRfu++a6mhwl0QIzNFiuUNM3+Y65d6t4yOkou5PDfhJt3dbwTJa3hgwSIeL7VA=="},{"id":"dcf9b1b0-011f-4eda-a285-87e849309daa","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"故障排除","description":"troubleshooting","prompt":"编制一份详尽的故障排除指南,解决用户在使用过程中可能遇到的常见问题。基于PROJECT_README.md中的‘Troubleshooting’部分,系统性地列出问题现象、根本原因和解决方案。例如:‘API密钥未找到’(检查.env文件)、‘视频渲染失败’(检查Node.js依赖安装)、‘PDF提取失败’(检查PDF可读性和Gemini配额)。此外,利用verify_structure.py的逻辑,提供关于项目目录结构完整性的检查方法。为用户提供清晰的诊断步骤和修复命令,降低技术支持门槛。","order":8,"progress_status":"completed","dependent_files":"PROJECT_README.md,verify_structure.py","gmt_create":"2026-01-14T13:46:28.8368832+08:00","gmt_modified":"2026-01-14T13:51:10.842959+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0hGGy7zXJE5t3XZJK+9x87Wqy/1Xzi+22LbOfczFZkieMj5WEpLZAHMOxW2WrQJBBP2jOzAFqsnQL5HrCZFXxGIdTyIUtbSumxquCO6BjewhiiWtS8ui9KptZ9vx9s986ILyqQ0pd+J5A4p0hBthULibMBHYrlBXyfKTgk3BFmd5Dv8Ei+ltLi0vF6+hOUAZNeXGRCWBI1zHfTqVnZ/Qc1JCX8lvCBXXNbl2CsHO72Jz1GgAH3vb26DA6n7hRx302D1JGV1Ql0sunvNHaWJkjmdVfHddnQxdlLXGBKZV7jLSZUmEKT4Yrw8idL3dX13Um+J3V/0PPaTL+JCG+lAEKcXQpfdgwKR/bz2a90t4sQIfTRHs/VjV3uqNkUCjeYoFJOfkj/KiLzzUGA87HiNzfbWmGprkmXNz4ZfNfxa/WW2ZSWE3gNagilF9/WI3gV8z06qp+jQa0mSWyS/rN5LT8gyKrmlgDNusS7iEm/DhZ1aJpACcq7Yvi0RR0UaUXJKBajNyQ7UwRi3qRmuYqEl6Hi9rO+0sqhK1luPYUUMVG+Gfzq9+tLLUewpftDDXSScz0u2nEwUduNJnrNSb618vD7uBlaQa30WVHoS7Tr91tdBi/KakPHo5XrAtJA1pmvgfVocKV5na54P4EzUGqhG4nrO2iu97GKKeZuyNzvkSySO/szoi5fFPsDP20kKmcxtw3spd8PViG3PJzQj55tXYrV8FWXNa623HQxf4nmxEv7keKoyNjre4XGSfA3gUmIW8iptyo1Hw5LQgqwgFX1MxwoGVJb+aYPCqwsdxV1B+y6T6f2CuFOYuyP5myCVGBWzeRXuXauLdt+5ypHY0ZNgYAWwPu4FA+eqGFAGmHmooSwS8+tvwNry4czIKKg2mbAq+faBG15o+ybA91gpyPFokoJ+/7jxiGKg65dhoxZA1p/ydLocHOYoLLPkl230XY4/QO8r4VK+S5Rzims8PbcSzxouGmOTgAea/yenRMOsRE8XQwdOo3JOGyCZpiTbWN2xBELNK/gqR+f4fVub3aq1gtD5rNn2a3ZUi7lxdY7t84f7A3r0fDrw3rhGmY3FSEa7PhmNQ/tvSBs9XLyGOIUuyWQS3wIiOYlCNcEZO5ADg15IipNvn/rHQylkMqNNRtWt6BQ=="}],"wiki_items":[{"catalog_id":"019ac0c8-0912-49e6-80d5-80d5c957b08d","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"ca008797-18fd-4c44-a85d-cfce1c6209b5","gmt_create":"2026-01-14T13:48:15.6853789+08:00","gmt_modified":"2026-01-14T13:50:46.5572136+08:00"},{"catalog_id":"c7a0406b-803b-43ae-93f8-716f315885ca","title":"快速入门","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"d1ae4ebf-33ec-44d3-b6be-1a8d45f0110b","gmt_create":"2026-01-14T13:48:20.6563403+08:00","gmt_modified":"2026-01-14T13:48:20.8318694+08:00"},{"catalog_id":"563baa06-b18f-4c4f-92e9-78c9620a10da","title":"架构设计","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"46b801f4-309d-4fdf-8069-ce2a858d6af6","gmt_create":"2026-01-14T13:48:39.385776+08:00","gmt_modified":"2026-01-14T13:48:39.3874771+08:00"},{"catalog_id":"f88446ca-8b48-4cbb-9145-8a4d91240442","title":"核心功能","description":"core-features","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"95e101fe-02f3-4509-9857-eea13e6dfbfe","gmt_create":"2026-01-14T13:49:04.3120695+08:00","gmt_modified":"2026-01-14T13:49:04.3135085+08:00"},{"catalog_id":"c7202979-3dc7-4e1d-b9dc-6ee608bb852a","title":"数据模型与契约","description":"data-model-contract","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"644533c1-355f-4bd8-9628-2c8bf05caa24","gmt_create":"2026-01-14T13:49:37.1961932+08:00","gmt_modified":"2026-01-14T13:49:37.1995387+08:00"},{"catalog_id":"3277c20e-4746-4309-b936-43eb912efcb7","title":"前端组件体系","description":"frontend-components","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"ac528719-8a01-4335-92b1-05f556f6179d","gmt_create":"2026-01-14T13:49:57.7601252+08:00","gmt_modified":"2026-01-14T13:49:57.7635114+08:00"},{"catalog_id":"c58bd467-781e-4b79-b867-32403b172e6e","title":"配置管理","description":"configuration-management","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"4911532d-ba75-4ac0-b6aa-e118a704ad3c","gmt_create":"2026-01-14T13:50:08.0400352+08:00","gmt_modified":"2026-01-14T13:50:08.0416991+08:00"},{"catalog_id":"0e5262c6-272a-4083-bf7b-d8cb73cae79e","title":"测试策略","description":"testing-strategy","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"a409c6e8-de2c-4950-9313-df0a646d9a16","gmt_create":"2026-01-14T13:50:36.6702102+08:00","gmt_modified":"2026-01-14T13:50:36.6725238+08:00"},{"catalog_id":"dcf9b1b0-011f-4eda-a285-87e849309daa","title":"故障排除","description":"troubleshooting","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"7a7bd094-0a10-4aef-8645-413fb6b9da70","gmt_create":"2026-01-14T13:51:10.8406917+08:00","gmt_modified":"2026-01-14T13:51:10.842959+08:00"},{"catalog_id":"9f93b8be-210d-4bfd-9b6b-9823a477568c","title":"数据处理","description":"data-processing","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"3503d322-12bf-4a2a-a06b-6956aa47700b","gmt_create":"2026-01-14T13:52:03.6919356+08:00","gmt_modified":"2026-01-14T13:52:03.6954253+08:00"},{"catalog_id":"0a34027c-ec60-4e21-8d52-ed31a7d97a25","title":"数据提取","description":"data-extraction","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"70469ec8-ba26-4bc1-a8fc-fe425ba69fa6","gmt_create":"2026-01-14T13:52:22.0747049+08:00","gmt_modified":"2026-01-14T13:52:22.076666+08:00"},{"catalog_id":"56f8c573-425a-492c-aac3-286e8db478fd","title":"资产消耗图表 (LifePlanChart)","description":"lifeplan-chart","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"f569ba72-be2c-4175-84ff-f418bff53572","gmt_create":"2026-01-14T13:52:24.5437196+08:00","gmt_modified":"2026-01-14T13:52:24.5567208+08:00"},{"catalog_id":"ba905076-a32a-4f37-9489-88c222349d45","title":"AI解说脚本生成","description":"script-generation","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"c4e63dde-4c30-4970-9dcf-f3312c2cd099","gmt_create":"2026-01-14T13:53:26.4558494+08:00","gmt_modified":"2026-01-14T13:53:26.4578206+08:00"},{"catalog_id":"e8641f76-c37e-44d9-95bb-6ddbbfbf56d1","title":"现金流图表 (CashFlowChart)","description":"cashflow-chart","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"746ec961-7070-4dc7-8307-33802395d460","gmt_create":"2026-01-14T13:53:35.497624+08:00","gmt_modified":"2026-01-14T13:53:35.4987338+08:00"},{"catalog_id":"0842303a-d277-4788-ac40-881553f75f28","title":"AI生成","description":"ai-generation","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"a7da7e1e-fba6-4612-9469-6b882a86acf0","gmt_create":"2026-01-14T13:53:37.0945636+08:00","gmt_modified":"2026-01-14T13:53:37.0973361+08:00"},{"catalog_id":"ae4557fa-89d1-4f40-a6ff-30de3ac18964","title":"B-Roll素材获取","description":"broll-fetching","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"4fb911fa-b070-4817-9e5b-c10e19e10e01","gmt_create":"2026-01-14T13:54:45.3263494+08:00","gmt_modified":"2026-01-14T13:54:45.3294077+08:00"},{"catalog_id":"fc1f874e-373b-4658-9011-f8fec3a02e00","title":"媒体获取","description":"media-acquisition","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"ee54e1b2-9849-4ca0-9156-63c217c33f12","gmt_create":"2026-01-14T13:54:51.6501625+08:00","gmt_modified":"2026-01-14T13:54:51.6529531+08:00"},{"catalog_id":"bc6e9bf7-2d4b-41ac-a0aa-6b17be4004cb","title":"统一信息显示层 (UnifiedHUD)","description":"unified-hud","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"6fb127c7-17df-470b-9c81-0a1e0962d1dd","gmt_create":"2026-01-14T13:54:52.173377+08:00","gmt_modified":"2026-01-14T13:54:52.1823122+08:00"},{"catalog_id":"75415347-4bf0-4b58-8790-8290299306b1","title":"视频合成结构 (Composition)","description":"composition-structure","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"2e505aae-b61a-454f-8bbd-22e574273933","gmt_create":"2026-01-14T13:56:03.2250024+08:00","gmt_modified":"2026-01-14T13:56:03.2278166+08:00"},{"catalog_id":"d8a8c204-63d3-42ff-8feb-5521f58ca9f2","title":"财务数据建模与图表构建","description":"data-building","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"b8f1357d-c635-475f-ade6-d658a8d35681","gmt_create":"2026-01-14T13:56:10.6577533+08:00","gmt_modified":"2026-01-14T13:56:10.6599213+08:00"},{"catalog_id":"c94015a8-5e41-415d-a1da-92f5bd313718","title":"PDF数据提取","description":"pdf-data-extraction","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"b5cbbc42-9bb4-4f54-b3e9-19b8cf9ecdbb","gmt_create":"2026-01-14T13:57:19.1797369+08:00","gmt_modified":"2026-01-14T13:57:19.18201+08:00"},{"catalog_id":"cee466df-e148-465f-b3b0-e7dc457aa2da","title":"视频渲染","description":"video-rendering","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"51b08b3e-9ac0-4041-8f9b-96ac121b7cd2","gmt_create":"2026-01-14T13:57:24.1431405+08:00","gmt_modified":"2026-01-14T13:57:24.146152+08:00"},{"catalog_id":"17178390-4c6b-468d-a4f9-c1ef40647889","title":"视频渲染与合成","description":"video-rendering","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"b7607fa9-dc73-44cf-8e2e-3ed5f207057d","gmt_create":"2026-01-14T13:57:33.367733+08:00","gmt_modified":"2026-01-14T13:57:33.3694299+08:00"},{"catalog_id":"992c8cb9-2047-4059-b273-61d257ba0383","title":"数据契约","description":"data-contract","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"8bc851cf-b45c-469d-bb91-924dc2744d4a","gmt_create":"2026-01-14T13:58:08.4589002+08:00","gmt_modified":"2026-01-14T13:59:07.5270376+08:00"},{"catalog_id":"cb84c2dc-1c51-4118-a472-1770bebcc52e","title":"视频数据提取","description":"video-data-extraction","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"04e01b72-4d25-43c7-8128-751ee25d4792","gmt_create":"2026-01-14T13:58:27.2787197+08:00","gmt_modified":"2026-01-14T13:58:27.2815749+08:00"},{"catalog_id":"d57d34fc-9ed0-4994-9dc3-ed3d8607c2db","title":"图表渲染","description":"chart-rendering","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"34214d3c-6158-48bc-bd12-d799b73f6f95","gmt_create":"2026-01-14T13:58:51.732391+08:00","gmt_modified":"2026-01-14T13:58:51.7346595+08:00"},{"catalog_id":"ac1936fa-1ae6-495f-8467-f89da2972fb4","title":"视频合成","description":"video-composition","extend":"{}","progress_status":"completed","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","id":"657bbb24-1acd-43f2-acdd-e6d2b4d98523","gmt_create":"2026-01-14T13:59:16.7269684+08:00","gmt_modified":"2026-01-14T13:59:16.7286294+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n# AI视频人生规划项目综合分析\n\n## 1. 项目介绍\n\n### 项目目的\nAI视频人生规划项目是一个混合式Python/Node.js系统,旨在将静态的财务规划PDF报告和访谈视频自动转化为动态、个性化的3-5分钟解说视频。该项目通过整合AI技术、数据可视化和多媒体处理,为用户提供直观易懂的人生财务规划展示。\n\n### 核心目标\n- 将复杂的财务数据转化为易于理解的视觉内容\n- 通过AI生成自然流畅的日语解说脚本\n- 自动化视频制作流程,提高内容生产效率\n- 结合图表动画、AI解说、B-Roll素材和访谈片段,创造沉浸式观看体验\n\n### 目标用户\n- 金融顾问和理财规划师\n- 保险代理人\n- 财务咨询公司\n- 需要向客户展示人生规划方案的专业人士\n\n## 2. 技术架构\n\n### 组件分解\n项目采用前后端分离的混合架构,后端使用Python进行数据处理和AI推理,前端使用Node.js/TypeScript通过Remotion进行视频渲染。\n\n```mermaid\nflowchart TD\n A[输入] --\u003e B[Python后端]\n B --\u003e C[数据处理]\n C --\u003e D[AI推理]\n D --\u003e E[render_props.json]\n E --\u003e F[Remotion前端]\n F --\u003e G[视频渲染]\n G --\u003e H[输出视频]\n \n subgraph Python后端\n C1[PDF提取器]\n C2[视频提取器]\n C3[脚本生成器]\n C4[媒体获取器]\n C5[数据构建器]\n end\n \n subgraph Remotion前端\n F1[Root组件]\n F2[LifePlanChart]\n F3[CashFlowChart]\n F4[UnifiedHUD]\n end\n```\n\n### 设计模式\n项目采用了典型的管道-过滤器架构模式,每个处理步骤都是一个独立的模块,通过标准化的数据格式(render_props.json)进行通信。这种设计提高了系统的可维护性和可扩展性。\n\n### 数据流\n```mermaid\nflowchart LR\n A[PDF报告] --\u003e B[PDF提取]\n C[访谈视频] --\u003e D[视频提取]\n B --\u003e E[脚本生成]\n D --\u003e E\n E --\u003e F[获取B-Roll]\n B --\u003e G[数据构建]\n G --\u003e H[生成render_props.json]\n H --\u003e I[Remotion渲染]\n I --\u003e J[最终视频]\n```\n\n## 3. 关键实现\n\n### 主要入口点\n- **main.py**: 项目的主要CLI入口点,负责协调整个视频生成流程\n- **src/index.ts**: Remotion渲染的入口点,注册根组件\n\n### 核心模块\n- **backend/extractor.py**: 负责从PDF和视频中提取数据\n- **backend/scripter.py**: 使用Gemini Pro生成日语解说脚本\n- **backend/data_builder.py**: 构建图表数据和财务模拟\n- **backend/media_fetcher.py**: 从Pexels API获取B-Roll素材\n\n### 配置方法\n项目使用环境变量进行配置管理,通过`.env`文件存储API密钥等敏感信息。主要依赖的API包括:\n- GEMINI_API_KEY: Google Gemini API\n- OPENAI_API_KEY: OpenAI Whisper用于音频转录\n- PEXELS_API_KEY: Pexels用于获取B-Roll素材\n\n### 外部依赖\n- **Python依赖**: python-dotenv, ffmpeg-python, requests, tqdm, rich\n- **Node.js依赖**: Remotion, React 19, Recharts, TypeScript\n\n### 集成点\n- **Google Gemini 1.5 Pro**: 用于PDF解析和脚本生成\n- **OpenAI Whisper**: 用于音频转录\n- **FFmpeg**: 用于视频处理\n- **Pexels API**: 用于获取B-Roll素材\n\n```mermaid\ngraph LR\n A[Google Gemini] --\u003e B[PDF解析]\n A --\u003e C[脚本生成]\n D[OpenAI Whisper] --\u003e E[音频转录]\n F[FFmpeg] --\u003e G[视频处理]\n H[Pexels API] --\u003e I[B-Roll获取]\n B --\u003e J[数据处理]\n C --\u003e J\n E --\u003e J\n G --\u003e J\n I --\u003e J\n J --\u003e K[视频渲染]\n```\n\n## 4. 关键功能\n\n### 功能概述\n项目实现了从静态财务报告到动态视频的完整自动化转换流程,包括数据提取、脚本生成、素材获取、数据可视化和视频渲染等关键功能。\n\n### 实现亮点\n- **AI驱动的内容生成**: 使用Google Gemini Pro从PDF中提取结构化数据并生成自然流畅的日语解说脚本\n- **财务模拟引擎**: 基于用户输入的财务数据,模拟未来资产消耗和现金流情况\n- **智能B-Roll获取**: 根据脚本内容自动获取相关的B-Roll素材,增强视频表现力\n- **动态图表渲染**: 使用Recharts创建专业的财务图表动画\n\n### 功能架构\n```mermaid\nstateDiagram-v2\n [*] --\u003e 输入\n 输入 --\u003e 数据提取: PDF/视频\n 数据提取 --\u003e 脚本生成: 结构化数据\n 脚本生成 --\u003e B-Roll获取: 关键词\n B-Roll获取 --\u003e 数据构建: 媒体素材\n 数据构建 --\u003e 视频渲染: render_props.json\n 视频渲染 --\u003e 输出: MP4视频\n 输出 --\u003e [*]\n \n state \"数据提取\" as extract {\n [*] --\u003e PDF提取\n [*] --\u003e 视频提取\n PDF提取 --\u003e [*]\n 视频提取 --\u003e [*]\n }\n \n state \"脚本生成\" as script {\n [*] --\u003e GeminiPro\n GeminiPro --\u003e [*]\n }\n \n state \"数据构建\" as build {\n [*] --\u003e 财务模拟\n [*] --\u003e 图表数据\n 财务模拟 --\u003e [*]\n 图表数据 --\u003e [*]\n }\n```\n\nSources:\n- [PROJECT_README.md](PROJECT_README.md)\n- [main.py](main.py)\n- [backend/scripter.py](backend/scripter.py)\n- [backend/data_builder.py](backend/data_builder.py)\n- [backend/media_fetcher.py](backend/media_fetcher.py)\n- [backend/extractor.py](backend/extractor.py)\n- [src/index.ts](src/index.ts)\n\u003c/blog\u003e","gmt_create":"2026-01-14T13:45:02.220001+08:00","gmt_modified":"2026-01-14T13:45:02.220001+08:00","id":"fe0a0668-6114-4351-82af-a90646ed34c6","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-01-14T13:44:31.660372+08:00","gmt_modified":"2026-01-14T13:44:31.660372+08:00","id":"9cbc706e-4aff-48d2-9494-bc5db3285836","repo_id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e"},"wiki_repo":{"id":"eaf0fa61-d4de-4e44-bbfb-280b61b7275e","name":"AI-video-lifeplan-demo","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── assets\\\\\\n│ ├── 0_input\\\\\\n│ │ └── .gitkeep\\n│ ├── 1_processed\\\\\\n│ │ ├── subtitle_investigation\\\\\\n│ │ │ ├── complete_comparison.json\\n│ │ │ ├── №1_基本情報_movie_comparison.json\\n│ │ │ ├── №1_基本情報_second_comparison.json\\n│ │ │ └── №1_基本情報_word_comparison.json\\n│ │ ├── video_extractions\\\\\\n│ │ │ ├── all_extractions.json\\n│ │ │ ├── №1_基本情報_extraction.json\\n│ │ │ └── №2_ライフイベント_extraction.json\\n│ │ ├── .gitkeep\\n│ │ ├── broll_fetch_results.json\\n│ │ └── translation_cache.json\\n│ └── 2_output\\\\\\n│ └── .gitkeep\\n├── backend\\\\\\n│ ├── video_processor\\\\\\n│ │ ├── __init__.py\\n│ │ ├── schemas.py\\n│ │ ├── strategy_audio.py\\n│ │ ├── strategy_direct.py\\n│ │ └── utils.py\\n│ ├── SUBTITLE_INVESTIGATION_README.md\\n│ ├── __init__.py\\n│ ├── data_builder.py\\n│ ├── extractor.py\\n│ ├── investigate_media_fetch.py\\n│ ├── investigate_subtitle_extraction.py\\n│ ├── investigate_video_extraction.py\\n│ ├── media_fetcher.py\\n│ └── scripter.py\\n├── frontend\\\\src\\\\\\n│ └── render-props-types.ts\\n├── src\\\\\\n│ ├── CashFlowChart.tsx\\n│ ├── Composition.tsx\\n│ ├── DualChartView.tsx\\n│ ├── LifePlanBarChart.tsx\\n│ ├── LifePlanChart.tsx\\n│ ├── Root.tsx\\n│ ├── UnifiedHUD.tsx\\n│ ├── index.ts\\n│ ├── mock-cashflow-original.json\\n│ ├── mock-cashflow.json\\n│ ├── mock-data.json\\n│ └── types.ts\\n├── tests\\\\\\n│ ├── fixtures\\\\\\n│ │ ├── .gitkeep\\n│ │ └── README.md\\n│ ├── test_video_cli.py\\n│ └── test_video_processor.py\\n├── .env.example\\n├── .gitignore\\n├── .prettierignore\\n├── .prettierrc\\n├── PROJECT_README.md\\n├── eslint.config.mjs\\n├── main.py\\n├── package-lock.json\\n├── package.json\\n├── remotion.config.ts\\n├── requirements.txt\\n├── tsconfig.json\\n└── verify_structure.py\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"47d1f014480cc59c9768a34bf4b5c64dc050de3b","last_commit_update":"2026-01-14T13:59:16.7632777+08:00","gmt_create":"2026-01-14T13:44:25.331663+08:00","gmt_modified":"2026-01-14T13:59:16.7723475+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"main\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"\"}"}}