You need to enable JavaScript to run this app.
导航
create_collection
最近更新时间:2024.09.10 20:32:42首次发布时间:2024.05.31 15:26:55

本节将说明如何创建一个新的知识库实例

说明

  • 知识库首次创建需要进行索引初始化,索引构建需要几分钟,构建完成后才能开始进行检索。详细知识库状态信息可以通过 get_collection查看
  • 使用 SDK 前请先完成“安装与初始化“页面的前置步骤

概述

create_collection 用于创建一个新的知识库 Collection

请求参数

参数

子参数

类型

是否必选

默认值

参数说明

collection_name

--

string

--

知识库的名字

  • 只能使用英文字母、数字、下划线_,并以英文字母开头,不能为空
  • 长度要求:[1, 64]
  • 知识库描述信息

project

--

string

default

知识库所属项目
即在【访问控制】-【资源管理】-【项目】中创建的项目

description

--

string

""

知识库描述信息

  • 长度要求:[1, 65535]

data_type

string

unstructured_data

知识库内的数据类型。

  • unstructured_data:非结构化数据
  • structured_data:结构化数据。

index

object

--

索引配置

index_config

object

--

  • "fields":**指定需要在 search 时做筛选的字段名称,**list 类型。"fields" 需要分别设置 field_name 、field_type 和 default_val 。
    • field_type: 支持 list, int64, float32, bool
    • search 时的筛选调用方式参考 请求参数"query_param" 参数
  • "cpu_quota":指定索引检索消耗的 CPU 配额
    • 1CPU 核约为 100 QPS;如果检索消耗的 CPU 超过配额,该索引会被限流。int 类型,需要大于 0 ,默认值 1
  • "embedding_model":指定向量化模型,string 类型
    • 当前支持的模型的枚举值为
      • EmbeddingModelBgeLargeZhAndM3(默认)
      • EmbeddingModelDoubao
      • EmbeddingModelBgeLargeZh
      • EmbeddingModelBgeM3

index_type

string

HNSW_HYBRID

指定索引类型
枚举值如下:

  • HNSW:全称是 Hierarchical Navigable Small World,一种用于在高维空间中采用 ANN 搜索的数据结构和算法,是基于图的索引。HNSW通过构建多层网络减少搜索过程中需要访问的节点数量,实现快速高效地搜索最近邻,适合对搜索效率要求较高的场景。
  • HNSW_HYBRID:支持混合索引的 hnsw 算法。混合索引算法可以同时对数据集中的稠密向量和稀疏向量进行索引,并在检索时返回兼顾两种类型相似性的结果。适用于对搜索效率要求较高,且需要同时检索稀疏和稠密向量的场景。
    • 使用 HNSW_HYBRID 索引时,必须选择 EmbeddingModelM3 或者 EmbeddingModelBgeLargeZhAndM3 作为向量化模型。
  • FLAT:暴力索引,搜索时遍历整个向量数据库的所有向量与目标向量进行距离计算和比较,查询速度较慢,但是 flat 能提供100%的检索召回率,适用于向量候选集较少,且需要100%检索召回率的场景。

preprocessing

object

--

文档处理策略

chunking_strategy

string

default

选用的切片策略
枚举值:

  • “default”:默认切片策略
  • “custom”:自定义切片策略

chunk_length

int

500

最大切片长度
根据选择的 “embedding_model” 设定

  • EmbeddingModelBgeLargeZhAndM3 和 EmbeddingModelBgeLargeZh 可选范围为 [100,500]
  • EmbeddingModelBgeM3 可选范围为 [100,8000]
  • EmbeddingModelDoubao 可选范围为 [100,4000]

默认为 500,超出所选模型支持范围会报错

merge_small_chunks

bool

True

是否合并短文本片
打开后会在不超出 “chunk_length” 的前提下将短小的多个文本片合并为一个 chunk
"merge_small_chunks" 参数只有在 ”chunking_strategy“ == ”custom“ 时传入才生效

multi_mode

--

--

图片召回策略
枚举值:

  • "image_ocr":图片ocr
    当 "multi_mode": ["image_ocr"] 时,开启图片ocr

不传值即代表不开启图片ocr

table_config

object

--

当 data_type为“structured_data”时生效

