| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- <template>
- <a-button type="text" @click="handleClick" size="small">
- <template #icon>
- <icon-tool />
- </template>
- </a-button>
- <a-modal
- v-model:visible="visible"
- title=" "
- @before-open="handleOpened"
- @cancel="handleCancel"
- :footer="false"
- title-align="start"
- width="900px"
- >
- <a-tabs default-active-key="1">
- <a-tab-pane key="1">
- <template #title>
- <icon-calendar/> 解析方法
- </template>
- <div style="width: 100%">
- <div style="display: flex;align-items: center;">
- <div>
- 解析方法:
- </div>
- <div style="margin-left: 10px">
- <a-select v-model="form.parser_id" placeholder="请选择" >
- <a-option v-for="item in parser_ids" :key="item.value" :label="item.name" :value="item.value"></a-option>
- </a-select>
- </div>
- </div>
- <div class="parser">
- <a-form ref="formRef" :rules="rules" :model="form" auto-label-width @submit="handleSubmit" >
- <a-divider style="margin-top: 10px" />
- <a-form-item field="slider" label="块Token数">
- <a-slider v-model="form.chunk_token_num" :min="0" :max="2048" show-input />
- </a-form-item>
- <a-divider style="margin-top: 10px" />
- <a-form-item field="raptor" label="使用召回增强RAPTOR策略">
- <a-space direction="vertical" size="large">
- <a-switch v-model="form.use_raptor" @change="onChangeRAPTOR" />
- </a-space>
- </a-form-item>
- <div v-if="form.use_raptor">
- <a-form-item field="prompt" label="提示词">
- <a-textarea
- v-model="form.prompt"
- style="height: 10rem;border: 1px solid var(--color-fill-3);border-radius: 4px" placeholder="请填写提示词" />
- </a-form-item>
- <a-form-item field="slider" label="最大token数">
- <a-slider v-model="form.max_token" :min="0" :max="2048" show-input/>
- </a-form-item>
- <a-form-item field="slider" label="阈值" >
- <a-slider v-model="form.threshold" :step="0.01" :min="0" :max="1" show-input/>
- </a-form-item>
- <a-form-item field="slider" label="最大聚类数">
- <a-slider v-model="form.max_cluster" :min="1" :max="1024" show-input/>
- </a-form-item>
- <a-form-item field="slider" label="随机种子" v-model="form.random_seed"
- :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
- <a-input-number v-model="form.random_seed" :style="{width:'300px',marginRight:'1rem',borderRadius:'4px'}"
- placeholder="请输入" class="input-demo" :min="10" :max="100" />
- <a-button type="primary" @click="randomNumber">
- <icon-plus />
- </a-button>
- </a-form-item>
- </div>
- <a-form-item>
- <div style="width: 100%;text-align: right">
- <a-button @click="visible = false">取消</a-button>
- <a-button style="margin-left: 10px" type="primary" html-type="submit">确定</a-button>
- </div>
- </a-form-item>
- </a-form>
- </div>
- </div>
- </a-tab-pane>
- <a-tab-pane key="2">
- <template #title>
- <icon-clock-circle/> 创建解析块
- </template>
- <div class="details">
- <div class="details-header">
- <div style="display: flex; align-items: center;justify-content: flex-end;">
- <a-radio-group v-model="radio" type="button" style="margin-right: 10px" @change="onRadioChange">
- <a-radio value="1">全文</a-radio>
- <a-radio value="2">省略</a-radio>
- </a-radio-group>
- <a-popover position="bottom">
- <a-button type="outline" class="button" style="margin-right: 10px;">批量<icon-down style="margin-left: 4px" /></a-button>
- <template #content>
- <a-space direction="vertical">
- <a-checkbox :model-value="checkedAll" :indeterminate="indeterminate" @change="handleChangeAll" style="margin-left: 10px">
- 选择所有
- </a-checkbox>
- </a-space>
- <a-divider style="margin: 10px 0" />
- <p>
- <a-button type="text" class="button" style="color: #2a2a2b">
- <template #icon>
- <icon-check-circle />
- </template>
- 启用选定的
- </a-button>
- </p>
- <p>
- <a-button type="text" class="button" style="color: #2a2a2b">
- <template #icon>
- <icon-close-circle />
- </template>
- 禁用选定的
- </a-button>
- </p>
- <a-divider style="margin: 10px 0" />
- <p>
- <a-button type="text" class="button" style="color: #2a2a2b">
- <template #icon>
- <icon-delete />
- </template>
- 删除选定的
- </a-button>
- </p>
- </template>
- </a-popover>
- <a-button type="outline" class="button" style="margin-right: 10px">
- <template #icon>
- <icon-search />
- </template>
- </a-button>
- <a-popover position="bottom">
- <a-button type="outline" class="button" style="margin-right: 10px"><icon-sort /></a-button>
- <template #content>
- <a-radio-group v-model="available_int" direction="vertical" size="large" @change="onChangeavailable">
- <a-radio value="">所有</a-radio>
- <a-radio value="1">启用</a-radio>
- <a-radio value="0">禁用</a-radio>
- </a-radio-group>
- </template>
- </a-popover>
- <addDetails :item="item"></addDetails>
- </div>
- </div>
- <a-divider style="margin-top: 10px" />
- <div class="groupMain">
- <a-checkbox-group v-model="data" @change="handleChange" >
- <div class="groupList" :class="{groupActive:keyBg=='1',groupNoActive:keyBg!='1'}">
- <a-checkbox value="1"></a-checkbox>
- <div class="groupList-content" @click="groupListContentClick('1')" @dblclick="contentClick(1)">
- 而 stable version 是最新稳定版,经过充分测试和验证,bug 较少,
- 适合用于生产环境。其版本号通常为双数,如 1.26。legacy versions
- 则是之前发布的稳定版,对于需要
- 特定旧版本的兼容性或安全性支持的用户有用,但一般不
- 推荐用于新项目,除非有特殊需求。在实际使用中,如果追求最新功能
- 且愿意面对可能存在的一些不稳定因素,可以尝试使用主线版本进行测试和研究;如果是用于生产环境
- </div>
- <div class="groupList-right">
- <a-switch v-model="switchType" checked-value="1" unchecked-value="0" @change="handleChangeStatus()"/>
- </div>
- </div>
- <div class="groupList" :class="{groupActive:keyBg=='2',groupNoActive:keyBg!='2'}">
- <a-checkbox value="1"></a-checkbox>
- <div class="groupList-content" @click="groupListContentClick('2')" @dblclick="contentClick(1)">
- 而 stable version 是最新稳定版,经过充分测试和验证,bug 较少,
- 适合用于生产环境。其版本号通常为双数,如 1.26。legacy versions
- 则是之前发布的稳定版,对于需要
- </div>
- <div class="groupList-right">
- <a-switch v-model="switchType" checked-value="1" unchecked-value="0" @change="handleChangeStatus()"/>
- </div>
- </div>
- </a-checkbox-group>
- </div>
- </div>
- <eidtDetails ref="eidtDil"></eidtDetails>
- </a-tab-pane>
- </a-tabs>
- </a-modal>
- </template>
- <script lang="ts" setup>
- import { onMounted, onBeforeMount, reactive, ref, computed } from "vue";
- import { Message } from "@arco-design/web-vue";
- import {kbdocumentchangeparser} from "@/api/kbList";
- import addDetails from '@/views/dmx/knowledgeLib/addDetails.vue'
- import eidtDetails from '@/views/dmx/knowledgeLib/eidtDetails.vue'
- const visible = ref(false);
- const loading = ref(false);
- const radio = ref('1');
- const keyBg = ref('');
- const eidtDil = ref();
- const props = defineProps(['kbtenantInfo','item','kbdetail'])
- // const emit = defineEmits(['upTabdateItem'])
- let threshold = computed(()=>{
- return form.threshold/100;
- })
- const kbtenantInfo = props.kbtenantInfo;
- let parser_ids = kbtenantInfo.parser_ids.split(',').map((item) => {
- const [value1, value2] = item.split(':');
- return {
- name: value2,
- value: value1,
- };
- });
- const form = reactive({
- parser_id: props.item.parser_id,
- doc_id: props.item.id,
- max_token: 698,
- threshold: 0.30,
- max_cluster: 233,
- random_seed: 1500,
- chunk_token_num: 128,
- use_raptor: false,
- pages: {},
- prompt: '请总结以下段落。 小心数字,不要编造。 段落如下:\n' +
- ' {cluster_content}\n' +
- '以上就是你需要总结的内容。',
- });
- const formRef = ref(null);
- const rules = {
- prompt: [
- {
- required: true,
- message:'提示词不允许为空',
- },
- ],
- }
- const formatter = (value) => {
- return value / 100
- };
- function randomNumber() {
- // 生成一个介于min和max之间的随机整数(包含min和max)
- const min = 1; // 最小值
- const max = 10000; // 最大值
- form.random_seed = Math.floor(Math.random() * (max - min + 1)) + min;
- }
- const handleSubmit = async ({values, errors}) => {
- if(!errors){
- let data = await kbdocumentchangeparser({
- parser_id: form.parser_id,
- doc_id: form.doc_id,
- parser_config: {
- raptor: {
- use_raptor: form.use_raptor,
- prompt: form.prompt,
- max_token: form.max_token,
- threshold: form.threshold,
- max_cluster: form.max_cluster,
- random_seed: form.random_seed,
- },
- chunk_token_num: form.chunk_token_num,
- pages: [
- ]
- }
- })
- if(data.code == 0){
- Message.success('配置成功');
- }else{
- Message.error('配置失败');
- }
- visible.value = false;
- }
- }
- const handleClick = () => {
- visible.value = true;
- };
- const handleCancel = () => {
- visible.value = false;
- }
- const contentClick = (done) => {
- eidtDil.value.handleClick();
- }
- const handleOpened =(el) => {
- // console.log('props',props.kbtenantInfo);
- // console.log('props',props.item);
- // console.log('props',props.kbdetail);
- console.log(parser_ids, 'parser_ids');
- // Object.assign(form,{
- // name: '',// 用户名
- // nameJoin: '',// 昵称
- // post: '',// 岗位
- // txt: '',// 备注
- // });
- // formRef.value.resetFields();
- console.log(props.item.id);
- }
- const onChangeRAPTOR = () => {
- };
- const indeterminate = ref(false)
- const checkedAll = ref(false)
- const data = ref([])
- const switchType = ref(false)
- const available_int = ref('')
- const onRadioChange = () => {
- console.log(radio.value);
- };
- const handleChangeAll = (value) => {
- indeterminate.value = false;
- if (value) {
- checkedAll.value = true;
- data.value = ['1', '2', '3']
- } else {
- checkedAll.value = false;
- data.value = []
- }
- }
- const handleChange = (values) => {
- if (values.length === 3) {
- checkedAll.value = true
- indeterminate.value = false;
- } else if (values.length === 0) {
- checkedAll.value = false
- indeterminate.value = false;
- } else {
- checkedAll.value = false
- indeterminate.value = true;
- }
- }
- const groupListContentClick = (value) => {
- keyBg.value = value;
- }
- const onChangeavailable = ()=>{
- console.log(available_int.value);
- }
- const handleChangeStatus = ()=>{
- console.log(switchType.value);
- }
- onBeforeMount(()=>{
- })
- onMounted(()=>{
- })
- </script>
- <style scoped lang="less">
- .parser{
- width: 100%;
- ::v-deep .arco-btn-outline:hover, .arco-btn-outline, .arco-btn-outline[type='button']{
- color: #2a2a2b;
- border: 1px solid #2a2a2b;
- }
- .button{
- //color: #2a2a2b!important;
- }
- }
- .groupMain{
- width: 100%;
- height: 500px;
- overflow: auto;
- display: flex;
- justify-content: center;
- .groupList{
- display: flex;
- padding: 24px;
- border-radius: 8px;
- //background: #eff8ff;
- border: 1px solid #f0f0f0;
- margin-bottom: 20px;
- overflow: auto;
- .groupList-content{
- width: 700px;
- //height: 100px;
- overflow: auto;
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- color: #2a2a2b;
- font-size: 14px;
- font-family: Inter;
- position: relative;
- }
- }
- }
- .groupActive{
- background: #eff8ff;
- }
- .groupNoActive{
- background: var(--color-bg-1);
- color: var(--color-text-1);
- }
- </style>
|