一、摘要
我是一名储能行业从业者,用 TRAE SOLO 全程对话式开发,搭建了 ICES Analysis(工商业储能投资分析模型) —— 一个覆盖「历史需量分析 → 负荷预测 → 需量优化 → 经济性评价」四大模块的 Streamlit Web 应用。
成功解决了实务中两大痛点:1、在客户营销过程中通过动态化展示来让客户了解项目的投资收益;2、在运营管理上,通过需量优化指导储能电池充放电,实现收益最大化。 整个项目 11 个源文件、2371 行代码,约 80% 由 SOLO 直接生成。
二、背景
我是谁
我从事工商业储能领域的投资和营销工作,日常需要为不同客户快速输出储能项目的前期投资评估。
为什么需要这个工具
宏观背景:随着国家电力市场化改革,逐步放开政府指导的峰谷电价,导致传统的“低谷充电、高峰放电、峰谷套利”的收益模式难以为继,需要结合对全年电力使用的15分钟负荷数据进行统计分析,并据此进行月度需量的优化,来实现降低用电负荷,减少需量电费的支出,同时还需要考虑和日充放电时间的结合,来实现收益最大化。
技术困境:因涉及30000+条历史数据的统计分析和月度用电负荷预测,人工筛选或利用excel根本不能实现,必须通过程序来解决。但本人非科班出身,因此就遇到了难以逾越的技术困难。
核心目标:1、通过预测模型来实现负荷预测和需量优化;2、实现投资收益和现金流的自动测算,并在参数调整后,对应的结果自动调整(含计算数据和可视化图表的同步调整)。
三、实践过程
整体开发策略
我用的是先骨架后细节、模块化拆分的策略:
SOLO 生成项目骨架 → 逐个填充功能模块 → 跑通测试 → 修复 bug → 迭代优化
每个模块一个 .py 文件,方便 SOLO 聚焦生成和单独测试。
第 1 步:搭建项目骨架 + 配置管理

Prompt: “我要用 Streamlit 做一个工商业储能投资分析模型,帮我生成项目目录结构。功能模块包括:历史需量分析、负荷预测、需量优化、经济性评价。主页面用侧边栏导航,加上登录认证。”
SOLO 一次性生成了完整的 main.py(侧边栏导航 + 页面路由 + 首页展示)和 config/constants.py(电价时段、储能参数、投资参数、图表配色等全部常量集中管理)。
第 2 步:数据标准化函数 —— 最关键的基础设施
这是所有分析模块的基石,也是最能体现 SOLO 理解复杂需求能力的地方。
Prompt: "写一个数据标准化函数 standardize_load_data(),要求:
- 输入任意格式的 Excel,自动识别时间列和负荷列(支持 15+ 种列名变体)
- 自动清洗:缺失值线性插值、3σ 去异常值、负值归零、排序去重
- 自动从时间派生全部特征列:小时、星期、月份、淡旺季标签、用电类型、日内系数、周度系数、生产波动系数
- 计算 15 分钟滑动需量"
SOLO 给的核心函数有 104 行,列名映射表覆盖了 15+ 种变体:
col_mapping = {
"时间": "时间", "时间戳": "时间", "datetime": "时间",
"date": "时间", "time": "时间", "timestamp": "时间", "日期时间": "时间",
"负荷(kW)": "负荷(kW)", "负荷": "负荷(kW)", "有功功率": "负荷(kW)",
"有功功率(kW)": "负荷(kW)", "load": "负荷(kW)", "power": "负荷(kW)",
"active_power": "负荷(kW)", "实际负荷": "负荷(kW)", "功率": "负荷(kW)",
}
设计原则:系统只需要「时间」和「负荷(kW)」两列,其余特征全部从时间自动派生。这个设计在实际客户场景中极为实用。
第 3 步:历史需量分析 —— 4 个 Tab 一页全搞定
Prompt: “写一个 Streamlit 页面 render_history_analysis(),用户上传 15 分钟负荷数据,展示 4 个 Tab:
① 基础统计:4 个指标卡片(年最大/平均/最小需量、负荷率)+ 80 bins 需量分布直方图
② 月度分析:月需量柱线组合图 + 每月前 3 大需量明细表
③ 负荷曲线:全年日负荷曲线、月度曲线(可选月)、典型日曲线(淡旺季 × 工作日/周末,含 ±1σ 标准差带)
④ 高级分析:小时×星期热力图、需量持续时间曲线(标注 95%/90%/75% 分位点)、季节需量箱线图”
SOLO 一次性生成了完整页面,4 个 Tab 全部就位。我提了一个小调整——热力图配色让高峰期显示暖色、低谷冷色,SOLO 立即调整。
第 4 步:负荷预测 —— 12 维特征的机器学习模型
Prompt: “使用 GradientBoostingRegressor 做负荷预测。特征工程:3 组 sin/cos 周期编码(小时/星期/月份),二值特征(是否周末),数值特征(日序、季节编码、用电类型编码),滞后特征(前 1 天 lag_96、前 7 天 lag_672),滚动统计特征(96 点和 672 点窗口的均值/标准差)。TimeSeriesSplit 交叉验证,输出 MAPE/RMSE/R² 评估 + 预测曲线含置信区间。”
SOLO 生成了完整流程:
- 12 个特征 + n_estimators=200, max_depth=8, learning_rate=0.1
- 置信区间基于残差正态分布,80%/95%/99% 三档可选
- 预测数据 CSV 导出
踩坑记录: 第一次用滞后特征时,直接用
iloc偏移取前 96 行做"前一天数据",但如果数据不连续就对不上了。反馈给 SOLO,它改成了基于索引精确对齐的逻辑。


