创建一个文档库(DocumentCollection)用于存储Chunks文本和向量数据。
代码调用
def create_document_collection(account,
account_password,
namespace,
collection,
metadata: str = None,
full_text_retrieval_fields: str = None,
parser: str = None,
embedding_model: str = None,
metrics: str = None,
hnsw_m: int = None,
pq_enable: int = None,
external_storage: int = None,):
request = gpdb_20160503_models.CreateDocumentCollectionRequest(
region_id=ADBPG_INSTANCE_REGION,
dbinstance_id=ADBPG_INSTANCE_ID,
manager_account=account,
manager_account_password=account_password,
namespace=namespace,
collection=collection,
metadata=metadata,
full_text_retrieval_fields=full_text_retrieval_fields,
parser=parser,
embedding_model=embedding_model,
metrics=metrics,
hnsw_m=hnsw_m,
pq_enable=pq_enable,
external_storage=external_storage
)
response = get_client().create_document_collection(request)
print(f"create_document_collection response code: {response.status_code}, body:{response.body}")
if __name__ == '__main__':
metadata = '{"title":"text", "page":"int"}'
full_text_retrieval_fields = "title"
embedding_model = "m3e-small"
create_document_collection("testacc", "Test1234", "ns1", "dc1",
metadata=metadata, full_text_retrieval_fields=full_text_retrieval_fields,
embedding_model=embedding_model)
# output: body:
# {
# "Message":"success",
# "RequestId":"7BC35B66-5F49-1E79-A153-8D26576C4A3E",
# "Status":"success"
# }
其中create_document_collection的参数说明如下:
account:AnalyticDB PostgreSQL版实例的数据库初始账号。
account_password:初始账号对应的密码。
namespace: 文档库所在的Namespace名称。
collection:要创建的文档库名称。
metadata:自定义map结构的数据元信息,key为字段名,value为字段类型。
full_text_retrieval_fields:自定义的逗号分隔的全文检索字段,字段必须属于metadata的key。
parser:全文检索参数,分词器,默认zh_cn。详情请参见全文检索介绍。
embedding_model:Embedding模型。详情请参见Embedding模型介绍。
metrics:向量索引参数,索引算法。详情请参见向量索引。
hnsw_m:向量索引参数,HNSW算法中的最大邻居数,范围1~1000。详情请参见向量索引。
pq_enable:向量索引参数,索引是否开启PQ(Product quantization)算法加速。详情请参见向量索引。
external_storage: 向量索引参数,是否使用mmap缓存。详情请参见向量索引。
查看数据库的变更效果
代码调用成功后,可登录DMS,查看创建的表结构(表名为ns1.dc1
)。
字段 | 类型 | 字段来源 | 说明 |
id | text | 固定字段 | 主键,表示单条Chunk文本的UUID。 |
vector | real[] | 固定字段 | 向量数据ARRAY,长度对应指定的Embedding模型的维度。 |
doc_name | text | 固定字段 | 文档名称。 |
content | text | 固定字段 | 单条Chunk文本,由文档在Loader和Splitter后得到。 |
loader_metadata | json | 固定字段 | 文档在Loader解析时对应的元数据。 |
to_tsvector | TSVECTOR | 固定字段 | 保存全文检索字段,数据来源为full_text_retrieval_fields指定的字段数据。其中content为默认字段,本调用场景表示会从content和title两个数据源做全文检索。 |
title | text | Metadata定义 | 用户自定义。 |
page | int | Metadata定义 | 用户自定义。 |
全文检索介绍
为了提高检索的精度,除了向量相似度外,AnalyticDB PostgreSQL版还支持全文检索,并且能和向量相似度检索同时使用达到双路召回效果。
定义全文检索字段
在使用全文检索前,首先需指定哪些字段用于全文检索的数据源,文档库的接口已经默认使用content字段,您还可以指定其它的Metadata自定义字段。
分词
创建文档库时可以指定Parser字段作为分词器,一般场景下,使用默认的中文zh_ch即可,如果有特殊的分词字符要求,请联系阿里云技术支持。
在插入数据时,分词器会将全文检索指定字段的数据按照分词符切分,保存到to_tsvector中,供后续全文检索使用。
Embedding模型介绍
Embedding支持如下模型:
embedding_model | 维度 | 说明 |
m3e-small | 512 | 来源于moka-ai/m3e-small,仅支持中文,不支持英文。 |
m3e-base | 768 | 来源于moka-ai/m3e-base,支持中英文。 |
text2vec | 1024 | 来源于GanymedeNil/text2vec-large-chinese,支持中英文。 |
text-embedding-v1 | 1536 | 来源于灵积的通用文本向量,支持中英文。 |
text-embedding-v2 | 1536 | text-embedding-v1的升级版。 |
clip-vit-b-32(多模) | 512 | 开源的多模模型,支持文本、图片。 |
向量索引
向量索引支持设置如下参数:
参数 | 说明 |
metrics | 相似度距离度量算法,取值说明如下:
|
hnsw_m | HNSW算法中的最大邻居数。OpenAPI会根据向量维度自动设置不同的值。 |
pq_enable | 是否开启PQ向量降维的功能,取值说明如下:
PQ向量降维依赖于存量的向量样本数据进行训练,如果数据量小于50w时,不建议设置此参数。 |
external_storage | 是否使用mmap构建HNSW索引,取值说明如下:
|