Merge remote-tracking branch 'origin/main'
| | |
| | | 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', |
| | |
| | | |
| | | {/* 上传文件 */} |
| | | <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"}}> |
| | |
| | | }; |
| | | |
| | | 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) => { |
| | |
| | | { |
| | | 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, |
| | |
| | | <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 }]}> |
| | |
| | | <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 |
| | |
| | | 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'}, |
| | | ] |
| | | }, |
| New file |
| | |
| | | # 如何创建一个知识库 |
| | | |
| | | 这里以向量数据库 **redis-stack** 为例,创建知识库的时候需要注意以下几点: |
| | | 1. **知识库名称**:知识库的名称非常重要,所以请确保名称不重复。知识库名称需要让大模型识别,大模型会判断该知识库的名称,从而进行知识库的检索。 |
| | | 2. **知识库描述**:知识库的描述是可选的,但是建议添加描述,方便用户了解知识库的内容。 |
| | | |
| | | ## 1. 创建向量模型 |
| | | 请参考 [如何创建向量模型](/zh/product/knowledge/embedding) |
| | | |
| | | ## 2. 创建知识库 |
| | |  |
| | | |
| | | ## 3. 向知识库导入文件 |
| | | 1. 进入知识库 **文件导入** 页面 |
| | | |
| | |  |
| | | |
| | | 2. 首先选择 **分割器** ,然后设置分割器参数,然后选择 点击 **上传文件**,文件分割成功后会返回分割的效果 |
| | | |
| | |  |
| | | |
| | | 3. 返回分割效果后,点击 **确认导入**,等待文件上传到知识库中,会提示 **上传成功** |
| | | |
| | | ## 4. 检索测试 |
| | | |
| | |  |
| New file |
| | |
| | | # 向量模型 |
| | | |
| | | ## 介绍 |
| | | Embedding 模型处理器是一款基于最先进神经网络的向量化计算引擎,能够将文本、图像等非结构化数据转化为高维向量表示。适用于语义搜索、智能推荐、聚类分析等AI应用场景 |
| | | |
| | | 如何更好的利用好知识库,向量模型的选择是非常重要的,这里建议使用 [模力方舟](https://ai.gitee.com/) 的向量模型。向量模型支持的维度越高,搜索的准确度越高,但是搜索速度越慢。 |
| | | |
| | | ## 向量模型配置步骤 |
| | | 1. 点击左侧菜单栏的大模型,点击 **新增** 按钮 |
| | | |
| | |  |
| | | |
| | | 2. 如果配置的是知识库的向量模型,记得勾选上 **向量化**, 只有勾选上 **向量化**,向量模型才会生效 |
| | | |
| | |  |
| | | |
| | | **参数说明**: |
| | | |
| | | **名称**:向量模型名称,可以自由填写<br/> |
| | | **品牌**:该模型属于哪个品牌的,**注意**:如果使用 Gitee 的模力方舟,则品牌填写为 **Open AI**<br/> |
| | | **API Key**: 向量模型的 ApiKey<br/> |
| | | **模型名称**:使用的模型名称,必须和官方的模型名称一致 |
| | | |
| | | **其他配置(这里用 Gitee 的向量模型作为配置参考,其他配置参考大模型官方要求进行配置)**: |
| | | ```yml |
| | | embedding=/v1/embeddings # 模型向量化地址 |
| | | ``` |
| New file |
| | |
| | | # 分割器介绍 |
| | | |
| | | ## **简单文档分割器**: |
| | | 默认为 **简单文档分割器**,将文件内容按段进行分割,并生成多个文件块。 |
| | | |
| | | **简单文档分割器**:主要用于将长文本切分成多个较小的片段(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的行数进行分割 |
| | |
| | | |
| | | ## 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[索引构建] |
| | |  |