第 5 步:需量优化 —— 贪心启发式算法(核心难点)
这是整个项目算法最复杂的部分,也是来回调试最多的一步。
Prompt: "写一个贪心启发式算法 _optimize_demand_greedy(),优化储能充放电策略,最小化月度最大需量。策略:低谷时段充电、高峰时段放电、平段待机。SOC 范围 5%~95%,充放电效率 95%。两步走:
- 基础策略:按时序遍历,低谷充电、高峰放电、维护实时 SOC
- 迭代优化:最多 50 轮,每轮以当前最大需量的 97% 为目标,从后向前扫描增加放电功率"
SOLO 生成的算法约 100 行,核心逻辑清晰:
第一步(基础策略):按时序遍历
低谷 → 充电(SOC 上升)
高峰 → 放电(SOC 下降)
平段 → 待机
第二步(迭代优化):最多 50 轮
计算净负荷 → 目标 = 当前峰值 × 97%
从后向前扫描 → 净负荷 > 目标且 SOC 有电 → 增加放电
无改善 → 退出
踩坑记录: 第一次跑出来 SOC 不守恒——放电总量大于充电总量。把 bug 描述丢给 SOLO,它诊断出"增加放电后没有重新计算后续 SOC"的问题,增加了从当前点向后重算 SOC 的逻辑,并用
np.clip确保不越界。来回 2 轮修好。
第 6 步:经济性评价 —— IRR / NPV / 龙卷风图
Prompt: “生成经济性评价页面 render_economic_evaluation(),3 个 Tab:
① 参数输入:投资参数(容量、单价、EPC费)、经营数据(电价、效率、衰减率、工作天数)、需量管理参数
② 收益分析:峰谷价差收益 + 需量管理收益,计算 IRR(brentq数值解)/ NPV(折现率6%)/ 静态回收期 / 动态回收期,10 年现金流图(柱状+累计折现/非折现),逐年收益构成表(考虑 2%/年电池衰减)
③ 敏感性分析:6 因素龙卷风图(±20%~±50%)+ 盈亏平衡分析”
SOLO 自己用了 scipy.optimize.brentq 求解 IRR,这是金融计算的标准方法,比手写牛顿迭代精确且稳健。
第 7 步:Excel 调度表导出 + 可移植打包
Prompt: “把优化结果导出为格式化 Excel 月度调度表,4 个 Sheet:调度总览(每日汇总+月度汇总行)、详细计划(15分钟×天数×96行)、每日模板(典型日平均)、使用说明(10 项客户操作指引)。用 openpyxl 做好列宽、边框、表头样式、冻结窗格。”
SOLO 生成的 export_schedule.py 一次性输出可直接交付客户的 Excel 文件。同时还让 SOLO 写了 create_portable.py 打包脚本,自动下载嵌入式 Python、安装依赖、复制源码、生成 run.bat。打包后的 portable/ 文件夹拷贝到任何 Windows 电脑双击就能跑。
第 8 步:收尾打磨
最后让 SOLO 完成:自定义 CSS 样式美化界面、生成示例数据用于演示、错误处理和边界条件检查、以及 requirements.txt 依赖整理。
四、成果展示
4.1 项目全貌
ices_analysis/
├── config/constants.py # 配置中心(电价时段、储能参数、投资参数、配色)
├── src/
│ ├── main.py # Streamlit 主入口 + 侧边栏导航 + 登录认证
│ ├── utils.py # 数据标准化(列名映射 → 清洗 → 特征自动派生)
│ ├── history_analysis.py # 历史需量分析(4 Tab)
│ ├── load_forecast.py # 负荷预测(GBR + 12维特征工程)
│ ├── demand_optimizer.py # 需量优化(两步贪心启发式算法)
│ ├── economic_evaluation.py # 经济性评价(3 Tab:参数 → 收益 → 敏感性)
│ ├── export_schedule.py # 月度调度表 Excel 导出(4 Sheet)
│ └── auth.py # 用户认证
├── static/css/custom.css # 自定义 UI 样式
├── run.bat # 一键启动脚本
└── create_portable.py # 可移植包构建脚本
11 个源文件,2371 行代码,约 80% 由 SOLO 直接生成。
4.2 四大功能模块一览
| 模块 | 核心能力 | 关键输出 |
|---|---|---|
| 4 维度分析(基础统计 / 月度 / 曲线 / 高级) | 需量热力图、持续时间曲线、季节箱线图 | |
| GBR 模型 + 12 维特征 + TimeSeriesSplit | 15 分钟预测曲线 + 置信区间 + CSV 导出 | |
| 两步贪心启发式算法,50 轮迭代逼近最优 | 充放电计划 + SOC 曲线 + Excel 月度调度表 | |
| 峰谷套利 + 需量管理双重收益模型 | IRR / NPV / 回收期 + 龙卷风敏感性分析 |
4.3 技术亮点
| 亮点 | 说明 |
|---|---|
| 列名无关性 | 支持 15+ 种列名变体自动映射,客户随便什么格式都能处理 |
| 全自动清洗 | 缺失值插值 → 3σ 去异常 → 负值归零 → 排序去重,一个函数搞定 |
| 12 维特征自动派生 | 周期编码 + 滞后特征 + 滚动统计,全部从时间列自动计算 |
| 贪心迭代优化 | 两步法求解充放电策略,50 轮迭代逼近最优需量削减方案 |
| 完整经济模型 | 峰谷价差 + 需量管理双重收益,IRR/NPV/回收期/敏感性全链路 |
| 零门槛部署 | create_portable.py 一键打包,拷贝到任何 Win10/11 双击即用 |
五、效果与总结
5.1 提效对比
| 对比项 | 之前(手工 Excel) | 现在(ICES Analysis) |
|---|---|---|
| 数据清洗 | 不可能实现 | 自动完成,秒级 |
| 负荷预测 | 不可能实现 | 一键运行,10 秒出结果 |
| 经济性评估 | 2-3 天(含调参试算) | 上传即出结果,调参实时反馈 |
| 客户沟通 | 只能带打印报告 | 现场实时演示 + 调整参数即时生效 |
| 部署交付 | 需要安装 Python + 依赖 | 拷贝文件夹双击即用 |
5.2 SOLO 使用评价
| 维度 | 体验 |
|---|---|
| 代码生成能力 | |
| 复杂需求理解 | |
| 调试修复能力 | |
| 迭代理解力 |
5.3 可复用的方法
想用 SOLO 搭建行业分析工具的同学,可以参考这套流程:
- 先定数据结构:明确输入/输出格式,让 SOLO 先生成标准化处理函数
- 模块化拆分:一个功能一个
.py文件,方便聚焦生成和单独测试 - 先骨架后细节:先搭主框架和侧边栏导航,再逐个填充功能模块
- 边做边测:每完成一个模块立即跑起来看效果,有问题即时反馈
- 错误即反馈:遇到报错直接把 traceback 丢给 SOLO,不要自己硬 debug
5.4 核心感悟
以前觉得非专业技术人员搭建一个可落地应用的工商业软件是天方夜谭,用 TRAE SOLO 之后,一个人 + AI = 居然能搞定!!!。
最有价值的地方不是 SOLO 能直接写出完整代码,而是在你说"这里需要优化""这个配色不好看"时,它能理解意图并精准修改。对话式开发让工具从一次性交付变成了可以不断迭代的产品。对于外行来讲“不肯能完成的任务”变成了 4-5小时的对话式开发,而且产出的代码质量、文档完整度、前端界面友好度,整体性能和美观度都拉满。
全部功能使用 TRAE SOLO 生成,项目代码、功能说明书和客户演示 PPT 已完整交付。
发表于 TRAE 社区 SOLO 挑战赛专区 | 标签:【Code With SOLO】


















