feat(knowledge): 添加检索设置功能

- 新增 SearchSetting 组件用于检索设置
- 在知识库详情页面添加检索设置按钮和弹窗
- 实现了向量检索、全文检索和混合检索的设置功能
- 添加了重排序模型、Top K 和 Score
This commit is contained in:
du.meimei
2025-05-06 16:44:54 +08:00
parent 0b3ad1d37c
commit ebc98af45d
8 changed files with 334 additions and 30 deletions

View File

@@ -0,0 +1,161 @@
<template>
<div>
<el-drawer
title="搜索设置"
:visible.sync="visible"
size="50%"
@close="handleClose"
>
<el-form ref="form" :model="form" label-width="80%" label-position="top">
<el-row>
<el-col :span="12">
<el-form-item label="Embedding模型">
<el-select v-model="form.embeddingModel" placeholder="请选择">
<el-option
v-for="item in modelList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- <el-form-item label="检索设置">
<div class="flex justify-content-b">
<div
v-for="(item, index) in settingList"
:key="item.name"
class="setting_item flex"
:class="{ activeItem: index === activeIndex }"
@click="handleClick(index)"
>
<img
src="@/assets/images/konwledge/knowledge-5.png"
alt=""
style="height: 40px"
/>
<div class="ml10">
<p class="fwb label fs15">
{{ item.name }}
<span v-if="index === 2" class="point fs12 ml10">推荐</span>
</p>
<p class="desc">{{ item.desc }}</p>
</div>
</div>
</div>
</el-form-item>-->
<el-collapse v-model="activeName" accordion>
<el-collapse-item
v-for="(item, index) in settingList"
:key="item.name"
:title="item.name"
:name="index"
>
<template slot="title">
<div class="flex align-items-c">
<img
src="@/assets/images/konwledge/knowledge-5.png"
alt=""
style="height: 20px"
/>
<div class="ml10">
<p class="fwb label fs15">
{{ item.name }}
<span v-if="index === 2" class="point fs12 ml10">推荐</span>
</p>
<p class="desc">{{ item.desc }}</p>
</div>
</div>
</template>
<div>
<search-form :activeIndex="activeName"></search-form>
</div>
</el-collapse-item>
</el-collapse>
</el-form>
</el-drawer>
</div>
</template>
<script>
import SearchForm from '@/views/knowledge/detail/components/SearchSetting/SearchForm.vue'
export default {
name: 'SearchSetting',
components: { SearchForm },
props: {},
data() {
return {
activeName: 0,
visible: false,
form: {
embeddingModel: '',
modelOpen: false
},
modelList: [],
activeIndex: 0,
settingList: [
{
name: '向量检索',
desc: '通过生成查询嵌入并查询与其向量表示最相似的文本分段'
},
{
name: '全文检索',
desc:
'索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段'
},
{
name: '混合检索',
desc:
'同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,用户可以选择设置权重或配置重新排序模型。'
}
],
marks: {
// 20: '0',
// 80: '100'
}
}
},
methods: {
init() {
this.visible = true
},
handleClose() {
this.$emit('close')
},
handleClick(index) {
this.activeIndex = index
}
}
}
</script>
<style scoped lang="scss">
.point {
color: #296dff;
border-radius: 4px;
border: 1px solid #296dff;
padding: 2px 5px;
}
.label {
color: #354052;
font-size: 15px;
}
.desc {
color: #676f83;
}
/deep/ .el-collapse-item__header {
height: 85px;
line-height: 23px;
border: 1px solid #ebeef5;
border-radius: 5px;
padding: 10px 20px;
margin-top: 10px;
}
/deep/ .is-active {
.el-collapse-item__header {
background-color: #f5f5fb;
}
}
</style>