feat: Related Knowledge

This commit is contained in:
wangdan-fit2cloud 2025-06-13 15:52:47 +08:00
parent f7349d2b3d
commit 4948051f67
22 changed files with 377 additions and 345 deletions

View File

@ -21,6 +21,23 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
return get(`${prefix}/knowledge`, data, loading)
}
/**
*
* @param
* param {
folder_id: "string",
name: "string",
tool_type: "string",
desc: string,
}
*/
const getKnowledgeList: (param?: any, loading?: Ref<boolean>) => Promise<Result<any>> = (
param,
loading,
) => {
return get(`${prefix}/knowledge`, param, loading)
}
/**
*
* @param
@ -31,7 +48,7 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
desc: string,
}
*/
const getKnowledgeList: (
const getKnowledgeListPage: (
page: pageRequest,
param?: any,
loading?: Ref<boolean>,
@ -234,14 +251,6 @@ const postWebKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<an
return post(`${prefix}/knowledge/web`, data, undefined, loading)
}
/**
*
* @param
*/
const getAllKnowledge: (loading?: Ref<boolean>) => Promise<Result<any[]>> = (loading) => {
return get(`${prefix}`, undefined, loading)
}
/**
*
* @param knowledge_id
@ -269,6 +278,7 @@ const importLarkDocument: (
export default {
getKnowledgeByFolder,
getKnowledgeList,
getKnowledgeListPage,
getKnowledgeDetail,
putKnowledge,
delKnowledge,
@ -284,5 +294,4 @@ export default {
getLarkDocumentList,
importLarkDocument,
getAllKnowledge,
}

View File

@ -79,6 +79,23 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
return get(`${prefix}/knowledge`, data, loading)
}
/**
*
* @param
* param {
"folder_id": "string",
"name": "string",
"tool_type": "string",
desc: string,
}
*/
const getKnowledgeList: (param?: any, loading?: Ref<boolean>) => Promise<Result<any>> = (
param,
loading,
) => {
return get(`${prefix}/knowledge`, param, loading)
}
/**
*
* @param
@ -89,7 +106,7 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
desc: string,
}
*/
const getKnowledgeList: (
const getKnowledgeListPage: (
page: pageRequest,
param?: any,
loading?: Ref<boolean>,
@ -292,14 +309,6 @@ const postWebKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<an
return post(`${prefix}/knowledge/web`, data, undefined, loading)
}
/**
*
* @param
*/
const getAllKnowledge: (loading?: Ref<boolean>) => Promise<Result<any[]>> = (loading) => {
return get(`${prefix}/knowledge`, undefined, loading)
}
/**
*
* @param knowledge_id
@ -327,6 +336,7 @@ const importLarkDocument: (
export default {
getKnowledgeByFolder,
getKnowledgeList,
getKnowledgeListPage,
getKnowledgeDetail,
putKnowledge,
delKnowledge,
@ -342,7 +352,6 @@ export default {
getLarkDocumentList,
importLarkDocument,
getAllKnowledge,
getSharedWorkspaceKnowledge,
getSharedWorkspaceKnowledgePage,
getSharedAuthorizationKnowledgeGet,

View File

@ -169,7 +169,7 @@ function changeMenu(id: string) {
function getDataset() {
loading.value = true
knowledge
.asyncGetAllKnowledge()
.asyncGetRootKnowledge()
.then((res: any) => {
list.value = res.data
common.saveBreadcrumb(list.value)

View File

@ -131,7 +131,6 @@ export default {
addKnowledge: 'Add Related Knowledge',
addKnowledgePlaceholder: 'The selected knowledge must use the same embedding model',
selected: 'Selected',
countDataset: 'Knowledge',
selectSearchMode: 'Retrieval Mode',
vectorSearch: 'Vector Search',

View File

@ -122,7 +122,6 @@ export default {
addKnowledge: '添加关联知识库',
addKnowledgePlaceholder: '所选知识库必须使用相同的 Embedding 模型',
selected: '已选',
countDataset: '个知识库',
selectSearchMode: '检索模式',
vectorSearch: '向量检索',

View File

@ -122,7 +122,6 @@ export default {
addKnowledge: '新增關聯知識庫',
addKnowledgePlaceholder: '所選知識庫必須使用相同的 Embedding 模型',
selected: '已選',
countDataset: '個知識庫',
selectSearchMode: '檢索模式',
vectorSearch: '向量檢索',

View File

@ -1,8 +1,8 @@
import {defineStore} from 'pinia'
import type {knowledgeData} from '@/api/type/knowledge'
import type {UploadUserFile} from 'element-plus'
import { defineStore } from 'pinia'
import type { knowledgeData } from '@/api/type/knowledge'
import type { UploadUserFile } from 'element-plus'
import knowledgeApi from '@/api/shared/knowledge'
import {type Ref} from 'vue'
import { type Ref } from 'vue'
export interface knowledgeStateTypes {
baseInfo: knowledgeData | null
@ -31,10 +31,13 @@ const useKnowledgeStore = defineStore('knowledg', {
saveDocumentsFile(file: UploadUserFile[]) {
this.documentsFiles = file
},
async asyncGetAllKnowledge(loading?: Ref<boolean>) {
async asyncGetRootKnowledge(loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
const params = {
folder_id: localStorage.getItem('workspace_id'),
}
knowledgeApi
.getAllKnowledge(loading)
.getKnowledgeList(params, loading)
.then((data) => {
resolve(data)
})
@ -43,10 +46,7 @@ const useKnowledgeStore = defineStore('knowledg', {
})
})
},
async asyncGetKnowledgeDetail(
knowledge_id: string,
loading?: Ref<boolean>,
) {
async asyncGetKnowledgeDetail(knowledge_id: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
knowledgeApi
.getKnowledgeDetail(knowledge_id, loading)
@ -58,11 +58,7 @@ const useKnowledgeStore = defineStore('knowledg', {
})
})
},
async asyncSyncKnowledge(
id: string,
sync_type: string,
loading?: Ref<boolean>,
) {
async asyncSyncKnowledge(id: string, sync_type: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
knowledgeApi
.putSyncWebKnowledge(id, sync_type, loading)

View File

@ -1,6 +1,5 @@
import { defineStore } from 'pinia'
import applicationApi from '@/api/application/application'
import knowledgeAPI from '@/api/knowledge/knowledge.ts'
import applicationXpackApi from '@/api/application/application-xpack'
import { type Ref } from 'vue'
import { getBrowserLang } from '@/locales/index'
@ -36,19 +35,6 @@ const useApplicationStore = defineStore('application', {
})
},
async asyncGetApplicationKnowledge(id: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
knowledgeAPI
.getAllKnowledge(loading)
.then((data) => {
resolve(data)
})
.catch((error) => {
reject(error)
})
})
},
async asyncGetAccessToken(id: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
const user = useUserStore()

View File

@ -1,8 +1,8 @@
import {defineStore} from 'pinia'
import type {knowledgeData} from '@/api/type/knowledge'
import type {UploadUserFile} from 'element-plus'
import { defineStore } from 'pinia'
import type { knowledgeData } from '@/api/type/knowledge'
import type { UploadUserFile } from 'element-plus'
import knowledgeApi from '@/api/knowledge/knowledge'
import {type Ref} from 'vue'
import { type Ref } from 'vue'
export interface knowledgeStateTypes {
baseInfo: knowledgeData | null
@ -31,10 +31,13 @@ const useKnowledgeStore = defineStore('knowledge', {
saveDocumentsFile(file: UploadUserFile[]) {
this.documentsFiles = file
},
async asyncGetAllKnowledge(loading?: Ref<boolean>) {
async asyncGetRootKnowledge(loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
const params = {
folder_id: localStorage.getItem('workspace_id'),
}
knowledgeApi
.getAllKnowledge(loading)
.getKnowledgeList(params, loading)
.then((data) => {
resolve(data)
})
@ -43,10 +46,7 @@ const useKnowledgeStore = defineStore('knowledge', {
})
})
},
async asyncGetKnowledgeDetail(
knowledge_id: string,
loading?: Ref<boolean>,
) {
async asyncGetKnowledgeDetail(knowledge_id: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
knowledgeApi
.getKnowledgeDetail(knowledge_id, loading)
@ -58,11 +58,7 @@ const useKnowledgeStore = defineStore('knowledge', {
})
})
},
async asyncSyncKnowledge(
id: string,
sync_type: string,
loading?: Ref<boolean>,
) {
async asyncSyncKnowledge(id: string, sync_type: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
knowledgeApi
.putSyncWebKnowledge(id, sync_type, loading)

View File

@ -185,6 +185,7 @@
<div class="flex align-center" style="width: 80%">
<KnowledgeIcon
:type="relatedObject(knowledgeList, item, 'id')?.type"
class="mr-12"
/>
<span
@ -439,7 +440,7 @@ import { t } from '@/locales'
import TTSModeParamSettingDialog from './component/TTSModeParamSettingDialog.vue'
import ReasoningParamSettingDialog from './component/ReasoningParamSettingDialog.vue'
const { model, application } = useStore()
const { knowledge, model, application } = useStore()
const route = useRoute()
const {
@ -628,7 +629,7 @@ function getDetail() {
}
function getKnowledge() {
application.asyncGetApplicationKnowledge(id, knowledgeLoading).then((res: any) => {
knowledge.asyncGetRootKnowledge(knowledgeLoading).then((res: any) => {
knowledgeList.value = res.data
})
}
@ -706,8 +707,7 @@ function refresh() {
onMounted(() => {
getModel()
// todo
// getKnowledge()
getKnowledge()
getDetail()
getSTTModel()
getTTSModel()

View File

@ -35,23 +35,39 @@
</div>
</div>
</template>
<el-scrollbar>
<div class="max-height">
<el-row :gutter="12" v-loading="loading">
<el-col :span="12" v-for="(item, index) in filterData" :key="index" class="mb-16">
<CardCheckbox value-field="id" :data="item" v-model="checkList" @change="changeHandle">
<span class="ellipsis cursor" :title="item.name"> {{ item.name }}</span>
</CardCheckbox>
</el-col>
</el-row>
</div>
</el-scrollbar>
<LayoutContainer class="application-manage">
<template #left>
<folder-tree
:data="folderList"
:currentNodeKey="currentFolder?.id"
@handleNodeClick="folderClickHandel"
class="p-8"
v-loading="folderLoading"
/>
</template>
<el-scrollbar>
<div class="max-height layout-bg p-16-24">
<el-row :gutter="12" v-loading="loading">
<el-col :span="12" v-for="(item, index) in filterData" :key="index" class="mb-16">
<CardCheckbox
value-field="id"
:data="item"
v-model="checkList"
@change="changeHandle"
>
<span class="ellipsis cursor ml-12" :title="item.name"> {{ item.name }}</span>
</CardCheckbox>
</el-col>
</el-row>
</div>
</el-scrollbar>
</LayoutContainer>
<template #footer>
<div class="flex-between">
<div class="flex">
<el-text type="info" class="color-secondary mr-8" v-if="checkList.length > 0">
{{ $t('views.application.dialog.selected') }} {{ checkList.length }}
{{ $t('views.application.dialog.countDataset') }}
</el-text>
<el-button link type="primary" v-if="checkList.length > 0" @click="clearCheck">
{{ $t('common.clear') }}
@ -62,7 +78,7 @@
{{ $t('common.cancel') }}
</el-button>
<el-button type="primary" @click="submitHandle">
{{ $t('common.confirm') }}
{{ $t('common.add') }}
</el-button>
</span>
</div>
@ -71,6 +87,8 @@
</template>
<script setup lang="ts">
import { computed, ref, watch } from 'vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import useStore from '@/stores'
const props = defineProps({
data: {
type: Array<any>,
@ -80,12 +98,14 @@ const props = defineProps({
})
const emit = defineEmits(['addData', 'refresh'])
const { folder } = useStore()
const dialogVisible = ref<boolean>(false)
const checkList = ref([])
const currentEmbedding = ref('')
const searchValue = ref('')
const searchDate = ref<any[]>([])
const loading = ref(false)
const filterData = computed(() => {
return currentEmbedding.value
@ -124,8 +144,8 @@ function clearCheck() {
}
const open = (checked: any) => {
searchDate.value = props.data
checkList.value = checked
getFolder()
if (checkList.value.length > 0) {
currentEmbedding.value = props.data.filter(
(v) => v.id === checkList.value[0],
@ -134,6 +154,7 @@ const open = (checked: any) => {
dialogVisible.value = true
}
const submitHandle = () => {
emit('addData', checkList.value)
dialogVisible.value = false
@ -143,6 +164,36 @@ const refresh = () => {
emit('refresh')
}
const folderList = ref<any[]>([])
const knowledgeList = ref<any[]>([])
const currentFolder = ref<any>({})
const folderLoading = ref(false)
//
function folderClickHandel(row: any) {
currentFolder.value = row
knowledgeList.value = []
if (currentFolder.value.id === 'share') return
getList()
}
function getFolder() {
const params = {}
folder.asyncGetFolder('KNOWLEDGE', params, folderLoading).then((res: any) => {
folderList.value = res.data
currentFolder.value = res.data?.[0] || {}
getList()
})
}
function getList() {
const params = {
folder_id: currentFolder.value?.id || localStorage.getItem('workspace_id'),
}
KnowledgeApi.getKnowledgeList(params, loading).then((res) => {
searchDate.value = res.data
})
}
defineExpose({ open })
</script>
<style lang="scss">
@ -152,11 +203,9 @@ defineExpose({ open })
padding: 12px 20px 4px 24px;
border-bottom: 1px solid var(--el-border-color-light);
}
.el-dialog__body {
padding: 8px !important;
}
.el-dialog__footer {
padding: 0 24px 16px 24px;
padding: 12px 24px 12px 24px;
border-top: 1px solid var(--el-border-color-light);
}
.el-dialog__headerbtn {
@ -165,7 +214,7 @@ defineExpose({ open })
}
.max-height {
max-height: calc(100vh - 260px);
padding: 0 16px;
min-height: 300px;
}
}
</style>

View File

@ -10,182 +10,174 @@
:close-on-press-escape="false"
>
<el-scrollbar max-height="550">
<div class="p-16">
<el-form label-position="top" ref="paramFormRef" :model="form" v-loading="loading">
<el-form-item :label="$t('views.application.dialog.selectSearchMode')">
<el-radio-group
v-model="form.knowledge_setting.search_mode"
class="card__radio"
@change="changeHandle"
>
<el-card
shadow="never"
class="mb-16"
:class="form.search_mode === 'embedding' ? 'active' : ''"
>
<el-radio value="embedding" size="large">
<p class="mb-4">
{{ $t('views.application.dialog.vectorSearch') }}
</p>
<el-text type="info">{{
$t('views.application.dialog.vectorSearchTooltip')
}}</el-text>
</el-radio>
</el-card>
<el-card
shadow="never"
class="mb-16"
:class="form.knowledge_setting.search_mode === 'keywords' ? 'active' : ''"
>
<el-radio value="keywords" size="large">
<p class="mb-4">
{{ $t('views.application.dialog.fullTextSearch') }}
</p>
<el-text type="info">{{
$t('views.application.dialog.fullTextSearchTooltip')
}}</el-text>
</el-radio>
</el-card>
<el-card
shadow="never"
:class="form.knowledge_setting.search_mode === 'blend' ? 'active' : ''"
>
<el-radio value="blend" size="large">
<p class="mb-4">
{{ $t('views.application.dialog.hybridSearch') }}
</p>
<el-text type="info">{{
$t('views.application.dialog.hybridSearchTooltip')
}}</el-text>
</el-radio>
</el-card>
</el-radio-group>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template #label>
<div class="flex align-center">
<span class="mr-4">{{
$t('views.application.dialog.similarityThreshold')
}}</span>
<el-tooltip
effect="dark"
:content="$t('views.application.dialog.similarityTooltip')"
placement="right"
>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
</div>
</template>
<el-input-number
v-model="form.knowledge_setting.similarity"
:min="0"
:max="form.knowledge_setting.search_mode === 'blend' ? 2 : 1"
:precision="3"
:step="0.1"
:value-on-clear="0"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('views.application.dialog.topReferences')">
<el-input-number
v-model="form.knowledge_setting.top_n"
:min="1"
:max="10000"
:value-on-clear="1"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
<el-slider
v-model="form.knowledge_setting.max_paragraph_char_number"
show-input
:show-input-controls="false"
:min="500"
:max="100000"
class="custom-slider"
/>
</el-form-item>
<el-form-item
v-if="!isWorkflowType"
:label="$t('views.application.dialog.noReferencesAction')"
<el-form label-position="top" ref="paramFormRef" :model="form" v-loading="loading">
<el-form-item :label="$t('views.application.dialog.selectSearchMode')">
<el-radio-group
v-model="form.knowledge_setting.search_mode"
class="card__radio"
@change="changeHandle"
>
<el-form
label-position="top"
ref="noReferencesformRef"
:model="noReferencesform"
:rules="noReferencesRules"
:hide-required-asterisk="true"
class="w-full"
<el-card
shadow="never"
class="mb-16"
:class="form.search_mode === 'embedding' ? 'active' : ''"
>
<el-radio-group
v-model="form.knowledge_setting.no_references_setting.status"
class="radio-block-avatar"
>
<el-radio value="ai_questioning">
<p>
{{ $t('views.application.dialog.continueQuestioning') }}
</p>
</el-radio>
<el-radio value="designated_answer">
<p>{{ $t('views.application.dialog.provideAnswer') }}</p>
<el-form-item
v-if="
form.knowledge_setting.no_references_setting.status === 'designated_answer'
"
prop="designated_answer"
<el-radio value="embedding" size="large">
<p class="mb-4">
{{ $t('views.application.dialog.vectorSearch') }}
</p>
<el-text type="info">{{
$t('views.application.dialog.vectorSearchTooltip')
}}</el-text>
</el-radio>
</el-card>
<el-card
shadow="never"
class="mb-16"
:class="form.knowledge_setting.search_mode === 'keywords' ? 'active' : ''"
>
<el-radio value="keywords" size="large">
<p class="mb-4">
{{ $t('views.application.dialog.fullTextSearch') }}
</p>
<el-text type="info">{{
$t('views.application.dialog.fullTextSearchTooltip')
}}</el-text>
</el-radio>
</el-card>
<el-card
shadow="never"
:class="form.knowledge_setting.search_mode === 'blend' ? 'active' : ''"
>
<el-radio value="blend" size="large">
<p class="mb-4">
{{ $t('views.application.dialog.hybridSearch') }}
</p>
<el-text type="info">{{
$t('views.application.dialog.hybridSearchTooltip')
}}</el-text>
</el-radio>
</el-card>
</el-radio-group>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template #label>
<div class="flex align-center">
<span class="mr-4">{{ $t('views.application.dialog.similarityThreshold') }}</span>
<el-tooltip
effect="dark"
:content="$t('views.application.dialog.similarityTooltip')"
placement="right"
>
<el-input
v-model="noReferencesform.designated_answer"
:rows="2"
type="textarea"
maxlength="2048"
:placeholder="defaultValue['designated_answer']"
/>
</el-form-item>
</el-radio>
</el-radio-group>
</el-form>
</el-form-item>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
</div>
</template>
<el-input-number
v-model="form.knowledge_setting.similarity"
:min="0"
:max="form.knowledge_setting.search_mode === 'blend' ? 2 : 1"
:precision="3"
:step="0.1"
:value-on-clear="0"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('views.application.dialog.topReferences')">
<el-input-number
v-model="form.knowledge_setting.top_n"
:min="1"
:max="10000"
:value-on-clear="1"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item @click.prevent v-if="!isWorkflowType">
<template #label>
<div class="flex align-center">
<span class="mr-4">{{
$t('views.application.form.problemOptimization.label')
}}</span>
</div>
</template>
<el-switch size="small" v-model="form.problem_optimization"></el-switch>
</el-form-item>
<el-form-item
v-if="form.problem_optimization"
:label="$t('views.application.form.prompt.label')"
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
<el-slider
v-model="form.knowledge_setting.max_paragraph_char_number"
show-input
:show-input-controls="false"
:min="500"
:max="100000"
class="custom-slider"
/>
</el-form-item>
<el-form-item
v-if="!isWorkflowType"
:label="$t('views.application.dialog.noReferencesAction')"
>
<el-form
label-position="top"
ref="noReferencesformRef"
:model="noReferencesform"
:rules="noReferencesRules"
:hide-required-asterisk="true"
class="w-full"
>
<el-input
v-model="form.problem_optimization_prompt"
:rows="6"
type="textarea"
maxlength="2048"
:placeholder="defaultPrompt"
/>
</el-form-item>
</el-form>
</div>
<el-radio-group
v-model="form.knowledge_setting.no_references_setting.status"
class="radio-block-avatar"
>
<el-radio value="ai_questioning">
<p>
{{ $t('views.application.dialog.continueQuestioning') }}
</p>
</el-radio>
<el-radio value="designated_answer">
<p>{{ $t('views.application.dialog.provideAnswer') }}</p>
<el-form-item
v-if="form.knowledge_setting.no_references_setting.status === 'designated_answer'"
prop="designated_answer"
>
<el-input
v-model="noReferencesform.designated_answer"
:rows="2"
type="textarea"
maxlength="2048"
:placeholder="defaultValue['designated_answer']"
/>
</el-form-item>
</el-radio>
</el-radio-group>
</el-form>
</el-form-item>
<el-form-item @click.prevent v-if="!isWorkflowType">
<template #label>
<div class="flex align-center">
<span class="mr-4">{{ $t('views.application.form.problemOptimization.label') }}</span>
</div>
</template>
<el-switch size="small" v-model="form.problem_optimization"></el-switch>
</el-form-item>
<el-form-item
v-if="form.problem_optimization"
:label="$t('views.application.form.prompt.label')"
>
<el-input
v-model="form.problem_optimization_prompt"
:rows="6"
type="textarea"
maxlength="2048"
:placeholder="defaultPrompt"
/>
</el-form-item>
</el-form>
</el-scrollbar>
<template #footer>
<span class="dialog-footer p-16">
<span class="dialog-footer">
<el-button @click.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit(noReferencesformRef)" :loading="loading">
{{ $t('common.save') }}

View File

@ -115,7 +115,7 @@ const submitHandle = () => {
}
function getDataset() {
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
datasetList.value = res.data?.filter((v: any) => v.id !== id)
})
}

View File

@ -92,7 +92,7 @@ const submitHandle = () => {
}
function getDataset() {
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
datasetList.value = res.data?.filter((v: any) => v.id !== id)
})
}

View File

@ -368,7 +368,7 @@ function getList() {
[search_type.value]: search_form.value[search_type.value],
}
KnowledgeApi.getKnowledgeList(paginationConfig, params, loading).then((res) => {
KnowledgeApi.getKnowledgeListPage(paginationConfig, params, loading).then((res) => {
paginationConfig.total = res.data.total
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
})

View File

@ -363,7 +363,7 @@ function getList() {
[search_type.value]: search_form.value[search_type.value],
}
KnowledgeApi.getKnowledgeList(paginationConfig, params, loading).then((res) => {
KnowledgeApi.getKnowledgeListPage(paginationConfig, params, loading).then((res) => {
paginationConfig.total = res.data.total
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
})

View File

@ -144,7 +144,7 @@ function getDocument(id: string) {
}
function getDataset() {
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
datasetList.value = res.data
})
}

View File

@ -121,7 +121,7 @@ function getDocument(id: string) {
}
function getDataset() {
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
datasetList.value = res.data
})
}

View File

@ -11,67 +11,65 @@
>
<div>
<el-scrollbar always>
<div class="p-16">
<el-form label-position="top" ref="paramFormRef" :model="form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template #label>
<div class="flex align-center">
<span class="mr-4"
>Score {{ $t('views.applicationWorkflow.nodes.rerankerNode.higher') }}</span
>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.nodes.rerankerNode.ScoreTooltip')"
placement="right"
>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
</div>
</template>
<el-input-number
v-model="form.similarity"
:min="0"
:max="form.search_mode === 'blend' ? 2 : 1"
:precision="3"
:step="0.1"
:value-on-clear="0"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('views.application.dialog.topReferences')">
<el-input-number
v-model="form.top_n"
:min="1"
:max="10000"
:value-on-clear="1"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
</el-row>
<el-form label-position="top" ref="paramFormRef" :model="form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template #label>
<div class="flex align-center">
<span class="mr-4"
>Score {{ $t('views.applicationWorkflow.nodes.rerankerNode.higher') }}</span
>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.nodes.rerankerNode.ScoreTooltip')"
placement="right"
>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
</div>
</template>
<el-input-number
v-model="form.similarity"
:min="0"
:max="form.search_mode === 'blend' ? 2 : 1"
:precision="3"
:step="0.1"
:value-on-clear="0"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('views.application.dialog.topReferences')">
<el-input-number
v-model="form.top_n"
:min="1"
:max="10000"
:value-on-clear="1"
controls-position="right"
class="w-full"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
<el-slider
v-model="form.max_paragraph_char_number"
show-input
:show-input-controls="false"
:min="500"
:max="100000"
class="custom-slider"
/>
</el-form-item>
</el-form>
</div>
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
<el-slider
v-model="form.max_paragraph_char_number"
show-input
:show-input-controls="false"
:min="500"
:max="100000"
class="custom-slider"
/>
</el-form-item>
</el-form>
</el-scrollbar>
</div>
<template #footer>
<span class="dialog-footer p-16">
<span class="dialog-footer">
<el-button @click.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit()" :loading="loading">
{{ $t('common.save') }}
@ -91,7 +89,7 @@ const paramFormRef = ref<FormInstance>()
const form = ref<any>({
top_n: 3,
similarity: 0,
max_paragraph_char_number: 5000
max_paragraph_char_number: 5000,
})
const dialogVisible = ref<boolean>(false)
@ -102,7 +100,7 @@ watch(dialogVisible, (bool) => {
form.value = {
top_n: 3,
similarity: 0,
max_paragraph_char_number: 5000
max_paragraph_char_number: 5000,
}
}
})

View File

@ -1,12 +0,0 @@
import SearchDatasetVue from './index.vue'
import { AppNode, AppNodeModel } from '@/workflow/common/app-node'
class SearchDatasetNode extends AppNode {
constructor(props: any) {
super(props, SearchDatasetVue)
}
}
export default {
type: 'search-dataset-node',
model: AppNodeModel,
view: SearchDatasetNode
}

View File

@ -0,0 +1,12 @@
import SearchKnowledgeVue from './index.vue'
import { AppNode, AppNodeModel } from '@/workflow/common/app-node'
class SearchKnowledgeNode extends AppNode {
constructor(props: any) {
super(props, SearchKnowledgeVue)
}
}
export default {
type: 'search-knowledge-node',
model: AppNodeModel,
view: SearchKnowledgeNode
}

View File

@ -184,15 +184,15 @@ function openDatasetDialog() {
}
function getDataset() {
if (id) {
application.asyncGetApplicationKnowledge(id, datasetLoading).then((res: any) => {
datasetList.value = res.data
})
} else {
knowledge.asyncGetAllKnowledge(datasetLoading).then((res: any) => {
datasetList.value = res.data?.filter((v: any) => v.user_id === user.userInfo?.id)
})
}
// if (id) {
// application.asyncGetApplicationKnowledge(id, datasetLoading).then((res: any) => {
// datasetList.value = res.data
// })
// } else {
knowledge.asyncGetRootKnowledge(datasetLoading).then((res: any) => {
datasetList.value = res.data?.filter((v: any) => v.user_id === user.userInfo?.id)
})
// }
}
function refresh() {
getDataset()