AI 报告功能指南

AI报告系统是一个基于模板驱动的智能报告生成平台,通过集成大语言模型和JSON Schema约束,实现高质量、结构化的报告自动生成。
- 模板驱动: 基于Word模板,支持书签和占位符动态替换
- AI增强: 集成大语言模型进行内容润色和结构化提取
- JSON约束: 使用JSON Schema确保输出格式的一致性和数据完整性
- 自动化流程: 端到端的报告生成,从模板解析到文件下载
模板上传
这里的描述非常重要,它将直接影响AI生成报告的质量和相关性。建议使用PIG AI的提示词优化功能,对您的需求进行标准化描述和格式化,以获得更精准、专业的报告内容。优化后的提示词能够帮助系统更好地理解您的意图,生成符合预期的高质量文档。
维护报告模板
系统支持上传带有 {参数} 格式占位符的标准 Word 文档模板,上传后系统会自动识别并解析所有占位符。
为了获得最佳效果,请务必:
- 为每个占位符提供详细的字段描述,包括参数的具体含义、数据来源、格式要求等信息
- 添加业务场景说明,帮助大模型理解参数在整体文档中的作用和关联性
- 如有特殊格式要求,也请在描述中明确标注,比如日期格式等
完善的字段描述将显著提高大模型对模板的理解能力,从而生成更加准确、专业的文档内容。

测试使用
原理解析
用户输入 → 内容润色(可选) → AI结构化提取 → JSON修复 → Word模板填充 → 文件下载
1. 核心组件
AiReportConfService
报告配置服务接口,定义了报告模板管理的核心业务逻辑:
AiReportConfServiceImpl
报告配置服务实现类,负责:
- Word文档解析(书签、占位符识别)
- AI模型调用与结果处理
- 模板填充与文件生成
AiReportConfController
报告管理REST控制器,提供以下API端点:
| 方法 | 路径 | 功能描述 |
|---|
| POST | /aiReportConf/parse | 解析Word模板文档 |
| POST | /aiReportConf/download | 生成并下载报告 |
2. 模板管理流程
步骤1: 模板文件上传
通过文件服务上传Word模板文件,支持.docx格式。
步骤2: 模板解析
使用parseDoc方法解析Word文档结构:
// 解析Word文档中的书签和占位符
List<AnchorContext> bookmarkList = DefaultAnchors.BOOKMARK_ANCHOR.locate(document);
List<AnchorContext> placeholderList = DefaultAnchors.PLACEHOLDER_ANCHOR.locate(document);
步骤3: 字段配置
在report_marked字段中配置JSON格式的字段映射关系。
步骤4: 模板保存
将解析后的模板信息和配置保存到数据库。
2.2 模板解析功能
系统支持两种类型的占位符:
- 书签(Bookmark): Word文档中的书签标记
- 占位符(Placeholder): 自定义的文本占位符
3. 报告生成流程
3.1 请求参数
AiReportCompletionsDTO
| 字段 | 类型 | 描述 |
|---|
| reportId | Long | 报告配置ID |
| model | String | AI模型标识 |
| prompt | String | 生成提示词 |
| polish | String | 是否需要AI润色 |
3.2 生成流程详解
步骤1: 内容润色(可选)
当polish参数为YES时,系统会对用户输入进行AI润色:
if (YesNoEnum.YES.getCode().equals(completionsDTO.getPolish())) {
String chatted = aiAssistant.getKey().chat(
PromptBuilder.render("report-polish.st",
Map.of("reportTitle", reportConfEntity.getReportTitle(),
"reportPrompt", reportConfEntity.getReportPrompt(),
"prompt", completionsDTO.getPrompt(),
"username", SecurityUtils.getUser().getName(),
"systemTime", DateUtil.now()))
);
completionsDTO.setPrompt(chatted);
}
步骤2: 结构化数据提取
- 构建JSON Schema: 根据模板字段配置构建数据约束
- AI模型调用: 使用JSON Assistant模型提取结构化数据
- 数据修复: 使用
JSONRepairUtil.repair()修复JSON格式
// 构建JSON Schema
JsonSchema jsonSchema = JsonSchema.builder()
.name("ReportResult")
.rootElement(JsonObjectSchema.builder()
.addProperties(fieldProperties)
.required(fieldNames)
.build())
.build();
// 调用AI模型
ChatResponse chatted = aiJSONAssistant.getLeft().chat(builder.build());
String repair = JSONRepairUtil.repair(chatted.aiMessage().text());
步骤3: 模板填充与下载
将AI生成的结构化数据填充到Word模板中:
// 将AI生成的数据填充到Word模板
Map bean = JSONUtil.toBean(repair, Map.class);
EasyWord.of(templateInputStream).doWrite(bean).toOutputStream(response.getOutputStream());