feat(AI执行器): 优化 DifyWorkflowJobHandler 配置方式

pull/67/head
xuxueli 4 months ago
parent 8787f70ce8
commit b96d22967d

@ -843,6 +843,8 @@ XXL-JOB 是一个开源且免费项目,其正在进行的开发完全得益于
- 689、广东西欧克实业有限公司
- 690、唱吧麦颂KTV
- 691、联通云
- 692、北京爱话本科技有限公司
- 693、北京起创科技有限公司
- ……
> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。

@ -786,6 +786,8 @@ XXL-JOB是一个分布式任务调度平台其核心设计目标是开发迅
- 689、广东西欧克实业有限公司
- 690、唱吧麦颂KTV
- 691、联通云
- 692、北京爱话本科技有限公司
- 693、北京起创科技有限公司
- ……
> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。
@ -1207,13 +1209,15 @@ public void demoJobHandler() throws Exception {
"prompt": "{模型prompt可选信息}"
}
```
- b、difyWorkflowJobHandlerDifyWorkflow 任务支持自定义inputs、user等输入信息示例参数如下
- b、difyWorkflowJobHandlerDifyWorkflow 任务支持自定义inputs、user、baseUrl、apiKey 等输入信息,示例参数如下;
```
{
"inputs":{ // inputs 为dify工作流任务参数参数不固定结合各自 workflow 自行定义。
"input":"{用户输入信息}" // 该参数为示例变量,需要 workflow 的“开始”节点 自定义参数 “input”可自行调整或删除。
},
"user": "{用户标识,选填}"
"user": "xxl-job", // 用户标识,选填
"baseUrl": "http://localhost/v1", // Dify应用的 访问API 地址,需要从 Dify 系统获取;
"apiKey": "xxx" // Dify应用的 API-Key需要从 Dify 系统获取;
}
```
@ -2521,7 +2525,7 @@ public void execute() {
```
- 2、【新增】新增多个 Bean模式 AI任务Handler如 ollamaJobHandler、difyWorkflowJobHandler 等支持快速集成开发AI任务。任务配置可参考 [AI执行器](https://www.xuxueli.com/xxl-job/#原生内置Bean模式任务AI执行器)
- a、ollamaJobHandler OllamaChat任务支持自定义prompt、input等输入信息。
- b、difyWorkflowJobHandlerDifyWorkflow 任务支持自定义inputs、user等输入信息。
- b、difyWorkflowJobHandlerDifyWorkflow 任务支持自定义inputs、user、baseUrl、apiKey等输入信息。
- 3、【修复】合并PR-3708、PR-3704解决固定速度调度模式下下次计算执行时间小概率间隔超长时不准问题。
- 4、【修复】任务操作逻辑优化修复边界情况下逻辑中断问题 (ISSUE-2081)。
- 5、【修复】调度中心Cron前端组件优化解决week配置与后端兼容性问题 (ISSUE-2220)。
@ -2533,8 +2537,9 @@ public void execute() {
### 7.39 版本 v3.1.1 Release Notes[规划中]
- 1、[规划中]登陆态Token生成逻辑优化混淆登陆时间属性降低token泄漏风险
- 2、[规划中]组件扫描改为BeanPostProcessor方式避免小概率情况下提前初始化底层组件移除单例写法汇总factory统一管理
- 1、【调整】AI执行器任务difyWorkflowJobHandler优化将 “baseUrl、apiKey” 等Dify配置信息从执行器侧文件类配置调整至调度中心“任务参数”动态配置提升多Dify应用集成效率。
- 2、[规划中]登陆态Token生成逻辑优化混淆登陆时间属性降低token泄漏风险
- 3、[规划中]组件扫描改为BeanPostProcessor方式避免小概率情况下提前初始化底层组件移除单例写法汇总factory统一管理
### TODO LIST
- 1、调度隔离调度中心针对不同执行器各自维护不同的调度和远程触发组件。

@ -157,7 +157,9 @@ VALUES (1, 1, '示例任务01', now(), now(), 'XXL', '', 'CRON', '0 0 0 * * ? *'
"inputs":{
"input":"查询班级各学科前三名"
},
"user": "xxl-job"
"user": "xxl-job",
"baseUrl": "http://localhost/v1",
"apiKey": "app-OUVgNUOQRIMokfmuJvBJoUTN"
}', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE',
now(), '')
;

@ -79,10 +79,9 @@ public class IndexController {
// --------------------------------- dify workflow ---------------------------------
@Value("${dify.api-key}")
private String apiKey;
@Value("${dify.base-url}")
private String baseUrl;
// dify config sample
private final String apiKey = "http://localhost/v1";
private final String baseUrl = "app-OUVgNUOQRIMokfmuJvBJoUTN";
@GetMapping("/dify/simple")
@ResponseBody

@ -10,7 +10,6 @@ import io.github.imfangs.dify.client.model.workflow.WorkflowRunRequest;
import io.github.imfangs.dify.client.model.workflow.WorkflowRunResponse;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@ -103,12 +102,6 @@ public class AIXxlJob {
}
@Value("${dify.api-key}")
private String apiKey;
@Value("${dify.base-url}")
private String baseUrl;
/**
* 2dify Workflow
*
@ -143,6 +136,11 @@ public class AIXxlJob {
if (difyParam.getUser() == null) {
difyParam.setUser("xxl-job");
}
if (difyParam.getBaseUrl()==null || difyParam.getApiKey()==null) {
XxlJobHelper.log("baseUrl or apiKey invalid.");
XxlJobHelper.handleFail();
return;
}
} catch (Exception e) {
XxlJobHelper.log(new RuntimeException("DifyParam parse error", e));
XxlJobHelper.handleFail();
@ -161,7 +159,7 @@ public class AIXxlJob {
.build();
// dify invoke
DifyWorkflowClient workflowClient = DifyClientFactory.createWorkflowClient(baseUrl, apiKey);
DifyWorkflowClient workflowClient = DifyClientFactory.createWorkflowClient(difyParam.getBaseUrl(), difyParam.getApiKey());
WorkflowRunResponse response = workflowClient.runWorkflow(request);
// response
@ -171,15 +169,25 @@ public class AIXxlJob {
private static class DifyParam{
/**
* App
* dify input, Dify App
*/
private Map<String, Object> inputs;
/**
*
* dify user
*/
private String user;
/**
* dify baseUrl
*/
private String baseUrl;
/**
* dify apiKey
*/
private String apiKey;
public Map<String, Object> getInputs() {
return inputs;
}
@ -196,7 +204,22 @@ public class AIXxlJob {
this.user = user;
}
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
}
}

@ -37,9 +37,3 @@ spring.ai.ollama.chat.enabled=true
### chat modelmust install it locally through ollama
spring.ai.ollama.chat.options.model=qwen2.5:1.5b
spring.ai.ollama.chat.options.temperature=0.8
### dify url
dify.base-url=http://localhost/v1
### dify api-key
dify.api-key=app-OUVgNUOQRIMokfmuJvBJoUTN

Loading…
Cancel
Save