生成分析报告
TRICYS 不仅是一个仿真执行框架,更是一个强大的自动化分析与报告平台。它能够将复杂的仿真结果自动处理成结构清晰、内容丰富、支持中英双语的分析报告。其报告生成流程采用创新的分层设计,从数据驱动的图表生成,到可选的、由大语言模型(LLM)驱动的深度分析与学术级报告撰写,实现了端到端的自动化。
1. 专业术语与国际化图表¶
为了使生成的图表具有专业性和可读性,TRICYS 引入了一套基于外部术语表的标签映射机制,并支持中英双语切换。
1.1 工作原理¶
该功能由 tricys/analysis/plot.py 模块实现。
- 加载术语表:程序启动时,
load_glossary()函数会读取一个用户指定的 CSV 文件(glossary_path)。该 CSV 文件定义了内部模型变量名与其中英文专业术语的对应关系。 - 设置语言:通过调用
set_plot_language('cn')或set_plot_language('en'),可以全局切换图表的显示语言。切换至中文时,会自动启用支持中文的字体(如“SimHei”)。 - 标签格式化:在绘制图表时,所有原始的变量名(如
Startup_Inventory,sds.I[1])都会经过_format_label()函数处理。该函数会:- 首先,根据当前设置的语言,在加载的术语表中查找对应的中文或英文专业术语。
- 如果查找到,则使用该专业术语作为图表标签(例如,图例、坐标轴标题)。
- 如果未找到,则执行默认的格式化(例如,将下划线替换为空格),保证标签的基本可读性。
- 单位映射:除了术语,坐标轴的单位也支持通过
unit_map配置进行转换和显示,并同样支持国际化。
1.2 术语表格式示例¶
该 CSV 文件必须包含以下三列:
| 模型参数 (Model Parameter) | 英文术语 (English Term) | 中文翻译 (Chinese Translation) |
|---|---|---|
Startup_Inventory |
Startup Inventory | 启动库存 |
Doubling_Time |
Doubling Time | 倍增时间 |
sds.I[1] |
Tritium Inventory in SDS | 贮存与输送系统氚库存 |
通过这种机制,TRICYS 能够将内部变量 Startup_Inventory 在生成图表时自动美化为“Startup Inventory (kg)”或“启动库存 (千克)”。
2. 核心图表类型¶
tricys/analysis/plot.py 中的 generate_analysis_plots() 函数是所有分析图表的总入口,它会根据分析任务的类型生成以下几类核心图表:
2.1 主趋势图¶
- 用途:展示关键性能指标(因变量)如何随独立扫描变量的变化而变化。
- 特点:
- 当存在多个背景扫描参数(
simulation_parameters)时,会自动使用不同的颜色、线型和标记来绘制多条曲线,并生成图例。 - 如果曲线数量不多,会自动在数据点上标注数值,方便精确读数。
- 支持将多个指标绘制在同一张图的多个子图中(
_generate_combined_plots),或为每个指标生成独立的图表文件(_generate_individual_plots)。
- 当存在多个背景扫描参数(
2.2 约束求解分析图¶
- 用途:专门用于可视化“目标寻优”任务的结果(即
Required_开头的指标)。 - 特点:
- 由
_generate_multi_required_plot()函数生成,通常采用多子图布局。 - 每个子图代表一组特定的背景参数组合,清晰地展示了在不同场景下,为了达成某个约束条件(例如,倍增时间小于10年),需要付出的“代价”(即被优化的参数值)。
- 这种图对于理解多变量权衡(Trade-offs)关系至关重要。
- 由
2.3 扫描过程时序图¶
- 用途:当需要观察某个动态变量在不同参数扫描下的完整时间演化过程时,生成此图。
- 特点:
- 由
plot_sweep_time_series()函数生成,包含两个子图:- 全局视图 (Overall View):展示从
t=0到仿真结束的完整时间曲线。为了突出早期关键行为,此视图会自动隐藏超过初始值两倍的数据点。 - 细节视图 (Detailed View):自动聚焦于所有曲线中首次达到最小值的区域,并放大显示。这对于观察系统启动初期的动态特性(如库存的“下跌-回升”转折点)非常有用。
- 全局视图 (Overall View):展示从
- 一个红色的虚线框会自动绘制在“全局视图”上,以标示“细节视图”所对应的区域。
- 由
3. 多阶段报告生成逻辑¶
TRICYS 的报告生成分为两个核心阶段,由 tricys/analysis/report.py 模块调度。这种设计将原始数据与 AI 解读分离,保证了结果的透明度和可追溯性。
graph TD
A[开始] --> B[执行所有仿真与分析任务];
B --> C["<b>阶段一:生成基础数据报告</b><br>`generate_prompt_templates()`"];
C --> D{AI 分析是否启用?};
D -- 否 --> E[结束: 仅包含数据和图表的基础报告];
D -- 是 --> F["<b>阶段二:生成 AI 增强报告</b>"];
subgraph F
direction LR
F1["第一次调用 LLM:<br>原始数据分析<br>`call_openai_analysis_api`"] --> F2["第二次调用 LLM:<br>学术报告撰写<br>`generate_sensitivity_academic_report`"];
end
F --> G[结束: 生成包含深度分析的学术级报告];
3.1. 阶段一:基础数据报告¶
此阶段由 generate_prompt_templates() 函数执行,其核心职责是创建一个内容详尽、纯数据驱动的 Markdown 文件。这份文件是后续所有分析的“事实根基”,包含:
- 配置详情:本次分析的所有配置参数,如独立/因变量、扫描范围、优化设置等。
- 数据表格:将
sensitivity_analysis_summary.csv和requierd_tbr_summary.csv中的数据格式化为美观的 Markdown 表格。 - 图表嵌入:将
plot.py生成的所有.svg图表文件通过的语法嵌入报告中。 - 动态数据切片:如果适用,还会从
sweep_results.csv中提取关键动态过程(如初始、转折点、结束阶段)的数据切片,以表格形式呈现。
3.2. 阶段二:原始数据分析¶
- 执行者:
call_openai_analysis_api() - 目的:对纯数据表格进行深度量化分析,发掘数据背后的趋势与关联。
- 过程:
- 将阶段一生成的基础报告作为上下文,并附加上一个精心设计的分析指令(见下一节)。
- 一个关键指令是忽略图表,只分析表格,这强制模型进行定量而非定性的分析。
- LLM 返回的分析结果会被追加到基础报告的末尾,形成一份包含“原始数据+AI初步解读”的完整报告。
数据分析师提示词
**角色:** 你是一名聚变反应堆氚燃料循环领域的专家。
**任务:** 请**完全基于**下方提供的**两类数据表格**,对聚变堆燃料循环模型的**敏感性分析**结果进行深度解读。
**分析要点 (必须严格依据数据表格作答):**
1. **全局敏感性分析:**
* 分析性能指标总表呈现出怎样的**总体趋势**?
* 哪个性能指标对独立变量 `{independent_variable}` 的变化最为敏感?
2. **交互效应分析:**
* 分析独立变量与背景扫描参数之间的交互作用对性能指标的影响。
3. **动态过程分析:**
* 观察过程数据切片:系统在“初始阶段”和“结束阶段”的行为有何不同?
* 转折点阶段的数据揭示了什么物理过程?
4. **综合结论:**
* 总结调整 `{independent_variable}` 对系统的综合影响和利弊权衡。
* 可以得出哪些关于系统设计或运行优化的初步建议?
3.3. 阶段三:学术报告撰写¶
- 执行者:
generate_sensitivity_academic_report() - 目的:将一份包含数据、图表和初步分析的混合报告,“升格”为一篇结构严谨、语言专业的学术风格报告。
- 过程:
- 将更新后的报告(已包含第一次AI分析)和术语表 (
glossary.csv) 一同作为上下文。 - 附加上一个更复杂的指令,要求模型扮演“资深科学家”角色,并严格遵循学术规范。
- LLM 会利用术语表将报告中的内部变量替换为专业术语,并按照标准的学术结构(摘要、引言、方法、结果与讨论、结论)重新组织和撰写所有内容。
- 最终结果保存为一个全新的、可直接使用的学术报告文件 (
academic_report_....md)。
- 将更新后的报告(已包含第一次AI分析)和术语表 (
资深科学家提示词
**角色:** 您是一位在核聚变工程,特别是氚燃料循环领域,具有深厚学术背景的资深科学家。
**任务:** 您收到了一个初步报告和一份专业术语表。请您基于这两份文件,撰写一份更加专业、正式、符合学术发表标准的深度分析总结报告。
**指令:**
1. **专业化语言:** 将初步报告中的模型参数/缩写(例如 `sds.I[1]`, `Startup_Inventory`)替换为术语表中对应的专业术语。
2. **学术化重述:** 用严谨、客观的学术语言重新组织和阐述初步报告中的发现。
3. **图表和表格的呈现与引用:**
* **显示图表:** 您**必须**使用 Markdown 语法 `` 来**直接嵌入**和显示初步报告中包含的所有图表。
* **引用图表:** 在正文中分析和讨论图表内容时,请对图表进行编号和文字引用。
4. **结构化报告:** 您的报告应包含以下部分:
* **标题 (Title):** ...
* **摘要 (Abstract):** ...
* **引言 (Introduction):** ...
* **方法 (Methodology):** ...
* **结果与讨论 (Results and Discussion):** ...
* **结论 (Conclusion):** ...