Procházet zdrojové kódy

fix:知识库一些更新,以及修改地址为内网地址

hanyang před 1 rokem
rodič
revize
abf61ff64e
37 změnil soubory, kde provedl 563 přidání a 135 odebrání
  1. 2 1
      dist/config.js
  2. 8 0
      src/apis/rgflow-dify.js
  3. 0 0
      src/assets/image/management/book_1.svg
  4. 0 0
      src/assets/image/management/book_2.svg
  5. 0 0
      src/assets/image/management/book_3.svg
  6. 0 0
      src/assets/image/management/book_4.svg
  7. 0 0
      src/assets/image/management/knowledge-graph-1.svg
  8. 0 0
      src/assets/image/management/knowledge-graph-2.svg
  9. 0 0
      src/assets/image/management/laws_1.svg
  10. 0 0
      src/assets/image/management/laws_2.svg
  11. 0 0
      src/assets/image/management/manual_1.svg
  12. 0 0
      src/assets/image/management/manual_2.svg
  13. 0 0
      src/assets/image/management/manual_3.svg
  14. 0 0
      src/assets/image/management/manual_4.svg
  15. 0 0
      src/assets/image/management/one_1.svg
  16. 0 0
      src/assets/image/management/one_2.svg
  17. 0 0
      src/assets/image/management/paper_1.svg
  18. 0 0
      src/assets/image/management/paper_2.svg
  19. 0 0
      src/assets/image/management/presentation_1.svg
  20. 0 0
      src/assets/image/management/presentation_2.svg
  21. 0 0
      src/assets/image/management/qa_1.svg
  22. 0 0
      src/assets/image/management/qa_2.svg
  23. 0 0
      src/assets/image/management/resume_1.svg
  24. 0 0
      src/assets/image/management/resume_2.svg
  25. 0 0
      src/assets/image/management/table_1.svg
  26. 0 0
      src/assets/image/management/table_2.svg
  27. 0 0
      src/assets/image/management/tag_1.svg
  28. 0 0
      src/assets/image/management/tag_2.svg
  29. 20 1
      src/modules/knowledge/rgflow/MessageDetail.vue
  30. 441 0
      src/modules/knowledge/rgflow/knowledgeLib/components/ParsingIntroduction.vue
  31. 40 105
      src/modules/knowledge/rgflow/knowledgeLib/config.vue
  32. 26 16
      src/modules/knowledge/rgflow/knowledgeLib/index.vue
  33. 5 1
      src/modules/knowledge/rgflow/knowledgeLib/test.vue
  34. 2 2
      src/router/route.js
  35. 6 5
      src/views/Xiaoshu.vue
  36. 6 0
      src/views/permission/DataTable.vue
  37. 7 4
      vite.config.mjs

+ 2 - 1
dist/config.js

@@ -45,7 +45,8 @@ window.IFRAME_URL_CHUJUAN = 'http://192.168.20.119:8501';
  * 小数系统访问地址
  * 导航栏 小数 通过 无界 微前端 方式嵌入到大模型2.0
  */