{
  "table_type": "row","col",
  // row表示从行开始解析,col表示从列开始解析,
  "table_pos": "int",
  // 字段位于第几行或第几列,
  "start_pos": "int",
  // 起始数据在第几行,
  "table_fields": [
      { "field_name": "xxx", //字段名称
          "field_type": "int64", //字段类型, 支持 list<string>, int64, float32, bool
          "if_embedding": true, //是否参与索引
          "default_value":"xxx", //默认值
          "if_filter": false //设置为过滤字段
    },
    .....
  ]
}

向量化模型及索引算法对照表

向量化模型

产出类型

索引类型

检索类型

doubao-embedding

稠密向量

HNSW、FLAT

语义检索(字节自研模型)

EmbeddingModelBgeLargeZh

稠密向量

HNSW、FLAT

语义检索

EmbeddingModelBgeM3

稠密向量和稀疏向量

HNSW_HYBRID

混合检索(兼顾语义检索和关键词匹配)

HNSW、FLAT

语义检索(此时稀疏向量被忽略,适用于只需要长文本窗口、多语言检索的纯语义检索场景)

EmbeddingModelBgeLargeZhAndM3

稠密向量和稀疏向量

HNSW_HYBRID

混合检索(兼顾语义检索和关键词匹配)

示例

请求参数

请先完成SDK初始化,再运行代码,详见初始化SDK

collection_name = "example"
description = "This is an example"

# 自定义index配置、preprocess文档配置构建知识库
index = {
    "index_type": IndexType.HNSW_HYBRID,
    "index_config": {
        "fields": [{
            "field_name": "chunk_len",
            "field_type": FieldType.Int64,
            "default_val": 32
        }],
        "cpu_quota": 1,
        "embedding_model": EmbddingModelType.EmbeddingModelBgeLargeZhAndM3
    }
}
preprocessing = {
    "chunk_length": 200,
}
my_collection = viking_knowledgebase_service.create_collection(collection_name = collection_name, description = description, index = index, preprocessing = preprocessing)

返回值

Python 调用执行上面的任务,返回 Collection 实例。Collection 实例包含的属性如下表所示。

属性

类型

说明

collection_name

string

collection 名字,即知识库名称

description

string

描述

doc_num

int

知识库下文档数量

create_time

string

创建时间

update_time

string

更新时间

creator

string

创建人

pipeline_list

string

知识库下 pipeline 列表

preprocessing

string

文档预处理配置

fields

list

字段列表

project

string

所在 project 的名称

resource_id

string

唯一资源 id

data_type

string

知识库数据类型

返回示例如下:

{
    "collection_name": "collection_test",
    "description": "This is an example",
    "doc_num": "None",
    "create_time": "1721727269",
    "update_time": "1817251812",
    "creator": "user@bytedance.com",
    "pipeline_list": [
        {'pipeline_type': 'user_define',
         'pipeline_stat': {'doc_num': 0, 'finish_doc_num': 0, 'point_num': 0, 'success_doc_num': 0},
         'index_list': [
             {'index_type': 'hnsw_hybrid',
              'index_config': {
                  'vector_field': {'field_name': '_sys_auto_content_vector', 'field_type': 'vector', 'dim': 1024},
                  'sparse_vector_field': {'field_name': '_sys_auto_content_sparse_vector', 'field_type': 'sparse_vector'},
                  'cpu_quota': 1, 'distance': 'ip',
                  'quant': 'int8', 'embedding_model': 'bge-large-zh-and-m3',
                  'embedding_dimension': 1024, 'need_instruction': True,
                  'fields': [
                      {'field_name': '_sys_auto_id', 'field_type': 'string'},
                      {'field_name': '_sys_auto_doc_id', 'field_type': 'string'},
                      {'field_name': '_sys_auto_chunk_id', 'field_type': 'int64'},
                      {'field_name': '_sys_auto_doc_type', 'field_type': 'string'},
                      {'field_name': '_sys_auto_add_type', 'field_type': 'string'},
                      {'field_name': 'chunk_len', 'field_type': 'int64', 'default_val': 32}
                  ]
              },
              'primary_key': '', 'status': 1}
         ],
         'preprocessing_list': [{'chunking_strategy': 'default', 'chunking_identifier': None, 'chunk_length': 200, 'merge_small_chunks': True}]
         }
    ],
    "preprocessing": "",
    "fields": "",
    "project": "",
    "resource_id": ""
    "data_type": "unstructured_data"
}