You need to enable JavaScript to run this app.
导航

from_documents

最近更新时间2024.04.17 14:21:05

首次发布时间2024.04.17 14:21:05

概述

from_documents 作为程序入口,用于向数据集 Collection 插入文本数据。

请求参数

参数

一级子参数

二级子参数

类型

是否必选

默认值

参数说明

document

List[Document]

Document 是 langchain 定义的类,包含 page_content 和metadata。

  • page_content:文本内容。
  • metadata:文本基本信息,比如文本存储路径等。

embedding_function

Embeddings

embedding函数类型,详见 langchain Embeddings,如OpenAIEmbeddings()。

connection_args

VikingDBConfig

VikingDBConfig 实例,包含属性如下:

  • host:域名。比如,北京请求域名为 api-vikingdb.volces.com,上海请求域名为 api-vikingdb.mlp.cn-shanghai.volces.com
  • region:区域。
  • ak/sk:Access Key(访问密钥)是安全凭证,包含Access Key ID(简称为AK)和Secret Access Key(简称为SK)两部分。
  • Schema:支持 http 和 https。

collection_name

string

LangChainCollection

数据集名称,默认值为 LangChainCollection。如果存在该数据集则使用该数据集,不存在则创建数据集。

index_params

vector_index

index_type

string

IndexType.HNSW

向量索引类型。取值如下:

  • IndexType.HNSW:全称是 Hierarchical Navigable Small World,一种用于在高维空间中采用 ANN 搜索的数据结构和算法,是基于图的索引。HNSW通过构建多层网络减少搜索过程中需要访问的节点数量,实现快速高效地搜索最近邻,适合对搜索效率要求较高的场景。
  • IndexType.FLAT:暴力索引,搜索时遍历整个向量数据库的所有向量与目标向量进行距离计算和比较,查询速度较慢,但是 flat 能提供100%的检索召回率,适用于向量候选集较少,且需要100%检索召回率的场景。

distance

string

DistanceType.IP

距离类型,衡量向量之间距离的算法。取值如下:

  • DistanceType.IP:全称是 Inner Product,内积,该算法基于向量的内积,即两个元素的对应元素相乘并求和的结果计算相似度,内积值越大相似度越高。
  • DistanceType.L2:欧几里得距离,它计算两个向量的欧几里得空间距离,欧式距离越小相似度越高。
  • DistanceType.COSINE:余弦相似度(Cosine Similarity),也称为余弦距离(Cosine Distance),用于计算两个高维向量的夹角余弦值从而衡量向量相似度,夹角余弦值越小表示两向量的夹角越大,则两个向量差异越大。
    当 distance=cosine 时,默认对向量做归一化处理。

quant

string

QuantType.Int8

量化方式。量化方式是索引中对向量的压缩方式,可以降低向量间相似性计算的复杂度。基于向量的高维度和大规模特点,采用向量量化可以有效减少向量的存储和计算成本。取值如下:

  • QuantType.Int8:将4字节的 float 压缩为单个字节,以获取内存和计算延迟的收益,会造成微小的损失精度,比如 cosine 距离会出现大于1的分值。
  • QuantType.Float:全精度,未做压缩量化。

hnsw_m

数值

20

hnsw 索引参数,表示邻居节点个数。

  • 当 index_type 配置为 hnsw 时可选配置。

hnsw_cef

数值

400

hnsw 索引参数,表示构建图时搜索邻居节点的广度。

  • 当 index_type 配置为 hnsw 时可选配置。

hnsw_sef

数值

800

hnsw 索引参数,表示线上检索的搜索广度。

  • 当 index_type 配置为 hnsw 时可选配置。

cpu_quota

int

2

索引检索消耗的 CPU 配额,格式为正整数。

  • 与吞吐量有关,和延迟无关,1CPU 核约为 100QPS。
  • N个分片数量N倍的 CPU 消耗;如果检索消耗的 CPU 超过配额,该索引会被限流。
  • 取值范围:[2, 10240]。

partition_by

string

“”

partition_by 用于划分子索引 partition 。根据某个标量字段可以将数据集划分成不同的子数据集,不同的子数据集构建为不同的子索引,实现混合检索时在子索引内检索并减少过滤,从而提升检索性能。

  • partition_by 对应字段名称 field_name,支持 field 类型为 int64、list<int64>、string、list<string>。partition 对应 field 的字段值。
  • partition_by 划分的子索引 partition 数量建议不超过1000个。
  • partition_by 参数未设置时,则子索引 partition 默认为 “default”。
  • 适用场景:适用于将数据集划分为多个子数据集,在某个子数据集/子索引内部检索等检索模式固定的场景。比如,根据国家ID将数据集拆分,针对某个国家ID的子索引检索场景,无需对国家ID进行过滤,提升检索性能。

scalar_index

array

None

标量字段列表。

  • scalar_index 默认为 None,表示所有字段构建到标量索引。
  • scalar_index 为 [] 时,表示无标量索引。
  • scalar_index 为非空列表时,表示将列表内字段构建到标量索引。

drop_old

bool

False

是否删除原数据集。当用户不想要原数据集中的数据,也不想改数据集名称时,将参数配置为 true 即可删除 collection_name 对应的数据集,并创建同名数据集。

  • 枚举值:True、False。

示例

请求参数

loader = TextLoader("./test.txt") 
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=10, chunk_overlap=0)
docs = text_splitter.split_documents(documents) # 将文件中数据转化为Document类型
# print(docs)

db = VikingDB.from_documents(
    docs,
    OpenAIEmbeddings(),
    connection_args=VikingDBConfig(host="host", region="region", ak="ak", sk="sk", scheme="http"),
    collection_name = "collection",
    index_params = {"cpu_quota":3}
    drop_old=False
)

返回值

调用执行上面的任务,返回 VikingDB。