通過OSS向量檢索,您可以基於語義內容、OSS中繼資料、多媒體中繼資料、對象ETag及標籤和自訂中繼資料等條件,快速定位海量Object中的目標檔案,最佳化檢索效率。本文介紹如何使用Python SDK V2進行向量檢索。
注意事項
本文範例程式碼以華東1(杭州)的地區ID
cn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱。本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見配置訪問憑證。
範例程式碼
開啟向量檢索功能
以下代碼用於為指定Bucket開啟向量檢索功能。
import argparse
import alibabacloud_oss_v2 as oss
# 建立命令列參數解析器,並添加描述資訊
parser = argparse.ArgumentParser(description="open meta query sample")
# 添加必需的命令列參數 --region,用於指定儲存空間所在的地區
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加必需的命令列參數 --bucket,用於指定要操作的儲存空間名稱
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 添加可選的命令列參數 --endpoint,用於指定訪問OSS時使用的網域名稱
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# 解析命令列參數
args = parser.parse_args()
# 從環境變數中載入認證資訊
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# 使用SDK提供的預設配置
cfg = oss.config.load_default()
# 設定認證資訊提供者
cfg.credentials_provider = credentials_provider
# 根據命令列參數設定地區
cfg.region = args.region
# 如果提供了endpoint,則更新配置中的endpoint
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 建立OSS用戶端
client = oss.Client(cfg)
# 構建一個OpenMetaQuery請求,,用於開啟儲存空間的向量檢索功能
result = client.open_meta_query(oss.OpenMetaQueryRequest(
bucket=args.bucket,
mode='semantic',# 設定為"semantic",表示選擇向量檢索
))
# 列印請求的結果狀態代碼和請求ID
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# 當作為主程式運行時調用main函數
if __name__ == "__main__":
main()
擷取中繼資料索引庫資訊
以下代碼用於擷取指定Bucket的中繼資料索引庫資訊。
import argparse
import alibabacloud_oss_v2 as oss
# 建立一個命令列參數解析器,並添加必要的參數
parser = argparse.ArgumentParser(description="get meta query status sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# 解析命令列參數
args = parser.parse_args()
# 從環境變數中載入憑據資訊
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# 使用SDK的預設配置
cfg = oss.config.load_default()
# 設定憑據提供者為從環境變數擷取的憑據
cfg.credentials_provider = credentials_provider
# 設定OSS服務所在的地區
cfg.region = args.region
# 如果提供了endpoint,則設定自訂的endpoint
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 建立OSS用戶端
client = oss.Client(cfg)
# 調用get_meta_query_status方法來擷取指定儲存空間的中繼資料索引庫資訊
result = client.get_meta_query_status(oss.GetMetaQueryStatusRequest(
bucket=args.bucket,
))
# 列印返回結果中的相關資訊
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' create time: {result.meta_query_status.create_time},'
f' update time: {result.meta_query_status.update_time},'
f' state: {result.meta_query_status.state},'
f' phase: {result.meta_query_status.phase},'
)
# 當指令碼被直接運行時,調用main函數
if __name__ == "__main__":
main()
查詢滿足指定條件的Object
以下代碼通過向量檢索功能查詢滿足指定語義檢索內容的Object。
import argparse
import alibabacloud_oss_v2 as oss
# 建立命令列參數解析器,用於處理命令列輸入
parser = argparse.ArgumentParser(description="do meta query semantic sample")
# 添加必要的命令列參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True) # 儲存空間所在地區
parser.add_argument('--bucket', help='The name of the bucket.', required=True) # 儲存空間名稱
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') # OSS訪問網域名稱,可選
def main():
# 解析命令列參數
args = parser.parse_args()
# 從環境變數中載入訪問憑證
# 運行前需要設定環境變數:OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# 載入SDK預設配置
cfg = oss.config.load_default()
# 設定憑證提供者
cfg.credentials_provider = credentials_provider
# 設定地區
cfg.region = args.region
# 如果提供了endpoint,則更新配置中的endpoint
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 建立OSS用戶端執行個體
client = oss.Client(cfg)
# 發起中繼資料查詢請求 - 向量檢索模式
result = client.do_meta_query(oss.DoMetaQueryRequest(
bucket=args.bucket,
mode='semantic',
meta_query=oss.MetaQuery(
max_results=1000,
query='俯瞰白雪覆蓋的森林',
order='desc',
media_types=oss.MetaQueryMediaTypes(
media_type=['image']
),
simple_query='{"Operation":"gt", "Field": "Size", "Value": "30"}',
),
))
# 列印檢索結果
print(vars(result))
if __name__ == "__main__":
main()
關閉向量檢索功能
以下代碼用於關閉指定Bucket的向量檢索功能。
import argparse
import alibabacloud_oss_v2 as oss
# 建立一個命令列參數解析器,用於處理命令列參數
parser = argparse.ArgumentParser(description="close meta query sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# 解析命令列參數
args = parser.parse_args()
# 從環境變數中載入憑據資訊
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# 使用SDK的預設配置
cfg = oss.config.load_default()
# 設定憑據提供者為從環境變數擷取的憑據
cfg.credentials_provider = credentials_provider
# 設定配置中的地區資訊
cfg.region = args.region
# 如果提供了endpoint,則設定配置中的endpoint
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 建立OSS用戶端
client = oss.Client(cfg)
# 調用close_meta_query方法關閉儲存空間的檢索功能
result = client.close_meta_query(oss.CloseMetaQueryRequest(
bucket=args.bucket,
))
# 列印響應的狀態代碼和請求ID
print(f'status code: {result.status_code}, request id: {result.request_id}')
# 當此指令碼直接運行時執行main函數
if __name__ == "__main__":
main()
相關文檔
關於向量檢索的更多操作指南,請參見向量檢索。
關於資料索引的系列API介面,請參見資料索引(Data Indexing)。
關於向量檢索的完整範例程式碼,請參見GitHub樣本。