|
@@ -6,17 +6,12 @@
|
|
|
</div>
|
|
|
<div class="mt-[var(--czr-gap)] flex flex-1 overflow-hidden">
|
|
|
<div class="card flex flex-1 flex-col gap-[1rem] rounded-bl-[0.5rem]">
|
|
|
- <div class="text-main">
|
|
|
+ <div class="text-main" v-loading="state.loading">
|
|
|
<div class="text-head">
|
|
|
源文本
|
|
|
- <el-popover :width="800" trigger="click">
|
|
|
- <template #reference>
|
|
|
- <div class="__hover">向量检索</div>
|
|
|
- </template>
|
|
|
- <div>
|
|
|
- <modelConfig :index-method="false" :embedding="false" />
|
|
|
- </div>
|
|
|
- </el-popover>
|
|
|
+ <div class="__hover" @click="onModelConfig">
|
|
|
+ {{ SearchMethodTypeMap.get(state.modelConfig.indexConfig?.type) }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="text-content">
|
|
|
<CzrFormColumn
|
|
@@ -27,7 +22,12 @@
|
|
|
:transparent="true"
|
|
|
:clearable="false"
|
|
|
/>
|
|
|
- <CzrButton class="test" type="primary" title="测试" />
|
|
|
+ <CzrButton
|
|
|
+ class="test"
|
|
|
+ type="primary"
|
|
|
+ title="测试"
|
|
|
+ @click="onTest"
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="flex flex-1 flex-col">
|
|
@@ -50,6 +50,7 @@
|
|
|
</div>
|
|
|
<div
|
|
|
class="card flex w-[26.25rem] flex-col space-y-4 rounded-br-[0.5rem]"
|
|
|
+ v-loading="state.loading"
|
|
|
>
|
|
|
<div class="__czr-title_1">{{ state.backList.length }} 个召回段落</div>
|
|
|
<div class="flex flex-1 flex-col gap-[1rem] overflow-y-auto">
|
|
@@ -68,15 +69,15 @@
|
|
|
>
|
|
|
<SvgIcon name="box" color="#ffffff" size="15" />
|
|
|
</div>
|
|
|
- Chunk-138·18 字符
|
|
|
+ Chunk-{{ index + 1 }}·{{ item.wordCount }} 字符
|
|
|
</div>
|
|
|
<div class="mt-[0.5rem] text-[1.25rem] font-bold text-[#21262D]">
|
|
|
- {{ item.p1 }}
|
|
|
+ {{ item.text }}
|
|
|
</div>
|
|
|
<div
|
|
|
class="mt-[var(--czr-gap)] flex flex-wrap gap-2 text-[0.88rem] text-[#576275]"
|
|
|
>
|
|
|
- <template v-for="s in item.p2">
|
|
|
+ <template v-for="s in item.keywords">
|
|
|
<span>#{{ s }}</span>
|
|
|
</template>
|
|
|
</div>
|
|
@@ -90,9 +91,10 @@
|
|
|
class="mt-[1rem] flex items-center gap-[0.5rem] text-[0.75rem] text-[#576275]"
|
|
|
>
|
|
|
<img
|
|
|
- src="@/assets/images/file-excel.png"
|
|
|
+ :src="DictionaryStore.getFileIcon(item.name)"
|
|
|
class="h-[1rem]"
|
|
|
- />口岸服务网事项清单.xlsx
|
|
|
+ />
|
|
|
+ {{ item.name }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -100,20 +102,43 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <CzrDialog
|
|
|
+ :show="state.modelConfig.show"
|
|
|
+ title="检索方式"
|
|
|
+ @onClose="state.modelConfig.show = false"
|
|
|
+ @onSubmit="onSubmitModelConfig"
|
|
|
+ width="62.5rem"
|
|
|
+ height="auto"
|
|
|
+ max-height="90%"
|
|
|
+ >
|
|
|
+ <CzrForm ref="ref_form" label-width="6.1rem">
|
|
|
+ <modelConfig
|
|
|
+ :index-method="false"
|
|
|
+ :embedding="false"
|
|
|
+ ref="ref_modelConfig"
|
|
|
+ />
|
|
|
+ </CzrForm>
|
|
|
+ </CzrDialog>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { getCurrentInstance, onMounted, reactive, ref } from 'vue'
|
|
|
+import { getCurrentInstance, nextTick, onMounted, reactive, ref } from 'vue'
|
|
|
import { v4 } from 'uuid'
|
|
|
import modelConfig from '@/views/manage/knowledge/model-config.vue'
|
|
|
+import { SearchMethodTypeMap } from '@/types/knowledge'
|
|
|
+import { datasetsCallback } from '@/api/modules/knowledge/test'
|
|
|
+import { ElMessage } from 'element-plus'
|
|
|
+import { useDictionaryStore } from '@/stores'
|
|
|
|
|
|
-const emit = defineEmits([])
|
|
|
+const DictionaryStore = useDictionaryStore()
|
|
|
+const emit = defineEmits(['refresh'])
|
|
|
const props = defineProps({
|
|
|
knowledge: <any>{},
|
|
|
})
|
|
|
const { proxy }: any = getCurrentInstance()
|
|
|
const colors = ['46, 155, 62', '0, 159, 188', '119, 69, 222', '255, 162, 84']
|
|
|
const state: any = reactive({
|
|
|
+ loading: false,
|
|
|
text: '',
|
|
|
backList: [],
|
|
|
query: {
|
|
@@ -132,17 +157,13 @@ const state: any = reactive({
|
|
|
data: [],
|
|
|
},
|
|
|
},
|
|
|
+ modelConfig: {
|
|
|
+ show: false,
|
|
|
+ indexConfig: null,
|
|
|
+ },
|
|
|
})
|
|
|
-const initBack = () => {
|
|
|
- const arr: any = []
|
|
|
- for (let i = 0; i < 20; i++) {
|
|
|
- arr.push({
|
|
|
- p1: '事项名称":"从事海员外派业务审批”',
|
|
|
- p2: ['业务', '从事', '事项', '业务', '从事', '事项'],
|
|
|
- })
|
|
|
- }
|
|
|
- state.backList = arr
|
|
|
-}
|
|
|
+const ref_modelConfig = ref()
|
|
|
+const ref_form = ref()
|
|
|
const onPage = (pageNum, pageSize) => {
|
|
|
state.query.page = {
|
|
|
pageNum: pageNum,
|
|
@@ -167,10 +188,43 @@ const onPage = (pageNum, pageSize) => {
|
|
|
state.query.loading = false
|
|
|
}, 1000)
|
|
|
}
|
|
|
+const onModelConfig = () => {
|
|
|
+ state.modelConfig.show = true
|
|
|
+ nextTick(() => {
|
|
|
+ ref_modelConfig.value.init({ indexConfig: state.modelConfig.indexConfig })
|
|
|
+ })
|
|
|
+}
|
|
|
+const onSubmitModelConfig = () => {
|
|
|
+ ref_form.value.submit().then(() => {
|
|
|
+ state.modelConfig.indexConfig = ref_modelConfig.value.getData().indexConfig
|
|
|
+ state.modelConfig.show = false
|
|
|
+ })
|
|
|
+}
|
|
|
+const onTest = () => {
|
|
|
+ if (!state.text.trim()) {
|
|
|
+ ElMessage.warning('请输入源文本')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ state.loading = true
|
|
|
+ datasetsCallback({
|
|
|
+ datasetId: props.knowledge.id,
|
|
|
+ indexConfig: JSON.stringify(state.modelConfig.indexConfig),
|
|
|
+ context: state.text,
|
|
|
+ token: 0,
|
|
|
+ })
|
|
|
+ .then(({ data }: any) => {
|
|
|
+ state.backList = data
|
|
|
+ })
|
|
|
+ .catch(() => {})
|
|
|
+ .finally(() => {
|
|
|
+ state.loading = false
|
|
|
+ })
|
|
|
+}
|
|
|
onMounted(() => {
|
|
|
- initBack()
|
|
|
onPage(1, 10)
|
|
|
- console.log(props.knowledge)
|
|
|
+ state.modelConfig.indexConfig = JSON.parse(
|
|
|
+ JSON.stringify(props.knowledge.indexConfig),
|
|
|
+ )
|
|
|
})
|
|
|
</script>
|
|
|
|