-window.XIAOSHU_URL = 'http://smartai.com:8401';
+// window.XIAOSHU_URL = 'http://smartai.com:8401';
+window.XIAOSHU_URL = 'http://192.168.20.116:28005';
 
 /**
  * 如果用户直接点击 菜单 进行会话,则无法获知用户使用哪一个智能体进行对话,所以系统需要一个默认的Agent用来创建对话

+ 8 - 0
src/apis/rgflow-dify.js

@@ -278,3 +278,11 @@ export function kbUpdate(data) {
     data
   });
 }
+// 获取tenant_info
+
+export function getTenantInfo() {
+  return request({
+    url: `/rgflow/v1/user/tenant_info`,
+    method: 'get'
+  });
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/book_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/book_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/book_3.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/book_4.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/knowledge-graph-1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/knowledge-graph-2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/laws_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/laws_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/manual_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/manual_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/manual_3.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/manual_4.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/one_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/one_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/paper_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/paper_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/presentation_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/presentation_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/qa_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/qa_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/resume_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/resume_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/table_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/table_2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/tag_1.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
src/assets/image/management/tag_2.svg


+ 20 - 1
src/modules/knowledge/rgflow/MessageDetail.vue

@@ -1,17 +1,36 @@
 <template>
   <div class="message-detail">
-    <knowledgeLib :kb_id="id"></knowledgeLib>
+    <knowledgeLib v-if="show_lib" :kb_id="id" :kbtenant="kbtenantInfo"></knowledgeLib>
   </div>
 </template>
 
 <script setup>
+import { reactive, ref } from 'vue';
 import knowledgeLib from './knowledgeLib/index.vue';
+import { getTenantInfo } from '../../../apis/rgflow-dify';
+import { Message } from '@arco-design/web-vue';
 const props = defineProps({
   id: {
     type: String,
     required: true
   }
 });
+const kbtenantInfo = ref({});
+const show_lib = ref(false);
+const tenantInfo = async () => {
+  try {
+    const res = await getTenantInfo();
+    if (res.code == 0) {
+      kbtenantInfo.value = { ...res.data };
+      show_lib.value = true;
+    } else {
+      return Message.error('获取参数错误');
+    }
+  } catch (err) {
+    console.log(err);
+  }
+};
+tenantInfo();
 </script>
 <style scoped lang="css">
 .message-detail {

+ 441 - 0
src/modules/knowledge/rgflow/knowledgeLib/components/ParsingIntroduction.vue

@@ -0,0 +1,441 @@
+<template>
+  <section
+    v-if="type === 'naive'"
+    data-inspector-line="34"
+    data-inspector-column="4"
+    data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+    class="categoryPanelWrapper___yI4rY"
+  >
+    <!-- "General" 分块方法说明 -->
+    <h4
+      class="ant-typography topTitle___tNiB9 css-dev-only-do-not-override-1wxecgq"
+      data-inspector-line="37"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+    >
+      "General" {{ $t('knowledgeLib.config_info.h4_1') }}
+    </h4>
+    <p
+      data-inspector-line="40"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+    ></p>
+    <!-- 支持的文件格式为<b>DOCX、EXCEL、PPT、IMAGE、PDF、TXT</b>。 -->
+    <p>{{ $t('knowledgeLib.config_info.p_1_1') }}<b>DOCX、EXCEL、PPT、IMAGE、PDF、TXT</b>。</p>
+    <!-- 此方法将简单的方法应用于块文件: -->
+    <p>{{ $t('knowledgeLib.config_info.p_1_2') }}</p>
+    <p></p>
+    <!-- 系统将使用视觉检测模型将连续文本分割成多个片段。  -->
+    <li>{{ $t('knowledgeLib.config_info.p_1_3') }}</li>
+    <!-- 接下来,这些连续的片段被合并成Token数不超过“Token数”的块。 -->
+    <li>{{ $t('knowledgeLib.config_info.p_1_4') }}</li>
+    <p></p>
+    <h4
+      class="ant-typography css-dev-only-do-not-override-1wxecgq"
+      data-inspector-line="45"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+    >
+      <!--  示例 -->
+      "General" {{ $t('knowledgeLib.config_info.h4_2') }}
+    </h4>
+    <span
+      class="ant-typography css-dev-only-do-not-override-1wxecgq"
+      data-inspector-line="48"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+    >
+      <!-- 提出以下屏幕截图以促进理解。 -->
+      {{ $t('knowledgeLib.config_info.p_2_1') }}
+    </span>
+    <div
+      data-inspector-line="49"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+      class="ant-row imageRow___C3Xpb css-dev-only-do-not-override-1wxecgq"
+      style="margin-left: -5px; margin-right: -5px; row-gap: 10px; display: flex; margin-top: 20px; width: 100%"
+    >
+      <img
+        data-inspector-line="32"
+        data-inspector-column="8"
+        data-inspector-relative-path="src\components\svg-icon.tsx"
+        src="../../../../../assets/image/management/step1.png"
+        alt=""
+        width="50%"
+      />
+      <img
+        data-inspector-line="32"
+        data-inspector-column="8"
+        data-inspector-relative-path="src\components\svg-icon.tsx"
+        src="../../../../../assets/image/management/step2.png"
+        alt=""
+        width="50%"
+      />
+    </div>
+    <h4
+      class="ant-typography css-dev-only-do-not-override-1wxecgq"
+      data-inspector-line="60"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+    >
+      <!-- General 对话示例 -->
+      General {{ $t('knowledgeLib.config_info.h4_3') }}
+    </h4>
+    <div
+      class="ant-divider css-dev-only-do-not-override-1wxecgq ant-divider-horizontal"
+      data-inspector-line="63"
+      data-inspector-column="10"
+      data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
+      role="separator"
+    ></div>
+    <a-divider style="margin-top: 20px" />
+  </section>
+  <section v-if="type === 'qa'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Q&amp;A" 分块方法说明</h4>
+    <div>
+      <p>此块方法支持<b> excel </b>和<b> csv/txt </b>文件格式。</p>
+      <li>
+        如果文件是<b> excel </b>格式,则应由两个列组成 没有标题:一个提出问题,另一个用于答案,
+        答案列之前的问题列。多张纸是 只要列正确结构,就可以接受。
+      </li>
+      <li>如果文件是<b> csv/txt </b>格式 以 UTF-8 编码且用 TAB 作分开问题和答案的定界符。</li>
+      <p>
+        <i> 未能遵循上述规则的文本行将被忽略,并且 每个问答对将被认为是一个独特的部分。 </i>
+      </p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Q&amp;A" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div
+      class="ant-row imageRow___C3Xpb css-1wxecgq"
+      style="margin-top: 10px; margin-left: -5px; margin-right: -5px; row-gap: 10px"
+    >
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; display: flex; gap: 10px"
+      >
+        <!-- <span role="img" class="anticon image___D0j7I"> -->
+        <img src="../../../../../assets/image/management/qa_1.svg" alt="" width="50%" />
+        <!-- </span> -->
+        <!-- <span role="img" class="anticon image___D0j7I"> -->
+        <img src="../../../../../assets/image/management/qa_2.svg" alt="" width="50%" />
+        <!-- </span> -->
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Q&amp;A 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'resume'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Resume" 分块方法说明</h4>
+    <div>
+      <p>支持的文件格式为<b>DOCX</b>、<b>PDF</b>、<b>TXT</b>。</p>
+      <p>简历有多种格式,就像一个人的个性一样,但我们经常必须将它们组织成结构化数据,以便于搜索。</p>
+      <p>
+        我们不是将简历分块,而是将简历解析为结构化数据。 作为HR,你可以扔掉所有的简历,
+        您只需与<i>'RAGFlow'</i>交谈即可列出所有符合资格的候选人。
+      </p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Resume" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div
+      class="ant-row imageRow___C3Xpb css-1wxecgq"
+      style="margin-top: 10px; margin-left: -5px; margin-right: -5px; row-gap: 10px"
+    >
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/resume_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/resume_2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Resume 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'manual'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Manual" 分块方法说明</h4>
+    <div>
+      <p>仅支持<b>PDF</b>。</p>
+      <p>
+        我们假设手册具有分层部分结构。 我们使用最低的部分标题作为对文档进行切片的枢轴。
+        因此,同一部分中的图和表不会被分割,并且块大小可能会很大。
+      </p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Manual" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div
+      class="ant-row imageRow___C3Xpb css-1wxecgq"
+      style="margin-top: 10px; margin-left: -5px; margin-right: -5px; row-gap: 10px"
+    >
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/manual_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/manual_2.svg" alt="" width="50%" />
+      </div>
+
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="margin-top: 10px; padding-left: 5px; padding-right: 5px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/manual_3.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/manual_4.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Manual 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'table'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Table" 分块方法说明</h4>
+    <div>
+      支持
+      <p><b>EXCEL</b>和<b>CSV/TXT</b>格式文件。</p>
+      <p>以下是一些提示:</p>
+      <ul>
+        <li>
+          对于 csv 或 txt 文件,列之间的分隔符为 <em><b>TAB</b></em
+          >。
+        </li>
+        <li>第一行必须是列标题。</li>
+        <li>
+          列标题必须是有意义的术语,以便我们的大语言模型能够理解。
+          列举一些同义词时最好使用斜杠<i>'/'</i>来分隔,甚至更好 使用方括号枚举值,例如
+          <i>'gender/sex(male,female)'</i>.
+          <p>以下是标题的一些示例:</p>
+          <ol>
+            <li>
+              供应商/供货商<b>'TAB'</b>颜色(黄色、红色、棕色)<b>'TAB'</b>性别(男、女)<b
+                >'TAB'尺码(M、L、XL、XXL)</b
+              >
+            </li>
+            <b>
+              <li>
+                姓名/名字<b>'TAB'</b>电话/手机/微信<b>'TAB'</b>最高学历(高中,职高,硕士,本科,博士,初中,中技,中
+                专,专科,专升本,MPA,MBA,EMBA)
+              </li>
+            </b>
+          </ol>
+          <b>
+            <p></p>
+          </b>
+        </li>
+        <b>
+          <li>表中的每一行都将被视为一个块。</li>
+        </b>
+      </ul>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Table" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/table_1.svg" alt="" width="50%" /><img
+          src="../../../../../assets/image/management/table_2.svg"
+          alt=""
+          width="50%"
+        />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Table 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'paper'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Paper" 分块方法说明</h4>
+    <div>
+      <p>仅支持<b>PDF</b>文件。</p>
+      <p>如果我们的模型运行良好,论文将按其部分进行切片,例如<i>摘要、1.1、1.2</i>等。</p>
+      <p>
+        这样做的好处是LLM可以更好的概括论文中相关章节的内容, 产生更全面的答案,帮助读者更好地理解论文。 缺点是它增加了
+        LLM 对话的背景并增加了计算成本, 所以在对话过程中,你可以考虑减少‘<b>topN</b>’的设置。
+      </p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Paper" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/paper_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/paper_2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Paper 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'book'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Book" 分块方法说明</h4>
+    <div>
+      <p>支持的文件格式为<b>DOCX</b>、<b>PDF</b>、<b>TXT</b>。</p>
+      <p>
+        由于一本书很长,并不是所有部分都有用,如果是 PDF,
+        请为每本书设置<i>页面范围</i>,以消除负面影响并节省分析计算时间。
+      </p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Book" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/book_1.svg" alt="" width="50%" /><img
+          src="../../../../../assets/image/management/book_2.svg"
+          alt=""
+          width="50%"
+        />
+      </div>
+
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/book_3.svg" alt="" width="50%" /><img
+          src="../../../../../assets/image/management/book_4.svg"
+          alt=""
+          width="50%"
+        />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Book 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'laws'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Laws" 分块方法说明</h4>
+    <div>
+      <p>支持的文件格式为<b>DOCX</b>、<b>PDF</b>、<b>TXT</b>。</p>
+      <p>法律文件有非常严格的书写格式。 我们使用文本特征来检测分割点。</p>
+      <p>chunk的粒度与'ARTICLE'一致,所有上层文本都会包含在chunk中。</p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Laws" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/laws_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/laws_2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Laws 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'presentation'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"Presentation" 分块方法说明</h4>
+    <div>
+      <p>支持的文件格式为<b>PDF</b>、<b>PPTX</b>。</p>
+      <p>每个页面都将被视为一个块。 并且每个页面的缩略图都会被存储。</p>
+      <p>
+        <i>您上传的所有PPT文件都会使用此方法自动分块,无需为每个PPT文件进行设置。</i>
+      </p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"Presentation" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/presentation_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/presentation_2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">Presentation 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'one'" class="categoryPanelWrapper___yI4rY">
+    <h4 class="font-semibold text-base mt-0 mb-1">"One" 分块方法说明</h4>
+    <div>
+      <p>支持的文件格式为<b>DOCX、EXCEL、PDF、TXT</b>。</p>
+      <p>对于一个文档,它将被视为一个完整的块,根本不会被分割。</p>
+      <p>如果你要总结的东西需要一篇文章的全部上下文,并且所选LLM的上下文长度覆盖了文档长度,你可以尝试这种方法。</p>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">"One" 示例</h4>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/one_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/one_2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h4 class="font-semibold text-base mt-4 mb-1">One 对话示例</h4>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+  <section v-if="type === 'tag'" class="categoryPanelWrapper___yI4rY">
+    <h5 class="font-semibold text-base mt-0 mb-1">"Tag" 分块方法说明</h5>
+    <div>
+      <p>使用“标签”作为分块方法的知识库应该被其他知识库使用,以将标签添加到其块中,对这些块的查询也将带有标签。</p>
+      <p>使用“标签”作为分块方法的知识库<b>不</b>应该参与 RAG 过程。</p>
+      <p>此知识库中的块是标签的示F例,它们演示了整个标签集以及块和标签之间的相关性。</p>
+
+      <p>此块方法支持<b>EXCEL</b>和<b>CSV/TXT</b>文件格式。</p>
+      <p>
+        如果文件为<b>Excel</b>格式,则它应该包含两列无标题:一列用于内容,另一列用于标签,内容列位于标签列之前。可以接受多个工作表,只要列结构正确即可。
+      </p>
+      <p>如果文件为 <b>CSV/TXT</b> 格式,则必须使用 UTF-8 编码并以 TAB 作为分隔符来分隔内容和标签。</p>
+      <p>在标签列中,标签之间使用英文 <b>逗号</b>。</p>
+      <i>不符合上述规则的文本行将被忽略,并且每对文本将被视为一个不同的块。</i>
+    </div>
+    <h5 class="font-semibold text-base mt-4 mb-1">"Tag" 示例</h5>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/tag_1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/tag_2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h5 class="font-semibold text-base mt-4 mb-1">Tag 对话示例</h5>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+    ``
+  </section>
+  <section v-if="type === 'knowledge_graph'" class="categoryPanelWrapper___yI4rY">
+    <h5 class="font-semibold text-base mt-0 mb-1">"Knowledge Graph" 分块方法说明</h5>
+    <div>
+      <p>支持的文件格式为<b>DOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML</b></p>
+      <p>
+        文件分块后,使用分块提取整个文档的知识图谱和思维导图。此方法将简单的方法应用于分块文件: 连续的文本将被切成大约
+        512 个 token 数的块。
+      </p>
+      <p>接下来,将分块传输到 LLM 以提取知识图谱和思维导图的节点和关系。</p>
+
+      注意您需要指定的条目类型。
+      <p></p>
+    </div>
+    <h5 class="font-semibold text-base mt-4 mb-1">"Knowledge Graph" 示例</h5>
+    <span class="ant-typography css-1wxecgq">提出以下屏幕截图以促进理解。</span>
+    <div class="ant-row imageRow___C3Xpb css-1wxecgq" style="margin-left: -5px; margin-right: -5px; row-gap: 10px">
+      <div
+        class="ant-col ant-col-12 css-1wxecgq"
+        style="padding-left: 5px; padding-right: 5px; margin-top: 10px; display: flex; gap: 10px"
+      >
+        <img src="../../../../../assets/image/management/knowledge-graph-1.svg" alt="" width="50%" />
+        <img src="../../../../../assets/image/management/knowledge-graph-2.svg" alt="" width="50%" />
+      </div>
+    </div>
+    <h5 class="font-semibold text-base mt-4 mb-1">Knowledge Graph 对话示例</h5>
+    <div class="ant-divider css-1wxecgq ant-divider-horizontal" role="separator"></div>
+  </section>
+</template>
+
+<script setup>
+const props = defineProps({
+  type: {
+    type: String,
+    default: 'naive'
+  },
+  parser_ids: {
+    type: Array,
+    default: []
+  }
+});
+</script>
+<style scoped></style>

+ 40 - 105
src/modules/knowledge/rgflow/knowledgeLib/config.vue

@@ -1,5 +1,5 @@
 <template>
-  <div ref="scrollContainer" class="main-container">
+  <div ref="scrollContainer" class="main-container-1">
     <div style="position: absolute; top: 0; left: 0; width: 100%; padding: 0 20px">
       <h4 style="margin-bottom: 10px"></h4>
       <!-- 在这里更新您的知识库详细信息,尤其是解析方法。 -->
@@ -12,7 +12,7 @@
           ref="formRef"
           :rules="rules"
           :model="form"
-          :style="{ width: '100%' }"
+          :style="{ width: 'calc(100% - 20px)' }"
           layout="vertical"
           @submit="handleSubmit"
         >
@@ -122,102 +122,14 @@
       </div>
     </div>
     <div class="main-container-rt">
-      <section
-        data-inspector-line="34"
-        data-inspector-column="4"
-        data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-        class="categoryPanelWrapper___yI4rY"
-      >
-        <!-- "General" 分块方法说明 -->
-        <h4
-          class="ant-typography topTitle___tNiB9 css-dev-only-do-not-override-1wxecgq"
-          data-inspector-line="37"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-        >
-          "General" {{ $t('knowledgeLib.config_info.h4_1') }}
-        </h4>
-        <p
-          data-inspector-line="40"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-        ></p>
-        <!-- 支持的文件格式为<b>DOCX、EXCEL、PPT、IMAGE、PDF、TXT</b>。 -->
-        <p>{{ $t('knowledgeLib.config_info.p_1_1') }}<b>DOCX、EXCEL、PPT、IMAGE、PDF、TXT</b>。</p>
-        <!-- 此方法将简单的方法应用于块文件: -->
-        <p>{{ $t('knowledgeLib.config_info.p_1_2') }}</p>
-        <p></p>
-        <!-- 系统将使用视觉检测模型将连续文本分割成多个片段。  -->
-        <li>{{ $t('knowledgeLib.config_info.p_1_3') }}</li>
-        <!-- 接下来,这些连续的片段被合并成Token数不超过“Token数”的块。 -->
-        <li>{{ $t('knowledgeLib.config_info.p_1_4') }}</li>
-        <p></p>
-        <h4
-          class="ant-typography css-dev-only-do-not-override-1wxecgq"
-          data-inspector-line="45"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-        >
-          <!--  示例 -->
-          "General" {{ $t('knowledgeLib.config_info.h4_2') }}
-        </h4>
-        <span
-          class="ant-typography css-dev-only-do-not-override-1wxecgq"
-          data-inspector-line="48"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-        >
-          <!-- 提出以下屏幕截图以促进理解。 -->
-          {{ $t('knowledgeLib.config_info.p_2_1') }}
-        </span>
-        <div
-          data-inspector-line="49"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-          class="ant-row imageRow___C3Xpb css-dev-only-do-not-override-1wxecgq"
-          style="margin-left: -5px; margin-right: -5px; row-gap: 10px; display: flex; margin-top: 20px; width: 100%"
-        >
-          <img
-            data-inspector-line="32"
-            data-inspector-column="8"
-            data-inspector-relative-path="src\components\svg-icon.tsx"
-            src="../../../../assets/image/management/step1.png"
-            alt=""
-            width="50%"
-          />
-          <img
-            data-inspector-line="32"
-            data-inspector-column="8"
-            data-inspector-relative-path="src\components\svg-icon.tsx"
-            src="../../../../assets/image/management/step2.png"
-            alt=""
-            width="50%"
-          />
-        </div>
-        <h4
-          class="ant-typography css-dev-only-do-not-override-1wxecgq"
-          data-inspector-line="60"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-        >
-          <!-- General 对话示例 -->
-          General {{ $t('knowledgeLib.config_info.h4_3') }}
-        </h4>
-        <div
-          class="ant-divider css-dev-only-do-not-override-1wxecgq ant-divider-horizontal"
-          data-inspector-line="63"
-          data-inspector-column="10"
-          data-inspector-relative-path="src\pages\add-knowledge\components\knowledge-setting\category-panel.tsx"
-          role="separator"
-        ></div>
-        <a-divider style="margin-top: 20px" />
-      </section>
+      <ParsingIntroduction :parser_ids="parser_ids" :type="parsingIntroType"></ParsingIntroduction>
     </div>
   </div>
 </template>
 
 <script setup>
 import { onMounted, onBeforeMount, reactive, ref, nextTick, computed } from 'vue';
+import ParsingIntroduction from './components/ParsingIntroduction.vue';
 // import { Message } from '@arco-design/web-vue';
 import { Message } from '../../../../3rd-libs/arco-vue-libs';
 import { queryModelList, kbUpdate, getKnowledgeBaseModel } from '../../../../apis/rgflow-dify';
@@ -232,14 +144,20 @@ const scrollContainer = ref();
 const props = defineProps(['kbtenantInfo', 'kb_id']);
 const emit = defineEmits(['cancleConfig', 'saveConfig']);
 // 解析方法列表
-let parser_ids = props.kbtenantInfo.parser_ids.split(',').map((item) => {
-  const [value1, value2] = item.split(':');
-  return {
-    name: value2,
-    value: value1
-  };
-});
-
+let parser_ids = props.kbtenantInfo.parser_ids
+  .split(',')
+  .map((item) => {
+    const [value1, value2] = item.split(':');
+    console.log(item);
+    return {
+      name: value2,
+      value: value1
+    };
+  })
+  ?.filter((item) => item.value !== 'picture')
+  ?.filter((item) => item.value !== 'audio')
+  ?.filter((item) => item.value !== 'email');
+console.log(parser_ids);
 let kbObj = reactive({});
 let avatarShow = ref(true);
 
@@ -259,9 +177,12 @@ const form = reactive({
   language: 'English',
   permission: '',
   embd_id: '',
-  parser_id: '',
+  parser_id: 'General',
   layout_recognize: true
 });
+const parsingIntroType = computed(() => {
+  return form.parser_id;
+});
 
 const rules = computed(() => {
   return {
@@ -469,13 +390,22 @@ export default {
 };
 </script>
 <style scoped lang="css">
-.main-container {
+.main-container-1 {
   position: relative;
   display: flex;
   justify-content: space-between;
-  height: 100%;
-  overflow-y: auto;
+  border-radius: 8px;
+  background: var(--color-bg-2);
+  padding-top: 80px;
   overflow-x: hidden;
+}
+.main-container {
+  position: relative;
+  display: flex;
+  justify-content: space-between;
+  /* height: calc(100% - 80px); */
+  overflow-y: hidden;
+
   border-radius: 8px;
   background: var(--color-bg-2);
   padding-top: 80px;
