Skip to content

LN-JIN/EPlus-Agent

Repository files navigation

EPlus-Agent

基于大语言模型的建筑能耗仿真全自动化 Agent

用自然语言描述建筑,自动完成 EnergyPlus 建模、仿真与能耗分析报告生成。

Go 1.22 License



项目背景

建筑能耗仿真是绿色建筑设计、节能改造的核心手段,但传统流程门槛极高:工程师需手动填写数百个 EnergyPlus 参数、编写 IDF 文件、排查仿真错误,往往非常耗时。

EPlus-Agent 将这一流程完全自动化——

  • 用户只需用自然语言描述建筑("深圳市 5 层办公楼,建筑面积 2000 m²......")。
  • Agent 自动完成意图理解 → 参数配置文件生成 → IDF 建模 → EnergyPlus 仿真 → 能耗报告撰写 → 参数敏感性分析。遇到错误时 LLM 自动诊断并修复。

模块 语言 职责
EPlus-Agent(Go,cmd/ / internal/ Go LLM 编排、业务流程、会话管理、报告生成
pytools/(内嵌 Python CLI) Python EnergyPlus 工具(YAML→IDF 转换、仿真执行、IDF 读写)

Note

本项目旨在探索 LLM Agent 在建筑能耗仿真领域的一种落地路径,结合 ReAct 推理、多 Agent 协作与自愈修复等技术,提供一套可参考的实现思路。Agent 驱动仿真的方式并不唯一,欢迎基于此思路探索更多变体。

当前版本需要继续进行系统性量化验证,引入标准测试集,并开展多 LLM 对比实验,以提供更客观的参考依据。

pytools/ 的转换器代码来源于 EnergyPlus-Agent,整合时仅保留 CLI 工具部分,去除了 MCP 协议服务器。



功能亮点

所有 LLM 智能行为均基于统一的 react.Agent 底层,以 ReAct 推理框架为核心驱动力,将规划、工具调用与自愈能力贯穿仿真全流程。


分类 特性 / 模式 说明
Agent
推理模式
🔄 ReAct(思考 → 行动 → 观察) 核心模式,贯穿 Phase 1 / 4 / 6;同一推理引擎,工具集按阶段独立配置
🧩 Planner + 并发 Workers 已实现,用于 Phase 6;Planner 负责规划变体方案,多 Worker 并发执行仿真
🔀 Plan-Execute-Replan 可接入;执行中动态重规划,适用于方案需在执行时动态调整的复杂场景,例如报告生成场景
端到端
自动化
🏗️ 自然语言驱动建模 以自然语言描述建筑需求,Agent 多轮对话补全参数,自动生成完整 EnergyPlus IDF 文件,无需任何专业软件操作经验
📋 国家规范合规校验 内置 GB 55015-2021《建筑节能与可再生能源利用通用规范》知识库,意图收集阶段自动核验围护结构传热系数、窗墙比、照明及设备功率密度等关键参数的合规性
📊 智能能耗报告生成 仿真完成后自动解析 CSV/ESO 结果,提取年度能耗指标,LLM 生成包含数据摘要与专业分析解读的 Markdown 报告
鲁棒性与
自愈能力
🔧 多层自愈修复 YAML 生成、IDF 转换、仿真执行三个阶段均内置独立的 LLM 修复循环,可配置每一阶段自动重试的次数
🛡️ 错误分类与死循环防护 区分环境错误(不可修复)和内容错误(LLM 可修),避免在无效路径上浪费重试;连续 3 次相同错误自动终止,防止无限循环
RAG
问答
📚 混合检索问答 独立 cmd/ragqa CLI,基于 EnergyPlus Input-Output Reference 文档,混合检索(向量余弦 + BM25 + RRF 融合),支持 HyDE 双路增强与多轮追问上下文复用
参数分析与
工程设计
并发参数敏感性分析 Planner Agent 先探查 IDF 真实对象名与字段值,再规划多个参数变体;多 Worker 并发仿真(默认 3 路),汇总输出含对比表格与 AI 解读的分析报告
🔌 灵活入口与断点续传 支持从任意阶段切入(UserInput / YAML / IDF / 仿真目录),会话状态逐阶段持久化,通过 -resume 无缝恢复中断会话
🔍 全流程可观测 每阶段 ReAct 推理步骤(思考→工具调用→观察)以结构化 Markdown 完整留存,Token 消耗按阶段统计,行为完全可追溯。例如:output/react_logs/...planner.md


系统架构

用户自然语言输入
        │
        ▼
┌───────────────────────────────────────────────────────────┐
│                      EPlus-Agent (Go)                      │
│                                                            │
│  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐           │
│  │Phase 1 │→ │Phase 2 │→ │Phase 3 │→ │Phase 4 │→ ...      │
│  │意图收集│  │YAML 生成│  │IDF 转换│  │EPlus 仿真│         │
│  └────────┘  └────────┘  └────────┘  └────────┘           │
│                                                            │
│  ┌────────┐  ┌────────┐                                    │
│  │Phase 5 │→ │Phase 6 │                                    │
│  │报告生成│  │参数分析│                                     │
│  └────────┘  └────────┘                                    │
│                                                            │
│  核心引擎:ReAct Agent + Tools Registry + SessionState    │
└───────────────────────────────────────────────────────────┘
        │                        │
        ▼                        ▼
  LLM API                  pytools/(内嵌 Python CLI)
  (OpenAI 兼容)                  │
                                 ▼
                          EnergyPlus 仿真引擎


系统级管理

层面 实现机制 作用
流程管理 PhaseModule 接口 + Orchestrator 六阶段统一编排,shouldRunPhase 判断跳过/续传,各模块解耦
上下文管理 IntentSummary 跨阶段注入 System Prompt Phase 1 生成建筑自然语言摘要后注入 Phase 2~6,LLM 全程持有建筑语义,无需重复询问
状态管理 SessionState 逐阶段 JSON 持久化 单一数据对象贯穿全流程,记录产物路径、Token 消耗、IDF 快照历史,支持跨进程恢复


已实现功能

核心流程

  • 自然语言多轮对话建筑意图解析(Phase 1)
  • BuildingIntent 结构化数据提取(建筑信息、几何参数、围护结构、窗户、负荷、进度表、仿真设置)
  • GB 55015-2021 建筑节能规范动态查询(Skills 知识库:传热系数、窗墙比、照明/设备功率密度、人员密度、换气次数等 11 张参数表)
  • LLM 驱动的 EnergyPlus YAML 配置生成(Phase 2)
  • YAML 语法错误自愈修复循环(最多 5 次)
  • YAML → EnergyPlus IDF 自动转换(Phase 3)
  • IDF 转换失败时 LLM 自动修复 YAML 并重试(最多 8 次)
  • EnergyPlus 仿真自动执行(Phase 4)
  • 仿真失败时 LLM 读取错误日志、修复 IDF 并重试(最多 10 次)
  • 仿真结果 CSV/ESO 解析与指标提取(Phase 5)
  • LLM 生成 Markdown 能耗分析报告
  • 参数变体规划(Planner ReAct Agent)(Phase 6)
  • 并发多变体仿真(信号量控制,默认最多 3 Worker)
  • LLM 生成多变体对比分析报告

工程能力

  • 灵活入口:支持从 UserInput / YAML / IDF / SimOutDir 任意阶段切入
  • 会话检查点持久化与续传(-resume <session_id>
  • 错误分类系统(环境错误 vs. 内容错误 vs. 仿真错误 vs. 瞬时错误)
  • SameErrorGuard 检测 ReAct 死循环(连续 3 次相同错误即终止)
  • 双输出日志(彩色控制台 + JSON 文件)
  • ReAct 推理步骤完整 Markdown 记录
  • 按阶段统计 LLM Token 消耗
  • Ctrl+C 优雅退出(ctx 感知信号量)
  • 可跳过可选阶段(-skip-report-skip-param

支持的参数化分析类型

  • 外墙 / 屋顶材料(Material.Thickness)
  • 窗户 U 值(WindowMaterial:SimpleGlazingSystem.UFactor)
  • 窗户太阳得热系数 SHGC
  • 照明功率密度(Lights.Watts_per_Zone_Floor_Area)
  • 设备功率密度(ElectricEquipment.Watts_per_Zone_Floor_Area)


未来计划

  • RAG扩展文档覆盖 — 接入完整 EnergyPlus 文档与工程师参考手册
  • 多气候区天气文件 — 内置主要城市 EPW,支持一键切换气候区对比
  • 建筑类型模板 — 预置办公、住宅、商业、学校等典型建筑基础模板
  • Web UI — 提供浏览器端可视化界面,展示仿真进度与报告
  • 报告可视化 — 在 Markdown 报告中嵌入能耗图表(SVG/PNG)
  • IDF 几何可视化 — 生成建筑三维几何预览


快速开始

方式一:本地运行

依赖 版本 说明
Go 1.22+ 主程序编译运行
Python 3.12+ pytools/ CLI 工具
uv 最新 Python 依赖管理(pip install uv
EnergyPlus 25.1.0 仿真引擎(需加入 PATH)
LLM API 兼容 OpenAI Chat Completions 格式
# 安装 Python 依赖
cd pytools && uv sync && cd ..

# 复制并填写配置
cp configs/config.yaml.example configs/config.yaml
# 编辑 configs/config.yaml,填入 LLM API Key 和本地路径

# 运行
go run cmd/main.go -input "深圳 5 层办公楼"

方式二:Docker 部署

依赖 版本 说明
Docker 20.10+ 容器运行时
Docker Compose v2+ 编排工具
LLM API 兼容 OpenAI Chat Completions 格式
# 1. 准备气象文件(放入 weather/ 目录)
mkdir -p weather
# 将 Shenzhen.epw 等 EPW 文件复制到 weather/

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填入 LLM_API_KEY 和 SESSION_EPW_PATH

# 3. 构建并运行
docker compose run --rm eplus-agent -input "深圳 5 层办公楼"

CLI 使用指南

# 完整流程(交互输入建筑描述)
go run cmd/main.go

# 指定建筑描述(跳过交互询问)
go run cmd/main.go -input "深圳市 3 层住宅,400 平方米"

# 同时指定参数分析目标
go run cmd/main.go -input "北京办公楼" -analysis-goal "对比外墙保温 3/5/8 cm"

# 从已有 YAML 文件开始(跳过 Phase 1-2)
go run cmd/main.go -yaml output/yaml/model.yaml

# 从已有 IDF 文件开始(跳过 Phase 1-3)
go run cmd/main.go -idf output/idf/model.idf

# 从已有仿真结果开始(直接生成报告)
go run cmd/main.go -sim-dir output/model/v1

# 续传中断的会话
go run cmd/main.go -resume session_20260323_141945

# 跳过报告生成
go run cmd/main.go -input "..." -skip-report

# 跳过参数分析
go run cmd/main.go -input "..." -skip-param

# 指定 EPW 气象文件
go run cmd/main.go -input "..." -epw /path/to/Beijing.epw


输出目录结构

output/
├── session/
│   └── <session_id>.json          # 会话状态快照(每阶段后持久化)
├── yaml/
│   └── <building_name>.yaml       # Phase 2 生成的 EnergyPlus 配置
├── idf/
│   └── <building_name>.idf        # Phase 3 生成的 IDF 文件
├── <building_name>/
│   ├── v1/                        # Phase 4 仿真结果(第 1 次尝试)
│   ├── v2/                        # Phase 4 仿真结果(修复后第 2 次)
│   └── ...
├── reports/
│   ├── <building_name>_report.md         # Phase 5 能耗分析报告
│   └── <building_name>_param_analysis.md # Phase 6 参数对比报告
├── param_analysis/
│   └── <session_id>/<timestamp>/
│       ├── baseline/sim/          # 基线仿真结果
│       ├── wall_ins_5cm/sim/      # 变体 1 仿真结果
│       └── wall_ins_8cm/sim/      # 变体 2 仿真结果
└── react_logs/
    ├── <session>_intent.md        # Phase 1 ReAct 推理记录
    ├── <session>_sim_repair.md    # Phase 4 修复推理记录
    └── <session>_paramanalysis_planner.md  # Phase 6 Planner 推理记录


项目结构

EPlus-Agent/
├── cmd/
│   ├── main.go                   # CLI 入口,flag 解析
│   └── ragqa/                    # 独立 RAG 问答 CLI
├── configs/
│   ├── config.yaml.example       # 配置模板(安全,可提交)
│   └── config.yaml               # 本地配置(含密钥,已 gitignore)
├── internal/
│   ├── config/                   # 配置加载与环境变量覆盖
│   ├── intent/                   # Phase 1-2:意图收集与 YAML 生成
│   ├── idfconvert/               # Phase 3:YAML → IDF 转换
│   ├── simulation/               # Phase 4:EnergyPlus 仿真与修复
│   ├── report/                   # Phase 5:报告解析与生成
│   ├── paramanalysis/            # Phase 6:参数变体规划与并发仿真
│   ├── react/                    # 通用 ReAct Agent(思考→工具→观察)
│   ├── tools/                    # LLM 工具注册表
│   ├── orchestrator/             # 主流程编排
│   ├── session/                  # 会话状态与 PhaseModule 接口
│   ├── rag/                      # RAG 问答(向量检索、BM25、HyDE、RRF)
│   ├── llm/                      # LLM 客户端(OpenAI 兼容 + SSE 流)
│   ├── eplusrun/                 # pytools 子进程封装
│   ├── fault/                    # 错误分类与重试策略
│   ├── logger/                   # 双输出结构化日志
│   └── ui/                       # 终端交互与彩色输出
├── pytools/                      # 内嵌 Python 工具(YAML→IDF、仿真、IDF 读写)
│   ├── main.py                   # CLI 入口(typer)
│   ├── pyproject.toml            # Python 依赖声明
│   └── src/
│       ├── converter_manager.py  # 转换流程编排
│       ├── converters/           # 各 EnergyPlus 对象转换器(12 个)
│       ├── runner/               # EnergyPlus 仿真执行器
│       ├── validator/            # Pydantic 数据模型与校验
│       └── utils/                # 日志工具
├── Dockerfile                    # 多阶段 Docker 构建
├── docker-compose.yml            # Docker Compose 部署配置
├── .env.example                  # 环境变量模板(含 LLM 和 EPW 配置)
└── output/                       # 生成文件(gitignore)


依赖说明

pytools(内嵌 Python CLI)

pytools/ 是项目内嵌的 Python 工具集,提供以下 CLI 子命令(由 Go 通过子进程调用):

命令 功能
convert-idf 将 YAML 配置转换为 EnergyPlus IDF 文件
run-simulation 调用 EnergyPlus 执行仿真
edit-idf 修改 IDF 对象字段(基于 eppy)
read-idf 读取 IDF 对象字段(基于 eppy)
validate-idf IDF 合法性验证

Go 端通过 internal/eplusrun/runner.go 以子进程方式调用 pytools/main.py,结果经 stdout 标记行(如 IDF_OUTPUT: <path>)传递。


License

MIT License

About

Describe buildings in natural language to automatically complete EnergyPlus modeling, simulation, and energy analysis report generation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors