zhangjinyang
2025-05-16 01d3b39eca89b13409b21ae5604c44cbc97236b1
Merge remote-tracking branch 'origin/main'
5个文件已修改
10个文件已添加
186 ■■■■ 已修改文件
aiflowy-ui-react/src/pages/ai/Knowledge.tsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aiflowy-ui-react/src/pages/ai/aiKnowledge/FileImportPanel.tsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aiflowy-ui-react/src/pages/ai/plugin/PluginToolEdit.tsx 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/.vitepress/config.mts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/create-knowledge.md 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/embedding.md 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/config_embedding_first.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/config_embedding_second.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/create_knowledge.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/file_import_first.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/file_import_second.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/search_test.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/resource/what_is_knowledge.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/splitter.md 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/zh/product/knowledge/what-is-knowledge.md 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aiflowy-ui-react/src/pages/ai/Knowledge.tsx
@@ -120,7 +120,7 @@
        key: 'vectorEmbedLlmId',
        dict: '/api/v1/aiLlm/list?supportEmbed=true',
        editCondition: (data: any) => {
            return data?.options?.canUpdateEmbedding != false;
            return data?.options?.canUpdateEmbedding != true;
        },
        form: {
            type: 'select',
aiflowy-ui-react/src/pages/ai/aiKnowledge/FileImportPanel.tsx
@@ -218,7 +218,7 @@
                    {/* 上传文件 */}
                    <p className="section-description">
                        支持 txt, pdf, docx, md, xlsx 格式文件,单次最多上传 {maxCount} 个文件,单个大小不超过 20M。
                        支持 txt, pdf, docx, md 格式文件,单次最多上传 {maxCount} 个文件,单个大小不超过 20M。
                    </p>
                    <div style={{display: "flex",  flexDirection:"column", width:"500px"}}>
aiflowy-ui-react/src/pages/ai/plugin/PluginToolEdit.tsx
@@ -110,30 +110,30 @@
    };
    const handleAdd = () => {
            const newData: inputDataParameter = {
                key: Date.now().toString(),
                name: '',
                description: '',
                type: 'String',
                method: 'Query',
                required: true,
                defaultValue: '',
                enabled: true,
            };
            setInputData([...inputData, newData]);
        const newData: inputDataParameter = {
            key: Date.now().toString(),
            name: '',
            description: '',
            type: 'String',
            method: 'Query',
            required: true,
            defaultValue: '',
            enabled: true,
        };
        setInputData([...inputData, newData]);
    };
    const handleAddOutputData = () => {
            const newData: outputDataParameter = {
                key: Date.now().toString(),
                name: '',
                description: '',
                type: 'String',
                required: true,
                enabled: true,
            };
            setOutputData([...outputData, newData]);
        const newData: outputDataParameter = {
            key: Date.now().toString(),
            name: '',
            description: '',
            type: 'String',
            required: true,
            enabled: true,
        };
        setOutputData([...outputData, newData]);
    };
    const handleDeleteInputData = (key: string) => {
@@ -160,12 +160,12 @@
            {
                title: (
                    <div style={{display: 'flex'}}>
                    <span>参数名称<span style={{ color: 'red', marginLeft: 4 }}>*</span></span>
                    <div  style={{marginLeft: 5}}>
                        <Tooltip title="当前工具返回的参数">
                            <QuestionCircleOutlined/>
                        </Tooltip>
                    </div>
                        <span>参数名称<span style={{ color: 'red', marginLeft: 4 }}>*</span></span>
                        <div  style={{marginLeft: 5}}>
                            <Tooltip title="当前工具返回的参数">
                                <QuestionCircleOutlined/>
                            </Tooltip>
                        </div>
                    </div>
                ),
                width: 150,
@@ -596,7 +596,7 @@
                    <Form.Item label="id" name="id" hidden rules={[{ required: true }]}>
                        <Input />
                    </Form.Item>
                    <Form.Item label="工具名称" name="name" rules={[{ required: true, pattern: /^[a-zA-Z0-9_-]+$/, message: '仅包含字母、数字、下划线或连字符的字符串' }]} >
                    <Form.Item label="工具名称" name="name" rules={[{ required: true }]}>
                        <Input />
                    </Form.Item>
                    <Form.Item label="工具描述" name="description" rules={[{ required: true }]}>
@@ -625,7 +625,7 @@
                    <div>
                        <strong>工具路径:</strong>
                        {pluginToolInfo?.data?.aiPlugin?.baseUrl
                            && pluginToolInfo?.data?.data?.basePath ?
                        && pluginToolInfo?.data?.data?.basePath ?
                            pluginToolInfo?.data?.aiPlugin?.baseUrl+pluginToolInfo?.data?.data?.basePath
                            :
                            pluginToolInfo?.data?.aiPlugin?.baseUrl+'/'+pluginToolInfo?.data?.data?.name
docs/.vitepress/config.mts
@@ -189,6 +189,9 @@
            collapsed: false,
            items: [
                {text: '什么是知识库', link: '/knowledge/what-is-knowledge'},
                {text: '创建知识库', link: '/knowledge/create-knowledge'} ,
                {text: '文档分片', link: 'knowledge/splitter'},
                {text: 'Embedding 模型', link: 'knowledge/embedding'},
                {text: '快速开始', link: '/knowledge/quick-start'},
            ]
        },
docs/zh/product/knowledge/create-knowledge.md
New file
@@ -0,0 +1,26 @@
# 如何创建一个知识库
这里以向量数据库 **redis-stack** 为例,创建知识库的时候需要注意以下几点:
1. **知识库名称**:知识库的名称非常重要,所以请确保名称不重复。知识库名称需要让大模型识别,大模型会判断该知识库的名称,从而进行知识库的检索。
2. **知识库描述**:知识库的描述是可选的,但是建议添加描述,方便用户了解知识库的内容。
## 1. 创建向量模型
请参考 [如何创建向量模型](/zh/product/knowledge/embedding)
## 2. 创建知识库
![img_1.png](resource/create_knowledge.png)
## 3. 向知识库导入文件
1. 进入知识库 **文件导入** 页面
![file_import_first.png](resource/file_import_first.png)
2. 首先选择 **分割器** ,然后设置分割器参数,然后选择 点击 **上传文件**,文件分割成功后会返回分割的效果
![file_import_second.png](resource/file_import_second.png)
3. 返回分割效果后,点击 **确认导入**,等待文件上传到知识库中,会提示 **上传成功**
## 4. 检索测试
![search_test.png](resource/search_test.png)
docs/zh/product/knowledge/embedding.md
New file
@@ -0,0 +1,27 @@
# 向量模型
## 介绍
Embedding 模型处理器是一款基于最先进神经网络的向量化计算引擎,能够将文本、图像等非结构化数据转化为高维向量表示。适用于语义搜索、智能推荐、聚类分析等AI应用场景
如何更好的利用好知识库,向量模型的选择是非常重要的,这里建议使用 [模力方舟](https://ai.gitee.com/) 的向量模型。向量模型支持的维度越高,搜索的准确度越高,但是搜索速度越慢。
## 向量模型配置步骤
1. 点击左侧菜单栏的大模型,点击 **新增** 按钮
![config_embedding_first.png](resource/config_embedding_first.png)
2. 如果配置的是知识库的向量模型,记得勾选上 **向量化**, 只有勾选上  **向量化**,向量模型才会生效
![config_embedding_second.png](resource/config_embedding_second.png)
**参数说明**:
**名称**:向量模型名称,可以自由填写<br/>
**品牌**:该模型属于哪个品牌的,**注意**:如果使用 Gitee 的模力方舟,则品牌填写为 **Open AI**<br/>
**API Key**: 向量模型的 ApiKey<br/>
**模型名称**:使用的模型名称,必须和官方的模型名称一致
**其他配置(这里用 Gitee 的向量模型作为配置参考,其他配置参考大模型官方要求进行配置)**:
```yml
embedding=/v1/embeddings # 模型向量化地址
```
docs/zh/product/knowledge/resource/config_embedding_first.png
docs/zh/product/knowledge/resource/config_embedding_second.png
docs/zh/product/knowledge/resource/create_knowledge.png
docs/zh/product/knowledge/resource/file_import_first.png
docs/zh/product/knowledge/resource/file_import_second.png
docs/zh/product/knowledge/resource/search_test.png
docs/zh/product/knowledge/resource/what_is_knowledge.png
docs/zh/product/knowledge/splitter.md
New file
@@ -0,0 +1,48 @@
# 分割器介绍
## **简单文档分割器**:
默认为 **简单文档分割器**,将文件内容按段进行分割,并生成多个文件块。
**简单文档分割器**:主要用于将长文本切分成多个较小的片段(Chunks),并支持片段之间的重叠(Overlap)。
1. 核心参数说明
**(1)chunkSize(分段长度)**
- **含义**:每个文本片段(Chunk)的 最大字符长度(按 String.length() 计算)。
- **作用**:控制单段文本的大小,避免因文本过长导致模型处理困难(如超出 LLM 的上下文窗口限制)。
- **示例**:<br/>
  若 chunkSize=500,则每个片段的字符数 ≤ 500。<br/>
  若剩余文本不足 500 字符,则直接截取剩余部分。
**(2)overlapSize(分段重叠长度)**
- **含义**:相邻两个片段之间 重叠的字符数。
- **作用**:避免因硬截断导致语义断裂(例如一个句子被截成两半)。
- **示例**:
若 chunkSize=500、overlapSize=100,则:
第 1 个片段:0~500 字符
第 2 个片段:400~900 字符(前 100 字符与第 1 片段重叠)
第 3 个片段:800~1300 字符(依此类推)
## **正则文档分割器**:
**正则文档分割器**:采用正则表达式(Regex)作为分割规则,将文档内容按照匹配的模式进行智能拆分,特别适合处理具有规律性结构的文档。
- **智能分割**:根据用户提供的正则表达式模式进行内容分割
- **灵活匹配**:支持所有标准正则表达式语法
- **结构保留**:完美处理结构化文档(如日志、代码等)
## **简单分词器**:
这是一个基于 **Token 计数** 的智能文档分割器,专为处理大语言模型(LLM)输入设计。主要特点:
- 按Token数量而非字符数分割
- 支持重叠分割保持上下文连贯
- 自动处理中文等Unicode字符
- 适配OpenAI等主流模型的Token计算方式
**分段长度**:单段最大Token数<br/>
**分段重叠长度**:    分段重叠Token数
## **Excel片段生成器**:
这是一个专门用于处理 **Excel表格数据** 的文档分割器
**分段长度**:每个分块的行数,根据excel的行数进行分割
docs/zh/product/knowledge/what-is-knowledge.md
@@ -2,18 +2,22 @@
## 1. 知识库概述
知识库是 AIFlowy 平台的核心功能模块,用于存储和管理结构化/非结构化数据,为大模型提供精准信息检索和回答增强能力。
AIFlowy 的知识库功能可视化了 RAG 管道的每个阶段,为应用程序构建者提供了一个友好的 UI,以轻松管理个人或团队知识。它还允许无缝集成到 AI 应用程序中。
开发人员可以上传公司内部文档、常见问题解答和标准工作指南,然后将它们处理成大型语言模型 (LLM) 可以查询的结构化数据。
与 AI 模型中内置的静态预训练数据集相比,知识库中的内容可以实时更新,确保 LLM 始终能够访问最新信息,并有助于避免因数据过时或缺失而引起的问题。
当 LLM 收到用户查询时,它首先使用关键字在知识库中进行搜索。根据这些关键字,知识库返回具有高相关性排名的内容块,为 LLM 提供关键上下文以生成更精确的答案。
这种方法可确保 LLM 不仅仅依赖预先训练的知识。相反,他们还可以从实时文档和数据库中提取数据,从而提高响应的准确性和相关性。
## 2. 核心价值
✅ **精准回答** - 基于企业专属数据生成准确回复
✅ **精准回答** - 基于企业专属数据生成准确回复, 通过检索相关文件,LLM 可以将其答案建立在实际信息的基础上,最大限度地减少幻觉。<br/>
✅ **信息实时性** - 支持动态更新知识内容  
✅ **多模态支持** - 可处理文本/PDF/TXT/MarkDown等多种格式
✅ **多模态支持** - 可处理文本/PDF/TXT/Word/MarkDown/Excel 等多种格式
✅ **智能检索** - 结合语义理解和关键词匹配
## 3. 功能特性
## 3. 知识导入功能
### 3.1 知识管理
```mermaid
    A[知识上传] --> B[文本解析]
    B --> C[向量化处理]
    C --> D[索引构建]
![what_is_knowledge.png](resource/what_is_knowledge.png)