@@ -483,6 +413,9 @@ export default {
   .main-container-lf {
     width: calc(40% - 40px);
     border-radius: 10px;
+    /* height: calc(100% - 76px);
+    overflow-y: auto; */
+    overflow-x: hidden;
     .main-container-lf-top {
       width: 100%;
       height: 60px;
@@ -526,8 +459,10 @@ export default {
 
   .main-container-rt {
     width: calc(60% - 40px);
+    /* height: calc(100% - 76px);
+    overflow-y: auto; */
     border-radius: 10px;
-    overflow: hidden;
+    /* overflow: hidden; */
     padding: 20px;
     section {
       width: 100%;

+ 26 - 16
src/modules/knowledge/rgflow/knowledgeLib/index.vue

@@ -212,6 +212,7 @@
                           <a-tag :loading="record.loading" :color="'blue'" border>
                             <!-- 解析中... -->
                             {{ $t('knowledgeLib.table_status_running') }}
+                            {{ Number(record.progress * 100).toFixed(2) + '%' }}
                           </a-tag>
                           <template #content>
                             <div class="popover-content">
@@ -370,7 +371,8 @@ import {
   kbdocumentrun,
   kbdocumentchangeStatus,
   downloadFile,
-  changeStatus
+  changeStatus,
+  getTenantInfo
 } from '../../../../apis/rgflow-dify';
 import { toSyncOwnKnowledge } from './asyc.js';
 // import cloneDeep from 'lodash/cloneDeep';
@@ -389,6 +391,12 @@ const props = defineProps({
   kb_id: {
     type: String,
     default: ''
+  },
+  kbtenant: {
+    type: Object,
+    default: () => {
+      return {};
+    }
   }
 });
 
@@ -428,19 +436,20 @@ let kbdetail = reactive({});
 let parser_ids = reactive({});
 let seeObj = reactive({});
 let toolForm = ref(null);
-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: 'wanghaos 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 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: 'wanghaos 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 kbtenantInfo = reactive({ ...props.kbtenant });
 let tabs = ref([]);
 
 const delete_visible = ref(false); // 删除模态框
@@ -536,6 +545,7 @@ const documentList = async () => {
         acc[key] = value;
         return acc;
       }, {});
+
       kbtenantInfo.parser_idObj = parser_ids;
       renderData.value = data.data.docs || [];
       renderData.value = renderData.value.map((item) => {
@@ -807,8 +817,8 @@ watch(
   },
   { deep: true, immediate: true }
 );
-onMounted(() => {
-  knowledgeData();
+onMounted(async () => {
+  await knowledgeData();
 });
 </script>
 

+ 5 - 1
src/modules/knowledge/rgflow/knowledgeLib/test.vue

@@ -94,7 +94,11 @@
       </a-collapse>
       <div
         class="main-container-rt-down"
-        :style="collapse_status ? 'height: calc(100% - 350px);overflow-y: auto' : 'height: calc(100% - 140px)'"
+        :style="
+          collapse_status
+            ? 'height: calc(100% - 350px);overflow-y: auto'
+            : 'height: calc(100% - 100px);overflow-y: auto'
+        "
       >
         <a-card :bordered="false" v-for="item in chunks" :key="item.chunk_id">
           <template #title>

+ 2 - 2
src/router/route.js

@@ -4,8 +4,8 @@ import Home from '../views/Home.vue';
  * 路由表配置
  */
 export const systemRoutes = [
-  // { path: '/', component: Home, redirect: '/chat/qa' },
-  { path: '/', component: Home, redirect: '/xiaoshu' },
+  { path: '/', component: Home, redirect: '/chat/qa' },
+  // { path: '/', component: Home, redirect: '/xiaoshu' },
   // { path: '/', component: Home },
 
   // 登录与注册 白名单页面

+ 6 - 5
src/views/Xiaoshu.vue

@@ -43,7 +43,8 @@ const is_mounted = ref(false);
 
 const plugins = ref([]);
 
-const xiaoshu_server_url = getConfigField('XIAOSHU_URL');
+// const xiaoshu_server_url = getConfigField('XIAOSHU_URL');
+const xiaoshu_server_url = 'http://192.168.20.119:9301';
 const xiaoshu_websocket_url = getConfigField('WEBSOCKET_BASE_URL');
 const xiaoshu_api_base_url = getConfigField('API_BASE_URL');
 const xiaoshu_assets_url = getConfigField('ASSETS_BASE_URL');
@@ -100,9 +101,9 @@ function getXiaoshuBackUrl() {
 }
 let timer = null;
 onMounted(() => {
-  timer = setInterval(async () => {
-    const res = await pingUser();
-  }, 5000);
+  // timer = setInterval(async () => {
+  //   const res = await pingUser();
+  // }, 5000);
   const currentUser = useCurrentUserStore();
 
   const token = currentUser.token;
@@ -192,7 +193,7 @@ onMounted(() => {
     // 无返回按钮
     insert_script_after_str = `console.log('cant back');`;
   }
-
+  console.log(xiaoshu_server_url);
   const insert_style_str = `
     .xiaoshu-aside-left-back-btn{
       width: 100%;

+ 6 - 0
src/views/permission/DataTable.vue

@@ -67,4 +67,10 @@ const handleSizeChange = (pageSize) => {
   margin-top: 16px;
   justify-content: flex-end;
 }
+:deep(.arco-table-col-fixed-right) {
+  z-index: 0;
+}
+:deep(.arco-table-col-fixed-left) {
+  z-index: 0;
+}
 </style>

+ 7 - 4
vite.config.mjs

@@ -36,8 +36,9 @@ export default defineConfig(({ mode }) => {
         '/api/': {
           // target: 'http://smartai.com:8401',
 
-          // target: 'http://192.168.20.119:9201',
-          target: 'http://smartai.com:8164',
+          target: 'http://192.168.20.119:9201',
+          // target: 'http://192.168.20.116:28004',
+          // target: 'http://smartai.com:8164',
           changeOrigin: true,
           secure: false,
           ws: true,
@@ -53,8 +54,10 @@ export default defineConfig(({ mode }) => {
           rewrite: (path) => path.replace(/^\/dify/, '')
         },
         '/rgflow': {
-          // target: 'http://192.168.20.119:28002/',
-          target: 'http://smartai.com:8294/',
+          // target: 'http://192.168.20.119:11080',
+          // target: 'http://smartai.com:8294/',
+          target: 'http://192.168.20.119:28002/',
+          // target: 'http://smartai.com:8162/',
           changeOrigin: true,
           secure: false,
           ws: true,

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů