feat: 完善AI工作流运行测试(通义千问)

This commit is contained in:
Lesan 2025-04-29 13:59:33 +08:00
parent 911f5f8bf3
commit bce63cd04f
3 changed files with 31 additions and 22 deletions

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelPageReqVO; import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelPageReqVO;
import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReqVO; import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReqVO;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO;
import dev.tinyflow.core.Tinyflow;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.image.ImageModel; import org.springframework.ai.image.ImageModel;
@ -131,4 +132,12 @@ public interface AiModelService {
*/ */
VectorStore getOrCreateVectorStore(Long id, Map<String, Class<?>> metadataFields); VectorStore getOrCreateVectorStore(Long id, Map<String, Class<?>> metadataFields);
/**
* 获取 Tinyflow 所需 LLm Provider
*
* @param tinyflow tinyflow
* @param modelId AI 模型 ID
*/
void getLLmProvider4Tinyflow(Tinyflow tinyflow, Long modelId);
} }

View File

@ -12,6 +12,9 @@ import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiModelSaveReq
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO; import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO;
import cn.iocoder.yudao.module.ai.dal.mysql.model.AiChatMapper; import cn.iocoder.yudao.module.ai.dal.mysql.model.AiChatMapper;
import com.agentsflex.llm.qwen.QwenLlm;
import com.agentsflex.llm.qwen.QwenLlmConfig;
import dev.tinyflow.core.Tinyflow;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.embedding.EmbeddingModel; import org.springframework.ai.embedding.EmbeddingModel;
@ -168,4 +171,20 @@ public class AiModelServiceImpl implements AiModelService {
// return modelFactory.getOrCreateVectorStore(MilvusVectorStore.class, embeddingModel, metadataFields); // return modelFactory.getOrCreateVectorStore(MilvusVectorStore.class, embeddingModel, metadataFields);
} }
@Override
public void getLLmProvider4Tinyflow(Tinyflow tinyflow, Long modelId) {
AiModelDO model = validateModel(modelId);
AiApiKeyDO apiKey = apiKeyService.validateApiKey(model.getKeyId());
AiPlatformEnum platform = AiPlatformEnum.validatePlatform(apiKey.getPlatform());
switch (platform) {
// TODO @lesan 考虑到未来不需要使用agents-flex 现在仅测试通义千问
case TONG_YI:
QwenLlmConfig qwenLlmConfig = new QwenLlmConfig();
qwenLlmConfig.setApiKey(apiKey.getApiKey());
qwenLlmConfig.setModel(model.getModel());
tinyflow.setLlmProvider(id -> new QwenLlm(qwenLlmConfig));
break;
}
}
} }

View File

@ -7,10 +7,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowPageReqVO; import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowPageReqVO;
import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowSaveReqVO; import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowSaveReqVO;
import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowTestReqVO; import cn.iocoder.yudao.module.ai.controller.admin.workflow.vo.AiWorkflowTestReqVO;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.workflow.AiWorkflowDO; import cn.iocoder.yudao.module.ai.dal.dataobject.workflow.AiWorkflowDO;
import cn.iocoder.yudao.module.ai.dal.mysql.workflow.AiWorkflowMapper; import cn.iocoder.yudao.module.ai.dal.mysql.workflow.AiWorkflowMapper;
import cn.iocoder.yudao.module.ai.service.model.AiApiKeyService; import cn.iocoder.yudao.module.ai.service.model.AiModelService;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import dev.tinyflow.core.Tinyflow; import dev.tinyflow.core.Tinyflow;
@ -37,7 +36,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService {
private AiWorkflowMapper workflowMapper; private AiWorkflowMapper workflowMapper;
@Resource @Resource
private AiApiKeyService apiKeyService; private AiModelService apiModelService;
@Override @Override
public Long createWorkflow(AiWorkflowSaveReqVO createReqVO) { public Long createWorkflow(AiWorkflowSaveReqVO createReqVO) {
@ -118,25 +117,7 @@ public class AiWorkflowServiceImpl implements AiWorkflowService {
switch (node.getString("type")) { switch (node.getString("type")) {
case "llmNode": case "llmNode":
JSONObject data = node.getJSONObject("data"); JSONObject data = node.getJSONObject("data");
AiApiKeyDO apiKey = apiKeyService.getApiKey(data.getLong("llmId")); apiModelService.getLLmProvider4Tinyflow(tinyflow, data.getLong("llmId"));
switch (apiKey.getPlatform()) {
// TODO @lesan 需要讨论一下这里怎么弄
// TODO @lesan llmId 对应 model 的编号如何这样的话就是 apiModelService 提供一个获取 LLM 的方法然后创建的方法也在 AiModelFactory 提供可以先接个 deepseek deepseek yyds
case "OpenAI":
break;
case "Ollama":
break;
case "YiYan":
break;
case "XingHuo":
break;
case "TongYi":
break;
case "DeepSeek":
break;
case "ZhiPu":
break;
}
break; break;
case "internalNode": case "internalNode":
break; break;