Commit c79273c5d6c151e5a9ed516bd1f4db15d8714643

Authored by xiaoxin
1 parent a82abed2

【测试用例新增】AI:文多多 API 测试完善

yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/wenduoduo/api/WddApi.java
@@ -86,8 +86,29 @@ public class WddApi { @@ -86,8 +86,29 @@ public class WddApi {
86 * 创建任务 86 * 创建任务
87 * 87 *
88 * @param type 类型 88 * @param type 类型
  89 + * 1.智能生成(主题、要求)
  90 + * 2.上传文件生成
  91 + * 3.上传思维导图生成
  92 + * 4.通过word精准转ppt
  93 + * 5.通过网页链接生成
  94 + * 6.粘贴文本内容生成
  95 + * 7.Markdown大纲生成
89 * @param content 内容 96 * @param content 内容
  97 + * type=1 用户输入主题或要求(不超过1000字符)
  98 + * type=2、4 不传
  99 + * type=3 幕布等分享链接
  100 + * type=5 网页链接地址(http/https)
  101 + * type=6 粘贴文本内容(不超过20000字符)
  102 + * type=7 大纲内容(markdown)
90 * @param files 文件列表 103 * @param files 文件列表
  104 + * 文件列表(文件数不超过5个,总大小不超过50M):
  105 + * type=1 上传参考文件(非必传,支持多个)
  106 + * type=2 上传文件(支持多个)
  107 + * type=3 上传思维导图(xmind/mm/md)(仅支持一个)
  108 + * type=4 上传word文件(仅支持一个)
  109 + * type=5、6、7 不传
  110 + * <p>
  111 + * 支持格式:doc/docx/pdf/ppt/pptx/txt/md/xls/xlsx/csv/html/epub/mobi/xmind/mm
91 * @return 任务ID 112 * @return 任务ID
92 */ 113 */
93 public ApiResponse createTask(String token, Integer type, String content, List<MultipartFile> files) { 114 public ApiResponse createTask(String token, Integer type, String content, List<MultipartFile> files) {
@@ -127,7 +148,7 @@ public class WddApi { @@ -127,7 +148,7 @@ public class WddApi {
127 return this.webClient.get() 148 return this.webClient.get()
128 .uri(uri) 149 .uri(uri)
129 .retrieve() 150 .retrieve()
130 - .onStatus(STATUS_PREDICATE, EXCEPTION_FUNCTION.apply(null)) 151 + .onStatus(STATUS_PREDICATE, EXCEPTION_FUNCTION.apply(lang))
131 .bodyToMono(new ParameterizedTypeReference<ApiResponse>() { 152 .bodyToMono(new ParameterizedTypeReference<ApiResponse>() {
132 }) 153 })
133 .<Map<String, Object>>handle((response, sink) -> { 154 .<Map<String, Object>>handle((response, sink) -> {
@@ -164,15 +185,14 @@ public class WddApi { @@ -164,15 +185,14 @@ public class WddApi {
164 * @param question 用户修改建议 185 * @param question 用户修改建议
165 * @return 大纲内容流 186 * @return 大纲内容流
166 */ 187 */
167 - public Flux<Map<String, Object>> updateOutlineContent(String token, String id, String markdown, String question) {  
168 - UpdateOutlineRequest request = new UpdateOutlineRequest(id, markdown, question); 188 + public Flux<Map<String, Object>> updateOutlineContent(String token, UpdateOutlineRequest request) {
169 return this.webClient.post() 189 return this.webClient.post()
170 .uri("/api/ppt/v2/updateContent") 190 .uri("/api/ppt/v2/updateContent")
171 .header("token", token) 191 .header("token", token)
172 .body(Mono.just(request), UpdateOutlineRequest.class) 192 .body(Mono.just(request), UpdateOutlineRequest.class)
173 .retrieve() 193 .retrieve()
174 .onStatus(STATUS_PREDICATE, EXCEPTION_FUNCTION.apply(request)) 194 .onStatus(STATUS_PREDICATE, EXCEPTION_FUNCTION.apply(request))
175 - .bodyToFlux(new ParameterizedTypeReference<Map<String, Object>>() { 195 + .bodyToFlux(new ParameterizedTypeReference<>() {
176 }); 196 });
177 } 197 }
178 198
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/ppt/wdd/WddApiTests.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.ai.ppt.wdd;
  2 +
  3 +import cn.iocoder.yudao.framework.ai.core.model.wenduoduo.api.WddApi;
  4 +import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
  5 +import org.junit.jupiter.api.Disabled;
  6 +import org.junit.jupiter.api.Test;
  7 +import reactor.core.publisher.Flux;
  8 +
  9 +import java.util.Map;
  10 +import java.util.Objects;
  11 +
  12 +
  13 +/**
  14 + * {@link WddApi} 集成测试
  15 + *
  16 + * @author xiaoxin
  17 + */
  18 +public class WddApiTests {
  19 +
  20 + private final WddApi wddApi = new WddApi("https://docmee.cn");
  21 +
  22 +
  23 + private final String token = "sk_FJo7sKErrrEs5CIZz1";
  24 +
  25 +
  26 + @Test //获取token
  27 + @Disabled
  28 + public void testCreateApiToken() {
  29 + // 准备参数
  30 + String apiKey = "ak_RK1rm7TrEv3E3JSWIK";
  31 + WddApi.CreateTokenRequest request = new WddApi.CreateTokenRequest(apiKey);
  32 + // 调用方法
  33 + String token = wddApi.createApiToken(request);
  34 + // 打印结果
  35 + System.out.println(token);
  36 + }
  37 +
  38 +
  39 + @Test // 创建任务
  40 + @Disabled
  41 + public void testCreateTask() {
  42 + WddApi.ApiResponse apiResponse = wddApi.createTask(token, 1, "dify 介绍", null);
  43 + System.out.println(apiResponse);
  44 + }
  45 +
  46 +
  47 + @Test // 创建大纲
  48 + @Disabled
  49 + public void testGenerateOutlineRequest() {
  50 + WddApi.GenerateOutlineRequest request = new WddApi.GenerateOutlineRequest("1901449466163105792", "medium", null, null, null, null);
  51 + //调用
  52 + Flux<Map<String, Object>> flux = wddApi.generateOutlineContent(token, request);
  53 + StringBuffer contentBuffer = new StringBuffer();
  54 + flux.doOnNext(chunk -> {
  55 + contentBuffer.append(chunk.get("text"));
  56 + if (Objects.equals(Integer.parseInt(String.valueOf(chunk.get("status"))), 4)) {
  57 + // status 为 4,最终 markdown 结构树
  58 + System.out.println(JsonUtils.toJsonString(chunk.get("result")));
  59 + System.out.println(" ########################################################################");
  60 + }
  61 + }).then().block();
  62 + // 打印结果
  63 + System.out.println(contentBuffer);
  64 +
  65 + }
  66 +
  67 + @Test // 修改大纲
  68 + @Disabled
  69 + public void testUpdateOutlineContentRequest() {
  70 + WddApi.UpdateOutlineRequest request = new WddApi.UpdateOutlineRequest("1901449466163105792", TEST_OUT_LINE_CONTENT, "精简一点,三个章节即可");
  71 + //调用
  72 + Flux<Map<String, Object>> flux = wddApi.updateOutlineContent(token, request);
  73 + StringBuffer contentBuffer = new StringBuffer();
  74 + flux.doOnNext(chunk -> {
  75 + contentBuffer.append(chunk.get("text"));
  76 + if (Objects.equals(Integer.parseInt(String.valueOf(chunk.get("status"))), 4)) {
  77 + // status 为 4,最终 markdown 结构树
  78 + System.out.println(JsonUtils.toJsonString(chunk.get("result")));
  79 + System.out.println(" ########################################################################");
  80 + }
  81 + }).then().block();
  82 + // 打印结果
  83 + System.out.println(contentBuffer);
  84 +
  85 + }
  86 +
  87 + @Test // 获取 PPT 模版分页
  88 + @Disabled
  89 + public void testGetPptTemplatePage() {
  90 + // 准备参数
  91 + WddApi.TemplateQueryRequest.Filter filter = new WddApi.TemplateQueryRequest.Filter(1, null, null, null);
  92 + WddApi.TemplateQueryRequest request = new WddApi.TemplateQueryRequest(1, 10, filter);
  93 + //调用
  94 + WddApi.PagePptTemplateInfo pptTemplatePage = wddApi.getPptTemplatePage(token, request);
  95 + // 打印结果
  96 + System.out.println(pptTemplatePage);
  97 + }
  98 +
  99 +
  100 + @Test // 生成 PPT
  101 + @Disabled
  102 + public void testGeneratePptx() {
  103 + // 准备参数
  104 + WddApi.GeneratePptxRequest request = new WddApi.GeneratePptxRequest("1900913633555255296", "1804885538940116992", TEST_OUT_LINE_CONTENT);
  105 + //调用
  106 + WddApi.PptInfo pptInfo = wddApi.generatePptx("", request);
  107 + // 打印结果
  108 + System.out.println(pptInfo);
  109 + }
  110 +
  111 +
  112 + private final String TEST_OUT_LINE_CONTENT = """
  113 + # Dify:新一代AI应用开发平台
  114 +
  115 + ## 1 什么是Dify
  116 + ### 1.1 Dify定义:AI应用开发平台
  117 + #### 1.1.1 低代码开发
  118 + Dify是一个低代码AI应用开发平台,旨在简化AI应用的构建过程,让开发者无需编写大量代码即可快速创建各种智能应用。
  119 + #### 1.1.2 核心功能
  120 + Dify的核心功能包括数据集成、模型选择、流程编排和应用部署,提供一站式解决方案,加速AI应用的落地和迭代。
  121 + #### 1.1.3 开源与商业
  122 + Dify提供开源版本和商业版本,满足不同用户的需求,开源版本适合个人开发者和小型团队,商业版本则提供更强大的功能和技术支持。
  123 +
  124 + ### 1.2 Dify解决的问题:AI开发痛点
  125 + #### 1.2.1 开发周期长
  126 + 传统AI应用开发周期长,需要大量的人力和时间投入,Dify通过可视化界面和预置组件,大幅缩短开发周期。
  127 + #### 1.2.2 技术门槛高
  128 + AI技术门槛高,需要专业的知识和技能,Dify降低技术门槛,让更多开发者能够参与到AI应用的开发中来。
  129 + #### 1.2.3 部署和维护复杂
  130 + AI应用的部署和维护复杂,需要专业的运维团队,Dify提供自动化的部署和维护工具,简化流程,降低成本。
  131 +
  132 + ### 1.3 Dify发展历程
  133 + #### 1.3.1 早期探索
  134 + Dify的早期版本主要关注于自然语言处理领域的应用,通过集成各种NLP模型,提供文本分类、情感分析等功能。
  135 + #### 1.3.2 功能扩展
  136 + 随着用户需求的不断增长,Dify的功能逐渐扩展到图像识别、语音识别等领域,支持更多类型的AI应用。
  137 + #### 1.3.3 生态建设
  138 + Dify积极建设开发者生态,提供丰富的文档、教程和案例,帮助开发者更好地使用Dify平台,共同推动AI技术的发展。
  139 +
  140 + ## 2 Dify的核心功能
  141 + ### 2.1 数据集成:连接各种数据源
  142 + #### 2.1.1 支持多种数据源
  143 + Dify支持连接各种数据源,包括关系型数据库、NoSQL数据库、文件系统、云存储等,满足不同场景的数据需求。
  144 + #### 2.1.2 数据转换和清洗
  145 + Dify提供数据转换和清洗功能,可以将不同格式的数据转换为统一的格式,并去除无效数据,提高数据质量。
  146 + #### 2.1.3 数据安全
  147 + Dify注重数据安全,采用各种安全措施保护用户的数据,包括数据加密、访问控制、权限管理等。
  148 +
  149 + ### 2.2 模型选择:丰富的AI模型库
  150 + #### 2.2.1 预置模型
  151 + Dify预置了丰富的AI模型,包括自然语言处理、图像识别、语音识别等领域的模型,开发者可以直接使用这些模型,无需自行训练,极大的简化了开发流程。
  152 + #### 2.2.2 自定义模型
  153 + Dify支持开发者上传自定义模型,满足个性化的需求。开发者可以将自己训练的模型部署到Dify平台上,与其他开发者共享。
  154 + #### 2.2.3 模型评估
  155 + Dify提供模型评估功能,可以对不同模型进行评估,选择最优的模型,提高应用性能。
  156 +
  157 + ### 2.3 流程编排:可视化流程设计器
  158 + #### 2.3.1 可视化界面
  159 + Dify提供可视化的流程设计器,开发者可以通过拖拽组件的方式,设计AI应用的流程,无需编写代码,简单高效。
  160 + #### 2.3.2 灵活的流程控制
  161 + Dify支持灵活的流程控制,可以根据不同的条件执行不同的分支,实现复杂的业务逻辑。
  162 + #### 2.3.3 实时调试
  163 + Dify提供实时调试功能,可以在设计流程的过程中,实时查看流程的执行结果,及时发现和解决问题。
  164 +
  165 + ### 2.4 应用部署:一键部署和管理
  166 + #### 2.4.1 快速部署
  167 + Dify提供一键部署功能,可以将AI应用快速部署到各种环境,包括本地环境、云环境、容器环境等。
  168 + #### 2.4.2 自动伸缩
  169 + Dify支持自动伸缩,可以根据应用的负载自动调整资源,保证应用的稳定性和性能。
  170 + #### 2.4.3 监控和告警
  171 + Dify提供监控和告警功能,可以实时监控应用的状态,并在出现问题时及时告警,方便运维人员进行处理。
  172 +
  173 + ## 3 Dify的特点和优势
  174 + ### 3.1 低代码:降低开发门槛
  175 + #### 3.1.1 可视化开发
  176 + Dify采用可视化开发模式,开发者无需编写大量代码,只需通过拖拽组件即可完成AI应用的开发,降低了开发门槛。
  177 + #### 3.1.2 预置组件
  178 + Dify预置了丰富的组件,包括数据源组件、模型组件、流程控制组件等,开发者可以直接使用这些组件,提高开发效率。
  179 + #### 3.1.3 减少代码量
  180 + Dify可以显著减少代码量,降低开发难度,让更多开发者能够参与到AI应用的开发中来。
  181 +
  182 + ### 3.2 灵活:满足不同场景需求
  183 + #### 3.2.1 支持多种数据源
  184 + Dify支持多种数据源,可以连接各种数据源,满足不同场景的数据需求。
  185 + #### 3.2.2 支持自定义模型
  186 + Dify支持自定义模型,开发者可以将自己训练的模型部署到Dify平台上,满足个性化的需求。
  187 + #### 3.2.3 灵活的流程控制
  188 + Dify支持灵活的流程控制,可以根据不同的条件执行不同的分支,实现复杂的业务逻辑。
  189 +
  190 + ### 3.3 高效:加速应用落地
  191 + #### 3.3.1 快速开发
  192 + Dify通过可视化界面和预置组件,大幅缩短开发周期,加速AI应用的落地。
  193 + #### 3.3.2 快速部署
  194 + Dify提供一键部署功能,可以将AI应用快速部署到各种环境,提高部署效率。
  195 + #### 3.3.3 自动化运维
  196 + Dify提供自动化的运维工具,简化运维流程,降低运维成本。
  197 +
  198 + ### 3.4 开放:构建繁荣生态
  199 + #### 3.4.1 开源社区
  200 + Dify拥有活跃的开源社区,开发者可以在社区中交流经验、分享资源、共同推动Dify的发展。
  201 + #### 3.4.2 丰富的文档
  202 + Dify提供丰富的文档、教程和案例,帮助开发者更好地使用Dify平台。
  203 + #### 3.4.3 API支持
  204 + Dify提供API支持,开发者可以通过API将Dify集成到自己的系统中,扩展Dify的功能。
  205 +
  206 + ## 4 Dify的使用场景
  207 + ### 4.1 智能客服:提升客户服务质量
  208 + #### 4.1.1 自动回复
  209 + Dify可以用于构建智能客服系统,实现自动回复客户的常见问题,提高客户服务效率。
  210 + #### 4.1.2 情感分析
  211 + Dify可以对客户的语音或文本进行情感分析,判断客户的情绪,并根据情绪提供个性化的服务。
  212 + #### 4.1.3 知识库问答
  213 + Dify可以构建知识库问答系统,让客户通过提问的方式获取所需的信息,提高客户满意度。
  214 +
  215 + ### 4.2 金融风控:提高风险识别能力
  216 + #### 4.2.1 欺诈检测
  217 + Dify可以用于构建金融风控系统,实现欺诈检测,识别可疑交易,降低风险。
  218 + #### 4.2.2 信用评估
  219 + Dify可以对用户的信用进行评估,并根据评估结果提供不同的金融服务。
  220 + #### 4.2.3 反洗钱
  221 + Dify可以用于反洗钱,识别可疑资金流动,防止犯罪行为。
  222 +
  223 + ### 4.3 智慧医疗:提升医疗服务水平
  224 + #### 4.3.1 疾病诊断
  225 + Dify可以用于辅助疾病诊断,提高诊断准确率,缩短诊断时间。
  226 + #### 4.3.2 药物研发
  227 + Dify可以用于药物研发,加速新药的发现和开发。
  228 + #### 4.3.3 智能健康管理
  229 + Dify可以构建智能健康管理系统,为用户提供个性化的健康建议和服务。
  230 +
  231 + ### 4.4 智慧城市:提升城市管理效率
  232 + #### 4.4.1 交通优化
  233 + Dify可以用于交通优化,提高交通效率,缓解交通拥堵。
  234 + #### 4.4.2 环境监测
  235 + Dify可以用于环境监测,实时监测空气质量、水质等环境指标,及时发现和解决环境问题。
  236 + #### 4.4.3 智能安防
  237 + Dify可以用于智能安防,提高城市安全水平,预防犯罪行为。
  238 +
  239 + ## 5 Dify的成功案例
  240 + ### 5.1 Case 1:某电商平台的智能客服
  241 + #### 5.1.1 项目背景
  242 + 该电商平台客户服务压力大,人工客服成本高,需要一种智能化的解决方案。
  243 + #### 5.1.2 解决方案
  244 + 使用Dify构建智能客服系统,实现自动回复客户的常见问题,并根据客户的情绪提供个性化的服务。
  245 + #### 5.1.3 效果
  246 + 客户服务效率提高50%,客户满意度提高20%,人工客服成本降低30%。
  247 +
  248 + ### 5.2 Case 2:某银行的金融风控系统
  249 + #### 5.2.1 项目背景
  250 + 该银行面临日益增长的金融风险,需要一种更有效的风险识别和控制手段。
  251 + #### 5.2.2 解决方案
  252 + 使用Dify构建金融风控系统,实现欺诈检测、信用评估和反洗钱等功能,提高风险识别能力。
  253 + #### 5.2.3 效果
  254 + 欺诈交易识别率提高40%,信用评估准确率提高30%,洗钱风险降低25%。
  255 +
  256 + ### 5.3 Case 3:某医院的辅助疾病诊断系统
  257 + #### 5.3.1 项目背景
  258 + 该医院医生工作压力大,疾病诊断准确率有待提高,需要一种辅助诊断工具。
  259 + #### 5.3.2 解决方案
  260 + 使用Dify构建辅助疾病诊断系统,根据患者的病历和症状,提供诊断建议,提高诊断准确率。
  261 + #### 5.3.3 效果
  262 + 疾病诊断准确率提高20%,诊断时间缩短15%,医生工作效率提高10%。
  263 +
  264 + ## 6 Dify的未来展望
  265 + ### 6.1 技术升级
  266 + #### 6.1.1 模型优化
  267 + Dify将不断优化预置模型,提高模型性能,并支持更多类型的AI模型。
  268 + #### 6.1.2 流程引擎升级
  269 + Dify将升级流程引擎,提高流程的灵活性和可扩展性,支持更复杂的业务逻辑。
  270 + #### 6.1.3 平台性能优化
  271 + Dify将不断优化平台性能,提高平台的稳定性和可靠性,满足大规模应用的需求。
  272 +
  273 + ### 6.2 生态建设
  274 + #### 6.2.1 社区建设
  275 + Dify将继续加强开源社区建设,吸引更多开发者参与,共同推动Dify的发展。
  276 + #### 6.2.2 合作伙伴拓展
  277 + Dify将拓展合作伙伴,与更多的企业和机构合作,共同推动AI技术的应用。
  278 + #### 6.2.3 应用商店
  279 + Dify将构建应用商店,让开发者可以分享自己的应用,用户可以购买和使用这些应用,构建繁荣的生态系统。
  280 +
  281 + ### 6.3 应用领域拓展
  282 + #### 6.3.1 智能制造
  283 + Dify将拓展到智能制造领域,为企业提供智能化的生产管理和质量控制解决方案。
  284 + #### 6.3.2 智慧农业
  285 + Dify将拓展到智慧农业领域,为农民提供智能化的种植和养殖管理解决方案。
  286 + #### 6.3.3 更多领域
  287 + Dify将拓展到更多领域,为各行各业提供智能化的解决方案,推动社会发展。
  288 +
  289 + ## 7 总结
  290 + ### 7.1 Dify的价值
  291 + #### 7.1.1 降低AI开发门槛
  292 + Dify通过低代码的方式,让更多开发者能够参与到AI应用的开发中来。
  293 + #### 7.1.2 加速AI应用落地
  294 + Dify提供一站式解决方案,加速AI应用的落地和迭代。
  295 + #### 7.1.3 构建繁荣的AI生态
  296 + Dify通过开源社区和应用商店,构建繁荣的AI生态系统。
  297 +
  298 + ### 7.2 共同发展
  299 + #### 7.2.1 欢迎加入Dify社区
  300 + 欢迎更多开发者加入Dify社区,共同推动Dify的发展。
  301 + #### 7.2.2 合作共赢
  302 + 期待与更多的企业和机构合作,共同推动AI技术的应用。
  303 + #### 7.2.3 共创未来
  304 + 让我们一起用AI技术改变世界,共创美好未来。""";
  305 +
  306 +}