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 | import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelPageReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReqVO; |
| 8 | 8 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; |
| 9 | +import dev.tinyflow.core.Tinyflow; | |
| 9 | 10 | import jakarta.validation.Valid; |
| 10 | 11 | import org.springframework.ai.chat.model.ChatModel; |
| 11 | 12 | import org.springframework.ai.image.ImageModel; |
| ... | ... | @@ -131,4 +132,12 @@ public interface AiModelService { |
| 131 | 132 | */ |
| 132 | 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 | 12 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO; |
| 13 | 13 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; |
| 14 | 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 | 18 | import jakarta.annotation.Resource; |
| 16 | 19 | import org.springframework.ai.chat.model.ChatModel; |
| 17 | 20 | import org.springframework.ai.embedding.EmbeddingModel; |
| ... | ... | @@ -168,4 +171,20 @@ public class AiModelServiceImpl implements AiModelService { |
| 168 | 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 | 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 | 7 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowPageReqVO; |
| 8 | 8 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowSaveReqVO; |
| 9 | 9 | import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowTestReqVO; |
| 10 | -import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO; | |
| 11 | 10 | import cn.iocoder.yudao.module.ai.dal.dataobject.workflow.AiWorkflowDO; |
| 12 | 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 | 13 | import com.alibaba.fastjson.JSONArray; |
| 15 | 14 | import com.alibaba.fastjson.JSONObject; |
| 16 | 15 | import dev.tinyflow.core.Tinyflow; |
| ... | ... | @@ -37,7 +36,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService { |
| 37 | 36 | private AiWorkflowMapper workflowMapper; |
| 38 | 37 | |
| 39 | 38 | @Resource |
| 40 | - private AiApiKeyService apiKeyService; | |
| 39 | + private AiModelService apiModelService; | |
| 41 | 40 | |
| 42 | 41 | @Override |
| 43 | 42 | public Long createWorkflow(AiWorkflowSaveReqVO createReqVO) { |
| ... | ... | @@ -118,25 +117,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService { |
| 118 | 117 | switch (node.getString("type")) { |
| 119 | 118 | case "llmNode": |
| 120 | 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 | 121 | break; |
| 141 | 122 | case "internalNode": |
| 142 | 123 | break; | ... | ... |