Ryuiso преди 3 седмици
родител
ревизия
03e8faf412

BIN
public/ed1.png


BIN
public/ed2.png


BIN
public/home.png


BIN
public/item.png


BIN
public/kg1.png


BIN
public/kg2.png


BIN
public/kg3.png


BIN
public/kgc1.png


BIN
public/kgc10.png


BIN
public/kgc2.png


BIN
public/kgc3.png


BIN
public/kgc4.png


BIN
public/kgc5.png


BIN
public/kgc6.png


BIN
public/kgc7.png


BIN
public/kgc8.png


BIN
public/kgc9.png


BIN
public/rag1.png


BIN
public/rc1.png


BIN
public/rc10.png


BIN
public/rc2.png


BIN
public/testrag.png


+ 162 - 1
src/help/components/MarkdownViewer.tsx

@@ -1,4 +1,6 @@
 import React, { useEffect, useMemo, useRef, useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { BulbOutlined, InfoCircleOutlined, CheckCircleOutlined, ExclamationCircleOutlined, CloseCircleOutlined } from '@ant-design/icons';
 import ReactMarkdown from 'react-markdown';
 import rehypeRaw from 'rehype-raw';
 
@@ -20,6 +22,7 @@ interface MarkdownViewerProps {
 const MarkdownViewer: React.FC<MarkdownViewerProps> = ({ content, onToc }) => {
   const [toc, setToc] = useState<TocItem[]>([]);
   const containerRef = useRef<HTMLDivElement | null>(null);
+  const navigate = useNavigate();
 
   const components = useMemo(() => {
     const getNodeText = (node: any): string => {
@@ -40,6 +43,26 @@ const MarkdownViewer: React.FC<MarkdownViewerProps> = ({ content, onToc }) => {
         );
       };
 
+    const isExternal = (href?: string) => !!href && (/^https?:\/\//i.test(href) || href.startsWith('//'));
+    const handleLinkClick = (e: React.MouseEvent<HTMLAnchorElement>, href?: string) => {
+      if (!href) return;
+      if (href.startsWith('#')) {
+        e.preventDefault();
+        const id = href.slice(1);
+        const el = document.getElementById(id);
+        if (el) {
+          el.scrollIntoView({ behavior: 'smooth', block: 'start' });
+          history.replaceState(null, '', `#${id}`);
+        }
+        return;
+      }
+      if (href.startsWith('/help')) {
+        e.preventDefault();
+        navigate(href);
+        return;
+      }
+    };
+
     return {
       h1: Heading(1),
       h2: Heading(2),
@@ -52,13 +75,136 @@ const MarkdownViewer: React.FC<MarkdownViewerProps> = ({ content, onToc }) => {
       code: (props: any) => (
         <code style={{ background: '#f6f7f9', padding: '2px 4px', borderRadius: 4 }} {...props} />
       ),
-      a: (props: any) => <a target="_blank" rel="noreferrer" {...props} />,
+      a: (props: any) => {
+        const href = props?.href as string | undefined;
+        const external = isExternal(href);
+        return (
+          <a
+            {...props}
+            target={external ? '_blank' : undefined}
+            rel={external ? 'noreferrer' : undefined}
+            onClick={(e) => {
+              if (!external) handleLinkClick(e, href);
+              props?.onClick?.(e);
+            }}
+          />
+        );
+      },
       img: (props: any) => (
         <img
           style={{ maxWidth: '100%', height: 'auto', display: 'block', margin: '12px auto' }}
           {...props}
         />
       ),
+      // Custom: <Tip type="info|warn|success">...children...</Tip>
+      tip: (props: any) => {
+        const type = props?.node?.properties?.type || 'info';
+        const iconName = props?.node?.properties?.['data-icon'];
+        const colorMap: Record<string, { bg: string; bd: string; text: string }> = {
+          info: { bg: '#f5f9ff', bd: '#d6e4ff', text: '#5b6b8c' },
+          warn: { bg: '#fff9f0', bd: '#ffe58f', text: '#ad6800' },
+          success: { bg: '#f6fef9', bd: '#d1fadf', text: '#046c4e' },
+          danger: { bg: '#fff1f0', bd: '#ffa39e', text: '#a8071a' },
+        };
+        const theme = colorMap[type] || colorMap.info;
+        const iconMap: Record<string, React.ReactNode> = {
+          bulb: <BulbOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+          info: <InfoCircleOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+          check: <CheckCircleOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+          success: <CheckCircleOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+          warning: <ExclamationCircleOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+          warn: <ExclamationCircleOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+          danger: <CloseCircleOutlined style={{ fontSize: 18, color: theme.text, marginTop: 2 }} />,
+        };
+        const defaultIconByType: Record<string, React.ReactNode> = {
+          info: iconMap.info,
+          warn: iconMap.warning,
+          success: iconMap.success,
+          danger: iconMap.danger,
+        };
+        const iconNode = iconName ? (iconMap[iconName] || defaultIconByType[type]) : defaultIconByType[type] || iconMap.bulb;
+        return (
+          <div className={`help-tip help-tip-${type}`}
+            style={{
+              background: theme.bg,
+              border: `1px solid ${theme.bd}`,
+              color: theme.text,
+              padding: '12px 14px',
+              borderRadius: 8,
+              lineHeight: 1.6,
+              margin: '12px 0',
+            }}
+          >
+            <div style={{ display: 'flex', gap: 8, alignItems: 'flex-start' }}>
+              {iconNode}
+              <div style={{ flex: 1 }}>{props.children}</div>
+            </div>
+          </div>
+        );
+      },
+      // Custom: <CardGroup cols="3"> <Card ...>...</Card> ... </CardGroup>
+      cardgroup: (props: any) => {
+        const colsProp = props?.node?.properties?.cols;
+        const cols = Number(colsProp) > 0 ? Number(colsProp) : 3;
+        const grid = `repeat(${cols}, minmax(0, 1fr))`;
+        return (
+          <div className="help-card-group" style={{ display: 'grid', gap: 16, gridTemplateColumns: grid, margin: '12px 0' }}>
+            {props.children}
+          </div>
+        );
+      },
+      // Custom: <Card title="" href="/path" data-icon="book-open">children</Card>
+      card: (props: any) => {
+        const p = props?.node?.properties || {};
+        const title = p.title || '';
+        const href = p.href || '';
+        const icon = p['data-icon'] || '';
+        const iconStyle: React.CSSProperties = icon
+          ? {
+              WebkitMaskImage: `url(/resource/icon/${icon}.svg)`,
+              maskImage: `url(/resource/icon/${icon}.svg)`,
+              WebkitMaskRepeat: 'no-repeat',
+              maskRepeat: 'no-repeat',
+              WebkitMaskPosition: 'center',
+              maskPosition: 'center',
+              background: '#1677ff',
+              width: 24,
+              height: 24,
+              display: 'inline-block',
+            }
+          : {};
+        const content = (
+          <div className="help-card" style={{
+            border: '1px solid #eee',
+            borderRadius: 10,
+            padding: 16,
+            background: '#fff',
+            boxShadow: '0 1px 2px rgba(0,0,0,0.03)',
+            height: '100%',
+          }}>
+            <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 }}>
+              {icon ? <span style={iconStyle} /> : null}
+              <div style={{ fontWeight: 600 }}>{title}</div>
+            </div>
+            <div className="help-card-content" style={{ color: '#555' }}>{props.children}</div>
+          </div>
+        );
+        if (!href) return content;
+        const external = isExternal(href);
+        return (
+          <a
+            href={href}
+            style={{ textDecoration: 'none' }}
+            target={external ? '_blank' : undefined}
+            rel={external ? 'noreferrer' : undefined}
+            onClick={(e) => {
+              if (!external) handleLinkClick(e, href);
+            }}
+          >
+            {content}
+          </a>
+        );
+      },
     } as any;
   }, []);
 
@@ -80,6 +226,21 @@ const MarkdownViewer: React.FC<MarkdownViewerProps> = ({ content, onToc }) => {
         .help-markdown figure{margin:16px auto;max-width:100%;}
         .help-markdown figure img{display:block;margin:0 auto;}
         .help-markdown figcaption{margin-top:8px;color:#666;font-size:12px;text-align:center;}
+        .help-card-group{--gap:16px}
+        .help-card a{color:inherit}
+        /* Typography */
+        .help-markdown h1{font-size:28px;line-height:1.35;font-weight:700;margin:32px 0 12px;}
+        .help-markdown h2{font-size:24px;line-height:1.4;font-weight:700;margin:28px 0 12px;}
+        .help-markdown h3{font-size:20px;line-height:1.45;font-weight:600;margin:24px 0 8px;}
+        .help-markdown p{font-size:15.5px;line-height:1.9;margin:10px 0 16px;}
+        .help-markdown ul,.help-markdown ol{padding-left:1.4em;margin:8px 0 16px;}
+        .help-markdown li{margin:4px 0;}
+        .help-markdown strong{font-weight:700;}
+        .help-markdown blockquote{border-left:3px solid #e6f4ff;background:#f7fbff;padding:8px 12px;color:#334155;margin:12px 0;}
+        /* Success Tip showcase style */
+        .help-tip-success{border-radius:14px;padding:16px 18px;border-color:#d1fadf;background:#f6fef9;box-shadow:0 2px 8px rgba(4,108,78,0.04) inset, 0 1px 2px rgba(0,0,0,0.02)}
+        .help-tip-success a{color:#0f766e}
+        .help-tip-success img{border-radius:12px;box-shadow:0 10px 24px rgba(2,44,34,0.08);}
       `}</style>
       <ReactMarkdown rehypePlugins={[rehypeRaw]} components={components}>
         {content}

+ 0 - 4
src/help/docs/audit/intro.md

@@ -1,7 +1,3 @@
----
-title: 应用审核
-order: 30
----
 
 # 应用审核
 

+ 0 - 4
src/help/docs/dataExport/intro.md

@@ -1,7 +1,3 @@
----
-title: 数据导出
-order: 20
----
 
 # 数据导出
 

+ 65 - 26
src/help/docs/guide/overview.md

@@ -1,41 +1,70 @@
----
-title: 概述
-order: 1
----
 
-# 平台总览
+# 平台介绍
 
-本系统面向 AI 应用搭建与知识管理,提供从知识入库、问答调用、到数据导出与审核的全链路能力。你可以在左侧菜单快速进入各模块,或通过右侧目录定位到本页任意小节。
+> 建科•小智 **应用广场** 面向 **RAG(增强检索生成)** 应用搭建与知识管理,提供从知识入库、问答调用、到数据导出的全链路能力。你可以在左侧菜单快速进入各模块,或通过右侧目录定位到本页任意小节。  
 
-## 功能构成
+<Tip type="info" data-icon="info">
+  RAG应用使用请点击  <a href="https://llm.jkec.info:11432">建科•小智</a>!
+</Tip>
 
-- 应用广场(问答应用)
-  - 创建/修改应用,配置模型、知识库、检索参数等
-  - 在线调试(对话预览)、记录管理
-- 知识库
-  - 文档上传(多格式)、切片处理、向量化
-  - 文档与切片的查看、编辑与联动
-- 数据导出
-  - 对话、应用、知识库相关报表导出
-- 应用审核(可选)
-  - 应用上线前的流程化审核
+## 构建流程
+<CardGroup cols="2">
+  <Card title="知识库" href="/help/knowledge/intro" data-icon="book-open">
+    <strong>创建并管理知识库</strong>
+    <ul>
+      <li>支持多格式文档上传</li>
+      <li>支持OCR解析</li>
+    </ul>
+  </Card>
+  <Card title="应用广场" href="/help/questionAnswer/intro" data-icon="glasses">
+    <strong>创建RAG应用</strong>
+    <ul>
+      <li>建科本地化大模型</li>
+      <li>本地知识库</li>
+    </ul>
+  </Card>
+</CardGroup>
+
+## 极速体验
+
+你可直接在 [建科•小智](https://llm.jkec.info:11432) 首页中选择公开的RAG应用开始体验。
+<Tip type="success">
+  选择专业知识、智能管理、项目级应用下的公开应用,点击进入。
+  ![](/home.png)
+  ![](/rag1.png)
+  进入RAG应用后,开始提问即可快速使用
+</Tip>
 
 ## 快速上手
+<Tip type="success">
+1. 在创建知识库,上传文档并完成切片与向量化。  
+
+2. 在“应用广场”创建问答应用,选择要关联的知识库并保存。  
+
+3. 在应用详情页进行在线调试,验证检索与回答效果。  
+
+4. 如需对外使用,提交“应用审核”(如开启该流程)。  
+
+5. 使用“数据导出”导出运行数据。  
 
-1. 在“知识库”中创建知识库,上传文档并完成切片与向量化
-2. 在“应用广场”创建问答应用,选择要关联的知识库并保存
-3. 在应用详情页进行在线调试,验证检索与回答效果
-4. 如需对外使用,提交“应用审核”(如开启该流程)
-5. 使用“数据导出”导出运行数据
+</Tip>
 
 ## 核心概念
+<Tip type="info">
+1. 知识库:用于存放企业/项目文档的容器,文档会被解析为“切片”并向量化。  
+
+2. 切片:从原始文档中拆分出的最小检索单元,便于高效召回。  
+
+3. 向量化:将文本转换为向量表示的过程,用于相似度检索。  
+
+4. 问答应用:对接模型与知识库的应用实例,负责接收问题、检索知识、生成回答。  
+
+</Tip>
+
 
-- 知识库:用于存放企业/项目文档的容器,文档会被解析为“切片”并向量化
-- 切片:从原始文档中拆分出的最小检索单元,便于高效召回
-- 问答应用:对接模型与知识库的应用实例,负责接收问题、检索知识、生成回答
-- 向量化:将文本转换为向量表示的过程,用于相似度检索
 
 ## 常见问题(FAQ)
+<Tip type="warn">
 
 ### 文档上传后未出现切片?
 检查文件类型是否支持、队列是否完成处理,或在详情页手动触发处理。
@@ -45,3 +74,13 @@ order: 1
 
 ### 导出中缺少我需要的字段?
 到“数据导出”中选择对应报表模板;如仍缺失,请联系管理员扩展导出字段。
+</Tip>
+<div style="height: 14px;"></div>
+- 应用广场:查看公开RAG应用,创建/管理自己的RAG应用。
+<div style="height: 14px;"></div>
+- 创建应用:配置模型、选择知识库、设置检索参数,并发布。
+<div style="height: 14px;"></div>
+- 在线调试(编辑模式下可用):对话预览。
+<div style="height: 14px;"></div>
+- 知识库:文档上传(多格式)、切片处理、向量化
+- 文档与切片的查看、编辑与联动

+ 160 - 19
src/help/docs/knowledge/intro.md

@@ -1,28 +1,168 @@
----
-title: 知识库介绍
-order: 10
----
-
 # 知识库
 
-知识库用于统一管理需要参与问答检索的企业文档,并将其切片、向量化后供应用调用。
+> 知识库用于统一管理需要参与问答检索的企业文档,并将其切片、向量化后供RAG应用调用。
+
+## 处理流程
+<CardGroup cols="4">
+  <Card title="1. 新建知识库" data-icon="book-open">
+    <strong>初始化</strong>
+    <ul>
+      <li>填写名称与描述</li>
+      <li>设置公开范围(如需要)</li>
+    </ul>
+  </Card>
+
+  <Card title="2. 上传文档" data-icon="book-open">
+    <strong>解析入库</strong>
+    <ul>
+      <li>等待解析(含 OCR)完成</li>
+      <li>可预览文档元信息</li>
+    </ul>
+  </Card>
+
+  <Card title="3. 切片精修" data-icon="book-open">
+    <strong>质量优化</strong>
+    <ul>
+      <li>查看/编辑切片,新增空白切片/图片</li>
+      <li>实时预览修改效果</li>
+    </ul>
+  </Card>
+
+  <Card title="4. 向量化并使用" data-icon="book-open">
+    <strong>检索就绪</strong>
+    <ul>
+      <li>提交后等待向量化完成</li>
+      <li>RAG 应用即可检索并回答</li>
+    </ul>
+  </Card>
+</CardGroup>
 
 ## 功能清单
-- 新建/编辑/删除知识库
-- 文档管理:上传、替换、删除、预览
-- 切片管理:查看、编辑、定位到原文
-- 向量化与状态监控
+<CardGroup cols="2">
+  <Card title="知识库管理" data-icon="book-open">
+    <strong>创建与维护</strong>
+    <ul>
+      <li>新建 / 编辑 / 删除知识库</li>
+      <li>支持公开/私有的可见性管理</li>
+    </ul>
+  </Card>
+
+  <Card title="文档管理" data-icon="book-open">
+    <strong>文件全生命周期</strong>
+    <ul>
+      <li>上传、替换、删除、预览</li>
+      <li>默认启用 OCR 解析(图片/PDF)</li>
+    </ul>
+  </Card>
+
+  <Card title="切片管理" data-icon="book-open">
+    <strong>可视化与精修</strong>
+    <ul>
+      <li>查看切片、编辑切片、新增空白切片/图片、删除切片</li>
+      <li>切片修改效果可实时预览</li>
+    </ul>
+  </Card>
+
+  <Card title="向量化与检索" data-icon="book-open">
+    <strong>检索就绪</strong>
+    <ul>
+      <li>提交后自动向量化</li>
+      <li>状态完成后即可被 RAG 应用检索</li>
+    </ul>
+  </Card>
+</CardGroup>
+
+
+## 快速上手
+我不想创建知识库,想直接使用现有的公开知识库库来创建自己的RAG应用。
+
+步骤一:
+<Tip type="success">
+  进入知识库菜单,查看所有公开的知识库。
+  ![](/kg1.png)
+  记住知识库的名称,
+</Tip>
+
+<Tip type="warn">
+  当前公开知识库你仅可以查看,无法编辑别人的知识库、也不能在别人创建的公开知识库中添加你自己的文档。
+</Tip>
+
+步骤二:
+<Tip type="success">
+  点击知识库后可以查看到别人/自己的知识库中的文档,以及文档的切片信息。
+  ![](/kg2.png)  
+  ![](/kg3.png)
+</Tip>
+
+## 创建知识库
+用自己的文档创建私有或公开的知识库。  
+<Tip type="success">
+  点击 创建知识库 按钮,开始创建空的知识库集合。
+  ![](/kgc1.png)
+  点击 下一步 
+</Tip>
+
+## 上传文档
+步骤一:
+<Tip type="success">
+  进入上传文件组件。
+  ![](/kgc2.png) 
+</Tip> 
+
+步骤二:
+<Tip type="success">
+  请选择符合上传要求的文件。
+  ![](/kgc3.png)  
+  等待几分钟的解析时间。
+  ![](/kgc4.png)  
+  解析完成后可以看到文档进入知识库列表 ,对解析效果不好的情况可以更改解析配置,重新解析。  
+  ![](/kgc5.png)
+</Tip>
+
+## 切片精修
+工程领域的文档数据集不够标准,直接采用默认的解析效果,可能文件段落信息不完整,导致切片质量不佳,需要进行手动精修。
+
+步骤一:
+<Tip type="success">
+  文档列表页面点 切片 按钮,进入切片列表。
+  ![](/kgc6.png)
+</Tip>
+
+步骤二:
+<Tip type="success">
+  当前列表的可操作功能:删除切片、编辑切片、新增空白切片。
+  ![](/kgc7.png)
+</Tip>
+
+步骤三:
+<Tip type="success">
+  点击编辑切片,可以修改切片内容。编辑器采用Markdown编辑器,支持实时预览。
+  ![](/kgc8.png)
+  支持新增切片,剪切切片内容到其他切片的方式来调整段落完整性。
+</Tip>
+
+## 切片精修-图片处理方法
+步骤一:
+<Tip type="success">
+  原始文档中的图片回被转化为标识符,当图片转化信息不全的时候使用解析图片功能替换掉效果不好的图片。
+  ![](/kgc9.png)
+  当前表格由于文档中旋转了90度,导致解析出来效果不便于阅读,需要人工替换。
+</Tip>
+
+步骤二:
+<Tip type="success">
+  准备需要替换的图片。手动复制出来。
+  ![](/item.png)  
+</Tip>
+
+步骤三:
+<Tip type="success">
+  通过点击解析图片按钮,上传单独复制出来的图片,可以重新解析图片。
+  ![](/kgc10.png)
+  解析成功后,图片标识符将会出现在鼠标光标位置,手动删除掉旧的图片标识符就处理完成
+</Tip>
 
-## 支持的文件类型
-- 常见 Office:docx、xlsx、pptx
-- PDF、txt、md、csv
-- 图片 OCR(如开启)
 
-## 处理流程
-1. 新建知识库,设置名称与描述
-2. 上传文档,等待解析完成
-3. 进入文档详情查看“切片信息”,可手动编辑切片文本
-4. 触发/等待向量化完成,状态为“已向量化”即可用于检索
 
 ## 最佳实践
 - 文档尽量结构化、标题清晰,有利于生成高质量切片
@@ -32,3 +172,4 @@ order: 10
 ## 常见问题
 - 文档解析失败:检查文件是否加密、体积是否过大;必要时转为 PDF 再上传
 - 检索不到内容:确认向量化完成;调整应用的 TopK 与相似度阈值
+- 文件上传失败:支持docx,doc,pdf。默认将docx/doc文件转化为pdf后使用ocr模型解析,解析时间很长导致集团网络认为超时,实际上已提交到服务器中,等待几分钟后刷新页面有出现文件,则表示上传成功,如果刷新后仍然不出文件则表示此次上传任务失败,检查文件或重新上传。

+ 79 - 16
src/help/docs/questionAnswer/intro.md

@@ -1,25 +1,88 @@
----
-title: 应用广场(问答应用)
-order: 1
----
+# 应用广场
 
-# 问答应用
+> 与通用大模型生成对话不同,RAG(Retrieve and Generate)应用会先从知识库中检索相关知识,然后将相关知识作为背景信息输入给大模型,有效地解决大模型本身领域知识不足、提升大模型回答问题的准确性和相关性。
 
-## 适用场景
-- 面向内部/外部用户提供基于企业知识的问答能力
-- 与知识库联动,支持私有化知识检索
+## 示例场景与RAG应用
+<CardGroup cols="3">
+  <Card title="专业知识" href="https://llm.jkec.info:11432/#/knowledgeChat?showMenu=false&chatMode=LOCAL&appId=2935625422066814976" data-icon="book-open">
+    <strong>公司作业指导书(2023版)</strong>
+    <ul>
+      <li>《作业指导书》</li>
+      <li>...</li>
+    </ul>
+  </Card>
+  <Card title="专业知识 " href="https://llm.jkec.info:11432/#/knowledgeChat?showMenu=false&chatMode=LOCAL&appId=2935200536655695872" data-icon="glasses">
+    <strong>常用质量安全规范</strong>
+    <ul>
+      <li>《安全类规范》</li>
+      <li>《质量验收标准》</li>
+      <li>...</li>
+    </ul>
+  </Card>
+  <Card title="项目级应用" href="https://llm.jkec.info:11432/#/knowledgeChat?showMenu=true&chatMode=LOCAL&&appId=2919668410128666624" data-icon="glasses">
+    <strong>数字系统答疑</strong>
+    <ul>
+      <li>建科咨询信息化常见问题答疑</li>
+      <li>...</li>
+    </ul>
+  </Card>
+</CardGroup>
+
+## 创建应用
+
+步骤一:
+<Tip type="success">
+  在“应用广场”创建问答应用,选择应用类型,填写基本参数:是否公开、应用描述。建议增加引导问题。
+  ![](/rc1.png)
+  点击 下一步 后进入详细的配置参数。
+</Tip>
+
+步骤二:
+<Tip type="success">
+  设置引用的知识库、调用的本地大模型、模型参数配置、以及检索设置、召回设置、提示词。
+  ![](/rc2.png)
+  点击 提交应用 ,完成创建。
+</Tip>
+
+<Tip type="warn">
+  如果创建公开应用,需要提交应用审核,审核通过后,应用才可对外使用。
+  项目级应用,暂时无需审核,直接发布后,当前项目下有使用过小智的成员都可见。
+</Tip>
+
+
+## 编辑修改应用
+
+步骤一:
+<Tip type="success">
+  随时可以选择自己的应用对应用进行修改。应用广场中选择自己之前创建的应用。
+  ![](/ed1.png)
+  点击编辑按钮,进入编辑界面。
+</Tip>
+
+步骤二:
+<Tip type="success">
+  在编辑界面,可以再次修改应用基本信息和配置参数。并可以使用实时问答调试界面,调试自己创建应用的准确度。
+  ![](/ed2.png)
+  此时比应用创建时候增加了应用的调试模式。
+</Tip>
+
+步骤三:
+<Tip type="success">
+  直接修改参数,保存后可以实时预览问答效果。
+  ![](/testrag.png)
+  可以直接在问答调试界面中输入问题,查看回答效果,当对效果满意后点击 提交应用,完成修改。
+</Tip>
+
+<Tip type="warn">
+  如果创建公开应用,修改后提交应用仍然需要等待管理员审核,审核通过后,应用才可对外使用。
+</Tip>
 
-## 快速上手
-1. 新建应用,填写名称与描述
-2. 选择模型与参数(温度、最大生成长度等)
-3. 关联知识库与检索参数(TopK、相似度阈值)
-4. 保存后进入应用详情页,使用“在线调试”验证效果
 
 ## 关键配置
 - 模型与温度:影响生成的稳定性与创造性
 - 检索参数:决定召回片段数量与质量
-- 知识库绑定:支持绑定多个知识库(若平台开启)
+- 知识库绑定:支持绑定多个知识库
 
 ## 常见问题
-- 回答不命中:调大 TopK/降低阈值,或优化文档切片粒度
-- 回答冗长:缩短“最大生成长度”,或在提示词中限制字数
+- 回答不命中:优化知识库文档切片粒度,优化提示词,选择严谨模式 ,降低top-p 和温度。
+- 回答冗长:缩短 Max Token (最大生成长度),或在提示词中限制字数

+ 66 - 14
src/help/menu.ts

@@ -15,9 +15,31 @@ export const helpMenu: HelpMenuItem[] = [
   },
   {
     key: 'qa',
-    title: '应用广场(问答应用)',
+    title: '应用广场',
     path: '/help/questionAnswer/intro',
     doc: 'questionAnswer/intro.md',
+    children: [
+      {
+        key: 'create-rag',
+        title: '创建应用',
+        path: '/help/questionAnswer/intro#创建应用',
+      },
+      {
+        key: 'edit-rag',
+        title: '编辑修改应用',
+        path: '/help/questionAnswer/intro#编辑修改应用',
+      },
+      {
+        key: 'parma-rag',
+        title: '关键配置',
+        path: '/help/questionAnswer/intro#关键配置',
+      },
+      {
+        key: 'common-rag',
+        title: '常见问题',
+        path: '/help/questionAnswer/intro#常见问题',
+      },
+    ],
   },
   {
     key: 'knowledge',
@@ -26,22 +48,52 @@ export const helpMenu: HelpMenuItem[] = [
     doc: 'knowledge/intro.md',
     children: [
       {
-        key: 'quickstart',
+        key: 'knowledge-quick',
         title: '快速上手',
         path: '/help/knowledge/intro#快速上手',
       },
+      {
+        key: 'knowledge-create',
+        title: '创建知识库',
+        path: '/help/knowledge/intro#创建知识库',
+      },
+      {
+        key: 'knowledge-upload',
+        title: '上传文档',
+        path: '/help/knowledge/intro#上传文档',
+      },
+      {
+        key: 'chunk-edit',
+        title: '切片精修',
+        path: '/help/knowledge/intro#切片精修',
+      },
+      {
+        key: 'chunk-image',
+        title: '切片精修-图片处理方法',
+        path: '/help/knowledge/intro#切片精修-图片处理方法',
+      },
+      {
+        key: 'practice',
+        title: '最佳实践',
+        path: '/help/knowledge/intro#最佳实践',
+      },
+      {
+        key: 'practice',
+        title: '常见问题',
+        path: '/help/knowledge/intro#常见问题',
+      },
     ],
   },
-  {
-    key: 'dataExport',
-    title: '数据导出',
-    path: '/help/dataExport/intro',
-    doc: 'dataExport/intro.md',
-  },
-  {
-    key: 'audit',
-    title: '应用审核',
-    path: '/help/audit/intro',
-    doc: 'audit/intro.md',
-  },
+  // {
+  //   key: 'dataExport',
+  //   title: '数据导出',
+  //   path: '/help/dataExport/intro',
+  //   doc: 'dataExport/intro.md',
+  // },
+  // {
+  //   key: 'audit',
+  //   title: '应用审核',
+  //   path: '/help/audit/intro',
+  //   doc: 'audit/intro.md',
+  // },
 ];