探索COZE知识库的使用方法与设计原则——表格型知识库篇

因为知识库类型有三种、文本类型、表格类型、图片类型,为了深入的探索各种类型的知识库的用法,我将会把这部分内容分为三篇,文本类型知识库篇,表格类型知识库篇,图片类型知识库篇。

约3000字

一、前言

目的

为了更好的使用COZE的知识库,需要对COZE知识库的能力与规则有深入的了解。因此,我计划以“楼盘户型信息查询”为应用场景,探索表格型知识库的使用方法和原则。

已知信息

  • 大模型在调用表格型知识库的时候会使用SQL查询语句来获取表格内的信息
  • 表格型知识库包含以下基本元素:
    • 索引
    • 列名:类似数据库的字段名
    • 描述,是对该列的一个描述
    • 数据类型,是存储于该列的内容的类型是什么
    • 值,就是存储与该列下的值

目标

  • 测试各种情况的查询方式能够获得的结果。
  • 找到影响查询结果的属性;
  • 确定表格型知识库的设计原则。

二、实验过程

设置知识库

创建一个表格型知识库,名称为“房子户型数据”。
包含的列有:
户型名称,建筑面积,户型结构,所在楼栋。
索引使用户型名称
没有填写描述
上传测试数据,如下:

image.png

实验1:对数据进行统计性查询

用户输入

image.png

知识库执行结果

image.png
可以看到,查询表格型使用了SQL语句来查询表格信息,并正确的返回了值。

返回结果

image.png

结论

  1. 可以对表格进行多列的统计性的查询。

实验2:查询多个属性

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 知识库能够理解房型指的是户型,几室指的是户型结构
  2. 知识库会根据问题设置查询的字段。

实验3:查询不存在的属性

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 如果查询不存在的属性(列),那么知识库会在生成SQL时自动的过滤。

实验4:对数据进行范围性的查询

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  • 可以对数据进行范围查询

实验5:输入描述不确切的范围查询

用户输入

image.png
没有明确的说明是两个条件是AND 还是 OR

知识库执行结果

image.png

返回结果

image.png

结论

  1. 知识库会使用AND或者OR来将两个条件组合起来,但是选择逻辑不确定。
  2. 返回结果并没有完全采用知识库查询的全部内容,大模型根据用户输入进行了自己的判断,(不同的大模型是否会做出不同的判断结果有待测试,本次实验不对此进行尝试)

实验6:给出确切且错误的查询范围

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 错误的查询条件并没能生成SQL对数据进行查询(尝试了多次,情况都是这样)

实验7:尝试多段的范围查询

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 无法进行多段的范围查询,后来又尝试了其他的输入,让描述更清楚的表明是两个范围的查询,但是结果是一样的,将这句话分开两次输入是可以返回正常的结果的,因此判断其无法进行多段的范围查询。

实验8:不够精准的定义

用户输入

image.png

知识库执行结果

返回结果

image.png

结论

  1. 当前的列的描述信息是为空的,因此我判断它无法将数据中的#1与1号楼建立联系,因此我计划给楼栋信息列增加描述,增加后的情况我放到“实验改进8.1”中。

实验改进8.1

改进方案

添加所在楼栋列的描述,描述内容为所在楼栋和楼号,例如#1就是1栋楼也就是1号楼,一种户型可能存在于多栋楼中,多栋楼用英文的逗号分割,查询的时候也需要考虑

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 因此得知描述是知识库生成SQL很重要的依据。
  2. 当列的值是多个值时,例如#1,#2,其值最好使用一个起始符和一个结尾符包裹,因为在其查询的时候毕竟是使用LIKE语句,因此,查询#1时会匹配到#10,因此加上结尾符之后就避免了这种情况,例如#1#

实验9:查询某列时,参数是固定值

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 如果输入中明确要求使用那个参数作为查询条件,知识库会直接使用那个参数作为查询条件。
  2. 但是返回值并没有完全使用知识库查询到的全部数据,原因未明。

实验10:查询使用的关键字不标准

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 查询条件并不能完全反应对应字段的全部属性维度,例如示例中,字段值是X室X厅X卫而查询条件是X室,这时候知识库就无法准确的生成查询条件。因为,其实这个字段包含的是三个属性,卧室数量,厅的数量,厕所的数量,所以最好将他们分开,所以我计划修改知识库的列信息,增加这三个属性。实验情况放到“实验改进10.1”

实验改进10.1

改进方案

新增三列,室数量,厅数量,卫数量。列的数据类型都用数字类型,效果如下:

image.png

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 改进后可以得到想要的结果,因此,在表格型知识库设计时,尽量避免在一列中包含多种属性。

实验11:使用多条件查询

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 可以使用更多的条件查询。

实验12:按时间范围查询

注:为了测试日期类型的字段,我增加了一列,开盘时间,类型是time

用户输入

image.png

知识库执行结果

image.png

返回结果

image.png

结论

  1. 是能够以时间范围为查询条件来查询数据的。

实验13:使用布尔值作为查询条件

注:为了测试布尔类型的字段,我增加了一列,VIP房型,类型是布尔值,设置布尔值的时候使用0和1

用户输入

image.png

知识库执行结果

image.png

返回结果

结论

  1. 当数据只有是否两个选择的时候可以选择使用布尔类型作为条件。

三、实验结论

影响结果的因素

  • 知识库的列设置。
  • 知识库列的描述信息。
  • 知识库列的值的类型。
  • 列的值的结构。
  • 处理知识库结果的大模型。

能够实现的查询方式

  1. 可以对表格进行多列的统计性的查询。
  2. 可以查询多个属性(也就是多列),如果列有不存在的列也能识别出来,返回可以查到的数据。
  3. 可以对数据进行范围查询,但是不能进行多段的范围查询。
  4. 可以用某些固定值来查询某列。
  5. 可以使用多条件查询。

知识库设计的原则

  1. 列的描述信息尽可能的详细,这样就能让大模型理解该列就更能应对更复杂的情况。
  2. 每各列中尽可能只存储一种属性,这样才能应对更复杂的查询情况。
  3. 一个列中保存多个值的时候,最好在每个值前面增加一个起始符和一个结束符,并且在列描述中体现,这样可以避免查询到一些类似的值。
  4. 数据的类型一定要使用准确,比如在需要有范围的查询中,查询列需要时数字才能进行准确的查询,而不能用字符串。