feat: 完善AI工作流运行测试(通义千问)
This commit is contained in:
parent
911f5f8bf3
commit
bce63cd04f
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue