-
Notifications
You must be signed in to change notification settings - Fork 11
knowledge
Matrix-X edited this page Aug 26, 2024
·
4 revisions
创建知识库的过程包括内容的抽取、分段逻辑的应用、向量化检索的建立,以及向量化存储的实现。以下是详细步骤:
根据不同的文件类型,你需要有很多解析器来支持,还好这些都有成熟的工具,而且Langchain和LLamaIndex都有自己的加载器来支持不同文件了行
在这一步,我们将从不同类型的文档中提取内容,内容可以是:
- 非结构化文档:如PDF、Word等。
- 结构化文档:如Excel、CSV等。
- 按照预设的规则,抽取文档中的内容。
content
可以是PDF中的一页,也可以是长段的文本。 - 可以通过
process_rule
的extract
规则来约定抽取的具体范围。
- 对提取出的
content
进行解析,将其分为TextBlock
(文本块)、ImageBlock
(图像块)和TableBlock
(表格块)等不同类型的块。
这里有自定义的解析规范,基于Block,也可以依赖于Langchain或者LLamaIndex的方法提供
在内容抽取完成后,进行内容的重新分段。默认使用Langchain的RecursiveCharactorTextSplitter的拆分策略
按照处理规则,进行清洗,比如邮件信息,url等,可选清除。
- 根据
block
的rect.Y0
进行排序,生成一个内容列表。 - 通过
process_rule
对列表进行分段,生成DocumentSegment
。每个segment
会映射为两种类型的向量对象:TextNode
和ImageNode
。
-
文档类型分析:
- 根据文档类型选择分割策略,如按段落、章节或句子进行分割。
-
文本长度控制:
- 检查分割后的每个
Segment
长度,太短的可以与相邻的Segment
合并,太长的则进一步细分。
- 检查分割后的每个
-
语义完整性:
- 确保在句子或语义紧密连接处不会进行分割,以保持每个
Segment
的语义完整性。
- 确保在句子或语义紧密连接处不会进行分割,以保持每个
-
特殊结构处理:
- 对文档中的列表、表格、图像等特殊结构进行独立分割,并附带相关元数据。
-
元数据附加:
- 为每个
Segment
添加元数据,如来源页码、位置索引、类型标签等,以便后续检索和分析。
- 为每个
-
特定需求定制:
- 根据应用场景调整分割策略,如为问答系统选择更细粒度的分割,以精确匹配问题和答案。
然后判断每段是否超过了固定长度,比如800字符。如果超过了,则需要按照800字符内,最后一个句号来二次切分,如果有图片或者表格,则需要保证不会被切割破坏。
- 将
DocumentSegment
列表进行向量化处理。 - 使用预设的
embedding model
将内容转化为向量表示,便于后续检索。
- 通过不同的向量数据库将向量数据存储起来。
- 系统封装了驱动,可以根据需求使用不同的框架或SDK来实现存储功能。
- 使用向量化检索功能,从已存储的知识库中召回相关数据。
- 通过相似度匹配,快速找到最相关的内容。
欢迎联系我们,一起沟通学习
请加我的微信号码

Powered By ArtisanCloud