feat: 先进智能体功能上线

- 基于 agent-runtime 打造,默认 ReAct agent
- 支持 agent 能力对接,已对接工作流、插件、知识库等 tool 能力
- 全新 agent 编排界面,支持可视化便捷配置 agent
- 全新 agent 聊天界面,支持快捷操作、额外知识库选择等
This commit is contained in:
2026-05-28 11:29:18 +08:00
parent 11e595b088
commit 1c205c3720
39 changed files with 3546 additions and 217 deletions

View File

@@ -1,30 +1,19 @@
<script setup lang="ts">
import { computed, onMounted, onUnmounted, ref } from 'vue';
import { useRoute } from 'vue-router';
import {computed, onMounted, onUnmounted, ref} from 'vue';
import {useRoute} from 'vue-router';
import { usePreferences } from '@easyflow/preferences';
import { getOptions, sortNodes } from '@easyflow/utils';
import { Tinyflow } from '@tinyflow-ai/vue';
import {usePreferences} from '@easyflow/preferences';
import {getOptions, sortNodes} from '@easyflow/utils';
import {Tinyflow} from '@tinyflow-ai/vue';
import {
ArrowLeft,
CircleCheck,
Close,
Promotion,
} from '@element-plus/icons-vue';
import {
ElButton,
ElDrawer,
ElMessage,
ElMessageBox,
ElSkeleton,
} from 'element-plus';
import {ArrowLeft, CircleCheck, Close, Promotion,} from '@element-plus/icons-vue';
import {ElButton, ElDrawer, ElMessage, ElMessageBox, ElSkeleton,} from 'element-plus';
import { api } from '#/api/request';
import {api} from '#/api/request';
import CommonSelectDataModal from '#/components/commonSelectModal/CommonSelectDataModal.vue';
import { $t } from '#/locales';
import { router } from '#/router';
import { getIconByValue } from '#/views/ai/model/modelUtils/defaultIcon';
import {$t} from '#/locales';
import {router} from '#/router';
import {getIconByValue} from '#/views/ai/model/modelUtils/defaultIcon';
import {
canAiResourceRepublish,
isAiResourceApprovalPending,
@@ -35,7 +24,7 @@ import SingleRun from '#/views/ai/workflow/components/SingleRun.vue';
import WorkflowForm from '#/views/ai/workflow/components/WorkflowForm.vue';
import WorkflowSteps from '#/views/ai/workflow/components/WorkflowSteps.vue';
import { getCustomNode } from './customNode/index';
import {getCustomNode} from './customNode/index';
import nodeNames from './customNode/nodeNames';
import {
createInitialWorkflowData,
@@ -368,15 +357,17 @@ async function handleSave(showMsg: boolean = false): Promise<boolean> {
saveLoading.value = false;
}
}
async function getWorkflowInfo(workflowId: any) {
async function getWorkflowInfo(workflowId: any, syncFlowData: boolean = true) {
return api.get(`/api/v1/workflow/detail?id=${workflowId}`).then((res) => {
workflowInfo.value = res.data;
const parsedContent = workflowInfo.value.content
? JSON.parse(workflowInfo.value.content)
: {};
tinyFlowData.value = isWorkflowDataEmpty(parsedContent)
? createInitialWorkflowData()
: normalizeWorkflowStartNodes(parsedContent);
if (syncFlowData) {
const parsedContent = workflowInfo.value.content
? JSON.parse(workflowInfo.value.content)
: {};
tinyFlowData.value = isWorkflowDataEmpty(parsedContent)
? createInitialWorkflowData()
: normalizeWorkflowStartNodes(parsedContent);
}
syncNavTitle(workflowInfo.value?.title || '');
});
}
@@ -561,7 +552,7 @@ async function handlePublishAction() {
});
if (res.errorCode === 0) {
ElMessage.success(res.message || $t('message.saveOkMessage'));
await getWorkflowInfo(workflowId.value);
await getWorkflowInfo(workflowId.value, false);
}
} finally {
publishLoading.value = false;