From 7add7065cb3176878f76d08f65c9a7ef385fa71f Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Fri, 13 Jun 2025 16:40:08 +0800 Subject: [PATCH] 'commit' --- .../com/dsideal/base/Tools/AiGenerate.java | 101 +++++++++++------- .../com/dsideal/base/Tools/AiPptDemo2.java | 62 +++++++++++ .../com/dsideal/base/Tools/AiPptDemo3.java | 45 ++++++++ .../com/dsideal/base/Tools/AiPptDemo4.java | 49 +++++++++ ...源对比分析报告_20250613_162421.docx | Bin 0 -> 4118 bytes 5 files changed, 220 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/dsideal/base/Tools/AiPptDemo2.java create mode 100644 src/main/java/com/dsideal/base/Tools/AiPptDemo3.java create mode 100644 src/main/java/com/dsideal/base/Tools/AiPptDemo4.java create mode 100644 教育资源对比分析报告_20250613_162421.docx diff --git a/src/main/java/com/dsideal/base/Tools/AiGenerate.java b/src/main/java/com/dsideal/base/Tools/AiGenerate.java index 100f8e94..08d8aac8 100644 --- a/src/main/java/com/dsideal/base/Tools/AiGenerate.java +++ b/src/main/java/com/dsideal/base/Tools/AiGenerate.java @@ -7,7 +7,6 @@ import com.dsideal.base.Plugin.YamlProp; import com.dsideal.base.Tools.Util.CallDeepSeek; import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; import com.dsideal.base.Tools.Util.PptAIKit; -import com.dsideal.base.Tools.Util.HttpUtils; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import cn.hutool.json.JSONUtil; @@ -16,7 +15,6 @@ import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; -import java.io.File; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Date; @@ -65,8 +63,6 @@ public class AiGenerate extends PptAIKit { // 构建分析提示词 String analysisPrompt = createAnalysisPrompt(dataContent.toString()); - // 构建PPT生成提示词 - String pptPrompt = createPptPrompt(dataContent.toString(), biJiao); // 生成输出文件路径 String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); @@ -97,7 +93,7 @@ public class AiGenerate extends PptAIKit { // 生成PPT // 生成PPT System.out.println("\n\n=== 开始生成PPT ==="); - generatePptPresentation(biJiao, pptPrompt); + generatePptPresentation(analysisPrompt); } catch (Exception e) { System.err.println("保存文件时出错: " + e.getMessage()); @@ -133,56 +129,87 @@ public class AiGenerate extends PptAIKit { /** * 生成PPT演示文稿 */ - private static void generatePptPresentation(String[] cities, String pptPrompt) { + private static void generatePptPresentation(String analysisContent) { try { - // 创建主题 - String subject = String.join("与", cities) + "教育资源配置对比分析"; - String uid = "user123"; + String uid = "test"; + // 第一步:使用DeepSeek生成简化的PPT提示词 + String simplifiedPptPrompt = generateSimplifiedPptPrompt(analysisContent); - // 创建 api token + // 创建 api token (有效期2小时,建议缓存到redis,同一个 uid 创建时之前的 token 会在10秒内失效) String apiToken = PptAIKit.createApiToken(uid, null); - System.out.println("PPT API token: " + apiToken); + System.out.println("api token: " + apiToken); - // 生成大纲 - 修正参数顺序 - System.out.println("\n\n========== 正在生成PPT大纲 ==========\n"); - String outline = PptAIKit.generateOutline(apiToken, subject, null, pptPrompt); - System.out.println("PPT大纲生成完成"); + // 生成大纲 + System.out.println("\n\n========== 正在生成大纲 =========="); + String outline = PptAIKit.generateOutline(apiToken, null, null, simplifiedPptPrompt); - // 生成大纲内容 - 修正参数 - System.out.println("\n\n========== 正在生成PPT内容 ==========\n"); - String markdown = PptAIKit.generateContent(apiToken, outline, null, pptPrompt); - System.out.println("PPT内容生成完成"); + // 生成大纲内容 + System.out.println("\n\n========== 正在生成大纲内容 =========="); + String markdown = PptAIKit.generateContent(apiToken, outline, null, simplifiedPptPrompt); - // 随机选择一个模板 - System.out.println("\n\n========== 选择PPT模板 ==========\n"); + // 随机一个模板 + System.out.println("\n\n========== 随机选择模板 =========="); String templateId = PptAIKit.randomOneTemplateId(apiToken); - System.out.println("选择的模板ID: " + templateId); + System.out.println(templateId); // 生成PPT - System.out.println("\n\n========== 正在生成PPT文件 ==========\n"); + System.out.println("\n\n========== 正在生成PPT =========="); JSONObject pptInfo = PptAIKit.generatePptx(apiToken, templateId, markdown, false); String pptId = pptInfo.getString("id"); - System.out.println("PPT ID: " + pptId); - System.out.println("PPT主题:" + pptInfo.getString("subject")); - System.out.println("PPT封面:" + pptInfo.getString("coverUrl") + "?token=" + apiToken); - - // 下载PPT到当前目录 - System.out.println("\n\n========== 正在下载PPT ==========\n"); - JSONObject result = PptAIKit.downloadPptx(apiToken, pptId); - String url = result.getString("fileUrl"); - System.out.println("PPT下载链接:" + url); + System.out.println("pptId: " + pptId); + System.out.println("ppt主题:" + pptInfo.getString("subject")); + System.out.println("ppt封面:" + pptInfo.getString("coverUrl") + "?token=" + apiToken); + } catch (Exception e) { + e.printStackTrace(); + } + } - String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); - String savePath = System.getProperty("user.dir") + File.separator + "教育资源对比分析PPT_" + timestamp + ".pptx"; - HttpUtils.download(url, new File(savePath)); - System.out.println("PPT下载完成,保存路径:" + savePath); + // 新增方法:使用DeepSeek生成简化的PPT提示词 + private static String generateSimplifiedPptPrompt(String analysisContent) { + try { + // 构建DeepSeek的请求提示词 + String deepseekPrompt = "请根据以下教育数据分析内容,生成一个简洁的PPT制作提示词。" + + "要求:\n" + + "1. 提取关键数据点和结论\n" + + "2. 突出对比分析结果\n" + + "3. 控制字数在500字以内\n" + + "4. 适合PPT展示的结构化内容\n\n" + + "原始分析内容:\n" + analysisContent; + + // 添加PPT结构要求 + return "请根据以下内容生成PPT:\n\n" + + "PPT结构要求:\n" + + "1. 封面 - 标题和概述\n" + + "2. 目录 - 内容导航\n" + + "3. 数据概览 - 整体情况\n" + + "4. 详细分析 - 分项对比\n" + + "5. 问题识别 - 发现的问题\n" + + "6. 建议方案 - 解决措施\n" + + "7. 总结 - 结论和展望\n\n" + + "内容要点:\n" + deepseekPrompt; } catch (Exception e) { - System.err.println("生成PPT时出错: " + e.getMessage()); e.printStackTrace(); + // 如果DeepSeek调用失败,返回基础的PPT提示词 + return createBasicPptPrompt(); } } + + // 基础PPT提示词(作为备用方案) + private static String createBasicPptPrompt() { + return "请根据教育资源配置数据生成PPT:\n\n" + + "PPT结构要求:\n" + + "1. 封面 - 标题和概述\n" + + "2. 目录 - 内容导航\n" + + "3. 数据概览 - 整体情况\n" + + "4. 详细分析 - 分项对比\n" + + "5. 问题识别 - 发现的问题\n" + + "6. 建议方案 - 解决措施\n" + + "7. 总结 - 结论和展望\n\n" + + "请基于上传的数据生成具体的PPT内容。"; + } + /** * 创建分析提示词 */ diff --git a/src/main/java/com/dsideal/base/Tools/AiPptDemo2.java b/src/main/java/com/dsideal/base/Tools/AiPptDemo2.java new file mode 100644 index 00000000..eef46636 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/AiPptDemo2.java @@ -0,0 +1,62 @@ +package com.dsideal.base.Tools; + +import com.alibaba.fastjson.JSONObject; +import com.dsideal.base.Tools.Util.HttpUtils; +import com.dsideal.base.Tools.Util.PptAIKit; + +import javax.swing.filechooser.FileSystemView; +import java.io.File; +import java.util.Map; + +/** + * 异步流式生成 PPT + * + * @author veasion + * @date 2024/7/12 + */ +public class AiPptDemo2 extends PptAIKit { + public static void main(String[] args) throws Exception { + // 第三方用户ID(数据隔离) + String uid = "test"; + // 文档文件,支持 word/excel/ppt/md/txt/pdf 等类型 + File file = new File("README.md"); + + // 创建 api token (有效期2小时,建议缓存到redis,同一个 uid 创建时之前的 token 会在10秒内失效) + String apiToken = PptAIKit.createApiToken(uid, null); + System.out.println("apiToken: " + apiToken); + + // 解析文件 + String dataUrl = PptAIKit.parseFileData(apiToken, file, null, null); + + // 生成大纲 + System.out.println("\n\n========== 正在生成大纲 =========="); + String outline = PptAIKit.generateOutline(apiToken, null, dataUrl, null); + + // 异步生成大纲内容 + System.out.println("\n\n========== 正在异步生成大纲内容 =========="); + Map pptInfo = PptAIKit.asyncGenerateContent(apiToken, outline, dataUrl, null, null); + + String pptId = pptInfo.get("id"); + + // 下载PPT到桌面 + System.out.println("\n\n========== 正在下载PPT =========="); + System.out.println("pptId: " + pptId); + String url = null; + for (int i = 0; i < 30; i++) { + // 等待PPT文件可下载 + JSONObject result = PptAIKit.downloadPptx(apiToken, pptId); + if (result != null) { + url = result.getString("fileUrl"); + if (url != null) { + break; + } + } + Thread.sleep(1000); + } + System.out.println("ppt链接:" + url); + String savePath = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + File.separator + pptId + ".pptx"; + HttpUtils.download(url, new File(savePath)); + System.out.println("ppt下载完成,保存路径:" + savePath); + } + +} diff --git a/src/main/java/com/dsideal/base/Tools/AiPptDemo3.java b/src/main/java/com/dsideal/base/Tools/AiPptDemo3.java new file mode 100644 index 00000000..76785699 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/AiPptDemo3.java @@ -0,0 +1,45 @@ +package com.dsideal.base.Tools; + +import com.alibaba.fastjson.JSONObject; +import com.dsideal.base.Tools.Util.HttpUtils; +import com.dsideal.base.Tools.Util.PptAIKit; + +import javax.swing.filechooser.FileSystemView; +import java.io.File; + +/** + * 通过主题直接生成 PPT + * + * @author veasion + * @date 2024/7/12 + */ +public class AiPptDemo3 extends PptAIKit { + + public static void main(String[] args) throws Exception { + // 第三方用户ID(数据隔离) + String uid = "test"; + String subject = "AI未来的发展"; + + // 创建 api token (有效期2小时,建议缓存到redis,同一个 uid 创建时之前的 token 会在10秒内失效) + String apiToken = PptAIKit.createApiToken(uid, null); + System.out.println("apiToken: " + apiToken); + + // 通过主题直接生成PPT + System.out.println("\n正在生成PPT...\n"); + JSONObject pptInfo = PptAIKit.directGeneratePptx(apiToken, true, null, subject, null, null, false); + + String pptId = pptInfo.getString("id"); + String fileUrl = pptInfo.getString("fileUrl"); + System.out.println("\n\n==============="); + System.out.println("pptId: " + pptId); + System.out.println("ppt主题:" + pptInfo.getString("subject")); + System.out.println("ppt封面:" + pptInfo.getString("coverUrl")); + System.out.println("ppt链接:" + fileUrl); + + // 下载PPT到桌面 + String savePath = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + File.separator + pptId + ".pptx"; + HttpUtils.download(fileUrl, new File(savePath)); + System.out.println("ppt下载完成,保存路径:" + savePath); + } + +} diff --git a/src/main/java/com/dsideal/base/Tools/AiPptDemo4.java b/src/main/java/com/dsideal/base/Tools/AiPptDemo4.java new file mode 100644 index 00000000..b35b5a70 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/AiPptDemo4.java @@ -0,0 +1,49 @@ +package com.dsideal.base.Tools; + +import com.alibaba.fastjson.JSONObject; +import com.dsideal.base.Tools.Util.HttpUtils; +import com.dsideal.base.Tools.Util.PptAIKit; + +import javax.swing.filechooser.FileSystemView; +import java.io.File; + +/** + * 通过文件直接生成 PPT + * + * @author veasion + * @date 2024/7/12 + */ +public class AiPptDemo4 { + + public static void main(String[] args) throws Exception { + // 第三方用户ID(数据隔离) + String uid = "test"; + // 文档文件,支持 word/excel/ppt/md/txt/pdf 等类型 + File file = new File("README.md"); + + // 创建 api token (有效期2小时,建议缓存到redis,同一个 uid 创建时之前的 token 会在10秒内失效) + String apiToken = PptAIKit.createApiToken( uid, null); + System.out.println("apiToken: " + apiToken); + + // 解析文件 + String dataUrl = PptAIKit.parseFileData(apiToken, file, null, null); + + // 通过文件直接生成PPT + System.out.println("\n正在生成PPT...\n"); + JSONObject pptInfo = PptAIKit.directGeneratePptx(apiToken, true, null, null, dataUrl, null, false); + + String pptId = pptInfo.getString("id"); + String fileUrl = pptInfo.getString("fileUrl"); + System.out.println("\n\n==============="); + System.out.println("pptId: " + pptId); + System.out.println("ppt主题:" + pptInfo.getString("subject")); + System.out.println("ppt封面:" + pptInfo.getString("coverUrl")); + System.out.println("ppt链接:" + fileUrl); + + // 下载PPT到桌面 + String savePath = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + File.separator + pptId + ".pptx"; + HttpUtils.download(fileUrl, new File(savePath)); + System.out.println("ppt下载完成,保存路径:" + savePath); + } + +} diff --git a/教育资源对比分析报告_20250613_162421.docx b/教育资源对比分析报告_20250613_162421.docx new file mode 100644 index 0000000000000000000000000000000000000000..34a87746768dc14ca7f64f5475e01c442b38a56b GIT binary patch literal 4118 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 B^?LvS literal 0 HcmV?d00001