liudong
2024-07-29 d17d3ac3da20d054223a0b1b31909bd0d9caad4d
知识库页面解析方法接口调用开发
2个文件已修改
181 ■■■■■ 已修改文件
src/views/dmx/knowledgeLib/index.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dmx/knowledgeLib/tool.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dmx/knowledgeLib/index.vue
@@ -166,6 +166,9 @@
                  <template #create_time="{ record }">
                    <span>{{parseTime(record.create_time)}}</span>
                  </template>
<!--                  <template #parser_id="{ record }">-->
<!--                    <span>{{ parser_ids[record.parser_id]}}</span>-->
<!--                  </template>-->
                  <template #status="{ record }">
                    <a-switch v-model="record.status"  checked-value="1" unchecked-value="0" @change="handleChangeStatus(record)"/>
                  </template>
@@ -210,9 +213,9 @@
                    </div>
                  </template>
                  <template #action="{ record }" >
                    <tool/>
                    <tool :kbtenantInfo="kbtenantInfo" :item="record" :kbdetail="kbdetail" />
                    <edit :item="record" @upTabdateItem="upTabdateItem"/>
                    <a-popconfirm :content="t('确定删除吗')" type="warning" @ok="deleteItem(record)">
                    <a-popconfirm :content="'确定删除吗'" type="warning" @ok="deleteItem(record)">
                      <a-button  type="text" size="small">
                        <template #icon>
                          <icon-delete />
