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

字段类型描述
reportIdLong报告配置ID
modelStringAI模型标识
promptString生成提示词
polishString是否需要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: 结构化数据提取
  1. 构建JSON Schema: 根据模板字段配置构建数据约束
  2. AI模型调用: 使用JSON Assistant模型提取结构化数据
  3. 数据修复: 使用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());