探索COZE知识库的使用方法与设计原则——表格型知识库篇
因为知识库类型有三种、文本类型、表格类型、图片类型,为了深入的探索各种类型的知识库的用法,我将会把这部分内容分为三篇,文本类型知识库篇,表格类型知识库篇,图片类型知识库篇。
约3000字
一、前言
目的
为了更好的使用COZE的知识库,需要对COZE知识库的能力与规则有深入的了解。因此,我计划以“楼盘户型信息查询”为应用场景,探索表格型知识库的使用方法和原则。
已知信息
- 大模型在调用表格型知识库的时候会使用SQL查询语句来获取表格内的信息
- 表格型知识库包含以下基本元素:
- 索引
- 列名:类似数据库的字段名
- 描述,是对该列的一个描述
- 数据类型,是存储于该列的内容的类型是什么
- 值,就是存储与该列下的值
目标
- 测试各种情况的查询方式能够获得的结果。
- 找到影响查询结果的属性;
- 确定表格型知识库的设计原则。
二、实验过程
设置知识库
创建一个表格型知识库,名称为“房子户型数据”。
包含的列有:
户型名称,建筑面积,户型结构,所在楼栋。
索引使用户型名称
没有填写描述
上传测试数据,如下:
实验1:对数据进行统计性查询
用户输入
知识库执行结果
可以看到,查询表格型使用了SQL语句来查询表格信息,并正确的返回了值。
返回结果
结论
- 可以对表格进行多列的统计性的查询。
实验2:查询多个属性
用户输入
知识库执行结果
返回结果
结论
- 知识库能够理解房型指的是户型,几室指的是户型结构
- 知识库会根据问题设置查询的字段。
实验3:查询不存在的属性
用户输入
知识库执行结果
返回结果
结论
- 如果查询不存在的属性(列),那么知识库会在生成SQL时自动的过滤。
实验4:对数据进行范围性的查询
用户输入
知识库执行结果
返回结果
结论
- 可以对数据进行范围查询
实验5:输入描述不确切的范围查询
用户输入
没有明确的说明是两个条件是AND 还是 OR
知识库执行结果
返回结果
结论
- 知识库会使用AND或者OR来将两个条件组合起来,但是选择逻辑不确定。
- 返回结果并没有完全采用知识库查询的全部内容,大模型根据用户输入进行了自己的判断,(不同的大模型是否会做出不同的判断结果有待测试,本次实验不对此进行尝试)
实验6:给出确切且错误的查询范围
用户输入
知识库执行结果
返回结果
结论
- 错误的查询条件并没能生成SQL对数据进行查询(尝试了多次,情况都是这样)
实验7:尝试多段的范围查询
用户输入
知识库执行结果
返回结果
结论
- 无法进行多段的范围查询,后来又尝试了其他的输入,让描述更清楚的表明是两个范围的查询,但是结果是一样的,将这句话分开两次输入是可以返回正常的结果的,因此判断其无法进行多段的范围查询。
实验8:不够精准的定义
用户输入
知识库执行结果
返回结果
结论
- 当前的列的描述信息是为空的,因此我判断它无法将数据中的#1与1号楼建立联系,因此我计划给楼栋信息列增加描述,增加后的情况我放到“实验改进8.1”中。
实验改进8.1
改进方案
添加所在楼栋
列的描述,描述内容为所在楼栋和楼号,例如#1就是1栋楼也就是1号楼,一种户型可能存在于多栋楼中,多栋楼用英文的逗号分割,查询的时候也需要考虑
用户输入
知识库执行结果
返回结果
结论
- 因此得知描述是知识库生成SQL很重要的依据。
- 当列的值是多个值时,例如
#1,#2
,其值最好使用一个起始符和一个结尾符包裹,因为在其查询的时候毕竟是使用LIKE
语句,因此,查询#1
时会匹配到#10
,因此加上结尾符之后就避免了这种情况,例如#1#
。
实验9:查询某列时,参数是固定值
用户输入
知识库执行结果
返回结果
结论
- 如果输入中明确要求使用那个参数作为查询条件,知识库会直接使用那个参数作为查询条件。
- 但是返回值并没有完全使用知识库查询到的全部数据,原因未明。
实验10:查询使用的关键字不标准
用户输入
知识库执行结果
返回结果
结论
- 查询条件并不能完全反应对应字段的全部属性维度,例如示例中,字段值是
X室X厅X卫
而查询条件是X室
,这时候知识库就无法准确的生成查询条件。因为,其实这个字段包含的是三个属性,卧室数量,厅的数量,厕所的数量,所以最好将他们分开,所以我计划修改知识库的列信息,增加这三个属性。实验情况放到“实验改进10.1”
实验改进10.1
改进方案
新增三列,室数量,厅数量,卫数量。列的数据类型都用数字类型,效果如下:
用户输入
知识库执行结果
返回结果
结论
- 改进后可以得到想要的结果,因此,在表格型知识库设计时,尽量避免在一列中包含多种属性。
实验11:使用多条件查询
用户输入
知识库执行结果
返回结果
结论
- 可以使用更多的条件查询。
实验12:按时间范围查询
注:为了测试日期类型的字段,我增加了一列,开盘时间,类型是time
用户输入
知识库执行结果
返回结果
结论
- 是能够以时间范围为查询条件来查询数据的。
实验13:使用布尔值作为查询条件
注:为了测试布尔类型的字段,我增加了一列,VIP房型,类型是布尔值,设置布尔值的时候使用0和1
用户输入
知识库执行结果
返回结果
结论
- 当数据只有是否两个选择的时候可以选择使用布尔类型作为条件。
三、实验结论
影响结果的因素
- 知识库的列设置。
- 知识库列的描述信息。
- 知识库列的值的类型。
- 列的值的结构。
- 处理知识库结果的大模型。
能够实现的查询方式
- 可以对表格进行多列的统计性的查询。
- 可以查询多个属性(也就是多列),如果列有不存在的列也能识别出来,返回可以查到的数据。
- 可以对数据进行范围查询,但是不能进行多段的范围查询。
- 可以用某些固定值来查询某列。
- 可以使用多条件查询。
知识库设计的原则
- 列的描述信息尽可能的详细,这样就能让大模型理解该列就更能应对更复杂的情况。
- 每各列中尽可能只存储一种属性,这样才能应对更复杂的查询情况。
- 一个列中保存多个值的时候,最好在每个值前面增加一个起始符和一个结束符,并且在列描述中体现,这样可以避免查询到一些类似的值。
- 数据的类型一定要使用准确,比如在需要有范围的查询中,查询列需要时数字才能进行准确的查询,而不能用字符串。