@@ -333,6 +336,20 @@
  let detailsShow = ref(false)
  let selectedTab = ref(0)
  let kbobj = reactive({})
  let kbdetail = reactive({})
  let parser_ids = reactive({})
  let kbtenantInfo = reactive({
    "asr_id": "paraformer-realtime-8k-v1",
    "embd_id": "BAAI/bge-large-zh-v1.5",
    "img2txt_id": "qwen-vl-max",
    "llm_id": "qwen-plus",
    "name": "wanghao‘s Kingdom",
    "parser_ids": "naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One",
    "rerank_id": "BAAI/bge-reranker-v2-m3",
    "role": "owner",
    "tenant_id": "948fc6fa41ab11ef8fb80242ac120004",
    parser_idObj:{}
  })
  let tabs = ref([])
  const  selectTab = (index,item) => {
@@ -450,11 +467,21 @@
      const  data  = await queryKbDocumentList(params);
      console.log(data, 'data');
      if(data.code=='0'){
        //   详情
        // const  kbtenantInfo  = await queryKbtenantInfo();
        parser_ids = kbtenantInfo.parser_ids.split(',').reduce((acc, pair) => {
          const [key, value] = pair.split(':');
          acc[key] = value;
          return acc;
        }, {});
        console.log(parser_ids, 'parser_ids');
        kbtenantInfo.parser_idObj = parser_ids;
        renderData.value = data.data.docs||[];
        renderData.value = renderData.value.map((item) => {
          return {
            ...item,
            loading: false,
            parser_id: parser_ids[item.parser_id],
          };
        });
        console.log(renderData.value, 'renderData.value');
@@ -462,11 +489,9 @@
        pagination.current = params.page;
        pagination.total = data.data.total;
        //   查询知识库详情
        const  kbdetail  = await queryKbdetail({
        kbdetail  = await queryKbdetail({
          kb_id:params.kb_id,
        });
        //   详情
        // const  kbtenantInfo  = await queryKbtenantInfo();
src/views/dmx/knowledgeLib/tool.vue
@@ -10,6 +10,7 @@
    title="解析方法"
    @before-open="handleOpened"
    @cancel="handleCancel"
    @opened="handleOpened"
    :footer="false"
    title-align="start"
    width="700px"
@@ -19,56 +20,53 @@
      解析方法:
    </div>
    <div style="margin-left: 10px">
      <a-select v-model="form.section" placeholder="请选择" allow-clear>
        <a-option value="section one">Section One</a-option>
        <a-option value="section two">Section Two</a-option>
        <a-option value="section three">Section Three</a-option>
      <a-select v-model="form.parser_id" placeholder="请选择" width="200px">
        <a-option v-for="item in parser_ids" :key="item.value" :label="item.name" :value="item.value"></a-option>
      </a-select>
    </div>
  </div>
    <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数"
                   :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
        <a-slider v-model="form.section" :max="10" />
        <a-input-number v-model="form.section" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
                        placeholder="Please Enter" class="input-demo" :min="10" :max="1000" />
      <a-form-item field="slider" label="块token数"
                   :rules="[{type:'number', min:1,message:'slider is min than 1'}]">
        <a-slider v-model="form.chunk_token_num" :max="1000" />
        <a-input-number v-model="form.chunk_token_num" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
                        placeholder="请输入" class="input-demo"  :max="1000" />
      </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.raptor" @change="onChangeRAPTOR" />
          <a-switch v-model="form.use_raptor" @change="onChangeRAPTOR" />
        </a-space>
      </a-form-item>
      <div v-if="form.raptor">
        <a-form-item field="section" label="提示词">
      <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=""
                      allow-clear />
            style="height: 10rem;border: 1px solid  var(--color-fill-3);border-radius: 4px" placeholder="请填写提示词"  />
        </a-form-item>
        <a-form-item field="slider" label="最大token数"
                     :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
          <a-slider v-model="form.score" :max="10" />
          <a-input-number v-model="form.score" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
          <a-slider v-model="form.max_token" :min="1" :max="1000"/>
          <a-input-number v-model="form.max_token" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
                          placeholder="Please Enter" class="input-demo" :min="10" :max="1000" />
        </a-form-item>
        <a-form-item field="slider" label="阈值" :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
          <a-slider v-model="form.score" :max="10" />
          <a-input-number v-model="form.score" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
                          placeholder="Please Enter" class="input-demo" :min="10" :max="1000" />
          <a-slider v-model="form.threshold" :max="1" />
          <a-input-number v-model="form.threshold" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
                          placeholder="Please Enter" class="input-demo" :min="0" :max="1" />
        </a-form-item>
        <a-form-item field="slider" label="最大聚类数"
                     :rules="[{type:'number', min:5,message:'slider is min than 5'}]">
          <a-slider v-model="form.score" :max="10" />
          <a-input-number v-model="form.score" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
          <a-slider v-model="form.max_cluster" :max="1000" />
          <a-input-number v-model="form.max_cluster" :style="{width:'100px',marginLeft:'2rem',borderRadius:'4px'}"
                          placeholder="Please Enter" class="input-demo" :min="10" :max="1000" />
        </a-form-item>
        <a-form-item field="slider" label="随机种子"
        <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.score" :style="{width:'300px',marginRight:'1rem',borderRadius:'4px'}"
          <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="">
          <a-button type="primary" @click="randomNumber">
            <icon-plus />
          </a-button>
@@ -87,25 +85,34 @@
<script lang="ts" setup>
import { onMounted ,onBeforeMount, reactive, ref } from "vue";
import { Message } from "@arco-design/web-vue";
import {kbdocumentchangeparser} from "@/api/kbList";
const visible = ref(false);
const loading = ref(false);
const props =  defineProps(['kbtenantInfo','item','kbdetail'])
// const emit =  defineEmits(['upTabdateItem'])
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({
  size: "medium",
  name: "",
  age: undefined,
  section: "0",
  province: "haidian",
  options: [],
  date: "",
  time: "",
  radio: "radio one",
  slider: 5,
  score: 5,
  switch: false,
  multiSelect: ["section one"],
  treeSelect: "",
  raptor: true,
  parser_id: props.item.parser_id,
  doc_id: props.item.id,
  max_token: 698,
  threshold: 0.32,
  max_cluster: 233,
  random_seed: 1500,
  chunk_token_num: 128,
  use_raptor: false,
  pages: {},
  prompt: '请总结以下段落。 小心数字,不要编造。 段落如下:\n' +
    '      {cluster_content}\n' +
    '以上就是你需要总结的内容。',
@@ -113,17 +120,48 @@
const formRef = ref(null);
const rules = {
  name: [
  prompt: [
    {
      required: true,
      message:'名称不允许为空',
      message:'提示词不允许为空',
    },
  ],
}
  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 = ({values, errors}) => {
  console.log('values:', values, '\nerrors:', errors)
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 = () => {
@@ -145,17 +183,21 @@
}
const handleOpened =(el) => {
  Object.assign(form,{
    name: '',// 用户名
    nameJoin: '',// 昵称
    post: '',// 岗位
    txt: '',// 备注
  });
  formRef.value.resetFields();
  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();
}
const onChangeRAPTOR = () => {
  console.log(form.raptor);
};
onBeforeMount(()=>{