Commit bce63cd04f985b7b3bfb350f2d8b1002ac8e22c5
1 parent
911f5f8b
feat: 完善AI工作流运行测试(通义千问)
Showing
3 changed files
with
31 additions
and
22 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/AiModelService.java
| @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 6 | import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelPageReqVO; | 6 | import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelPageReqVO; |
| 7 | import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReqVO; | 7 | import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReqVO; |
| 8 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; | 8 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; |
| 9 | +import dev.tinyflow.core.Tinyflow; | ||
| 9 | import jakarta.validation.Valid; | 10 | import jakarta.validation.Valid; |
| 10 | import org.springframework.ai.chat.model.ChatModel; | 11 | import org.springframework.ai.chat.model.ChatModel; |
| 11 | import org.springframework.ai.image.ImageModel; | 12 | import org.springframework.ai.image.ImageModel; |
| @@ -131,4 +132,12 @@ public interface AiModelService { | @@ -131,4 +132,12 @@ public interface AiModelService { | ||
| 131 | */ | 132 | */ |
| 132 | VectorStore getOrCreateVectorStore(Long id, Map<String, Class<?>> metadataFields); | 133 | VectorStore getOrCreateVectorStore(Long id, Map<String, Class<?>> metadataFields); |
| 133 | 134 | ||
| 135 | + /** | ||
| 136 | + * 获取 Tinyflow 所需 LLm Provider | ||
| 137 | + * | ||
| 138 | + * @param tinyflow tinyflow | ||
| 139 | + * @param modelId AI 模型 ID | ||
| 140 | + */ | ||
| 141 | + void getLLmProvider4Tinyflow(Tinyflow tinyflow, Long modelId); | ||
| 142 | + | ||
| 134 | } | 143 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/AiModelServiceImpl.java
| @@ -12,6 +12,9 @@ import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReq | @@ -12,6 +12,9 @@ import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReq | ||
| 12 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO; | 12 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO; |
| 13 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; | 13 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; |
| 14 | import cn.iocoder.yudao.module.ai.dal.mysql.model.AiChatMapper; | 14 | import cn.iocoder.yudao.module.ai.dal.mysql.model.AiChatMapper; |
| 15 | +import com.agentsflex.llm.qwen.QwenLlm; | ||
| 16 | +import com.agentsflex.llm.qwen.QwenLlmConfig; | ||
| 17 | +import dev.tinyflow.core.Tinyflow; | ||
| 15 | import jakarta.annotation.Resource; | 18 | import jakarta.annotation.Resource; |
| 16 | import org.springframework.ai.chat.model.ChatModel; | 19 | import org.springframework.ai.chat.model.ChatModel; |
| 17 | import org.springframework.ai.embedding.EmbeddingModel; | 20 | import org.springframework.ai.embedding.EmbeddingModel; |
| @@ -168,4 +171,20 @@ public class AiModelServiceImpl implements AiModelService { | @@ -168,4 +171,20 @@ public class AiModelServiceImpl implements AiModelService { | ||
| 168 | // return modelFactory.getOrCreateVectorStore(MilvusVectorStore.class, embeddingModel, metadataFields); | 171 | // return modelFactory.getOrCreateVectorStore(MilvusVectorStore.class, embeddingModel, metadataFields); |
| 169 | } | 172 | } |
| 170 | 173 | ||
| 174 | + @Override | ||
| 175 | + public void getLLmProvider4Tinyflow(Tinyflow tinyflow, Long modelId) { | ||
| 176 | + AiModelDO model = validateModel(modelId); | ||
| 177 | + AiApiKeyDO apiKey = apiKeyService.validateApiKey(model.getKeyId()); | ||
| 178 | + AiPlatformEnum platform = AiPlatformEnum.validatePlatform(apiKey.getPlatform()); | ||
| 179 | + switch (platform) { | ||
| 180 | + // TODO @lesan 考虑到未来不需要使用agents-flex 现在仅测试通义千问 | ||
| 181 | + case TONG_YI: | ||
| 182 | + QwenLlmConfig qwenLlmConfig = new QwenLlmConfig(); | ||
| 183 | + qwenLlmConfig.setApiKey(apiKey.getApiKey()); | ||
| 184 | + qwenLlmConfig.setModel(model.getModel()); | ||
| 185 | + tinyflow.setLlmProvider(id -> new QwenLlm(qwenLlmConfig)); | ||
| 186 | + break; | ||
| 187 | + } | ||
| 188 | + } | ||
| 189 | + | ||
| 171 | } | 190 | } |
| 172 | \ No newline at end of file | 191 | \ No newline at end of file |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/workflow/AiWorkflowServiceImpl.java
| @@ -7,10 +7,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | @@ -7,10 +7,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 7 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowPageReqVO; | 7 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowPageReqVO; |
| 8 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowSaveReqVO; | 8 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowSaveReqVO; |
| 9 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowTestReqVO; | 9 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowTestReqVO; |
| 10 | -import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO; | ||
| 11 | import cn.iocoder.yudao.module.ai.dal.dataobject.workflow.AiWorkflowDO; | 10 | import cn.iocoder.yudao.module.ai.dal.dataobject.workflow.AiWorkflowDO; |
| 12 | import cn.iocoder.yudao.module.ai.dal.mysql.workflow.AiWorkflowMapper; | 11 | import cn.iocoder.yudao.module.ai.dal.mysql.workflow.AiWorkflowMapper; |
| 13 | -import cn.iocoder.yudao.module.ai.service.model.AiApiKeyService; | 12 | +import cn.iocoder.yudao.module.ai.service.model.AiModelService; |
| 14 | import com.alibaba.fastjson.JSONArray; | 13 | import com.alibaba.fastjson.JSONArray; |
| 15 | import com.alibaba.fastjson.JSONObject; | 14 | import com.alibaba.fastjson.JSONObject; |
| 16 | import dev.tinyflow.core.Tinyflow; | 15 | import dev.tinyflow.core.Tinyflow; |
| @@ -37,7 +36,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService { | @@ -37,7 +36,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService { | ||
| 37 | private AiWorkflowMapper workflowMapper; | 36 | private AiWorkflowMapper workflowMapper; |
| 38 | 37 | ||
| 39 | @Resource | 38 | @Resource |
| 40 | - private AiApiKeyService apiKeyService; | 39 | + private AiModelService apiModelService; |
| 41 | 40 | ||
| 42 | @Override | 41 | @Override |
| 43 | public Long createWorkflow(AiWorkflowSaveReqVO createReqVO) { | 42 | public Long createWorkflow(AiWorkflowSaveReqVO createReqVO) { |
| @@ -118,25 +117,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService { | @@ -118,25 +117,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService { | ||
| 118 | switch (node.getString("type")) { | 117 | switch (node.getString("type")) { |
| 119 | case "llmNode": | 118 | case "llmNode": |
| 120 | JSONObject data = node.getJSONObject("data"); | 119 | JSONObject data = node.getJSONObject("data"); |
| 121 | - AiApiKeyDO apiKey = apiKeyService.getApiKey(data.getLong("llmId")); | ||
| 122 | - switch (apiKey.getPlatform()) { | ||
| 123 | - // TODO @lesan 需要讨论一下这里怎么弄 | ||
| 124 | - // TODO @lesan llmId 对应 model 的编号如何?这样的话,就是 apiModelService 提供一个获取 LLM 的方法。然后,创建的方法,也在 AiModelFactory 提供。可以先接个 deepseek 先。deepseek yyds! | ||
| 125 | - case "OpenAI": | ||
| 126 | - break; | ||
| 127 | - case "Ollama": | ||
| 128 | - break; | ||
| 129 | - case "YiYan": | ||
| 130 | - break; | ||
| 131 | - case "XingHuo": | ||
| 132 | - break; | ||
| 133 | - case "TongYi": | ||
| 134 | - break; | ||
| 135 | - case "DeepSeek": | ||
| 136 | - break; | ||
| 137 | - case "ZhiPu": | ||
| 138 | - break; | ||
| 139 | - } | 120 | + apiModelService.getLLmProvider4Tinyflow(tinyflow, data.getLong("llmId")); |
| 140 | break; | 121 | break; |
| 141 | case "internalNode": | 122 | case "internalNode": |
| 142 | break; | 123 | break; |