創建文檔庫
創建一個文檔庫(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索引,取值說明如下:
|