本文說明如何使用 ABAP 適用的 Vertex AI SDK,透過 Vertex AI Vector Search 執行向量相似度搜尋。您可以使用 Vector Search,透過高維向量在大型資料集中找出意義相似的資料點。這類模型擅長執行圖片和文字擷取等工作,會優先考量意義,而非完全比對關鍵字。
您可以運用企業資料的強大功能,提升效率、改善客戶體驗,並取得競爭優勢。這項服務可為您的 SAP 環境帶來重大價值,提供下列好處:
提升搜尋功能:改善大量 SAP 資料 (包括散布在不同系統中的結構化和非結構化資訊) 的搜尋結果準確度和關聯性。這有助於更快速且有效地擷取相關企業資料。
從非結構化資料中發掘洞察資訊:運用 Vector Search,從 SAP 系統中先前未充分利用的非結構化資料 (例如產品資料、客戶資料、客戶評論、支援單或內部文件) 中擷取寶貴的洞察資訊。
提升客戶體驗:使用向量搜尋來提供產品推薦、智慧型聊天機器人和其他面向客戶的應用程式,與客戶進行個人化且符合情境的互動。
簡化業務流程:使用向量搜尋服務快速找出相關資訊、識別模式,並根據資料做出決策,藉此改善內部流程。
加速創新:將向量搜尋與其他 Vertex AI 功能 (例如生成式 AI) 結合,開發可帶動業務成長的新穎解決方案。
如何使用 Vertex AI Vector Search
使用向量搜尋進行語意比對,可簡化為下列步驟:
- 產生企業資料的嵌入表示法。
- 將嵌入資料上傳至 Cloud Storage 值區。
建立向量索引,並將向量索引與包含嵌入資料的 Cloud Storage 值區建立關聯。您可以根據要如何更新最新資料,建立兩種索引:
- 批次索引:如果您想以批次方式更新索引,並使用在指定時間內儲存的資料 (例如每週或每月處理的資料),請使用批次索引。
- 串流索引:如果您希望在資料庫新增新資料時立即更新索引資料,請使用串流索引。
建立索引端點,並將向量索引部署至端點,以便執行查詢,取得推薦或結果。索引端點是伺服器執行個體,可接受索引的查詢要求。
使用實體 ID、搜尋字串或嵌入內容查詢索引端點。
ABAP 專用的 Vertex AI SDK 涵蓋 Vertex AI Vector Search 的所有這些層面,可讓您在 ABAP 環境中建構 Vertex AI 驅動的 Vector Search 應用程式。
建立及管理向量索引
本節將說明如何使用 ABAP 專用的 Vertex AI SDK 建立及管理向量索引。
事前準備
請確認您或管理員已完成下列必要條件:
- 在 Google Cloud 專案中啟用 Vertex AI API。
- 設定驗證,以便存取 Vertex AI API。
準備嵌入項目
您必須準備好嵌入項目。如要瞭解如何使用 ABAP 專用的 Vertex AI SDK 為企業資料產生嵌入資料,請參閱「產生嵌入資料」。
將嵌入資料上傳至 Cloud Storage
請將嵌入項目上傳至 Cloud Storage 值區,以便將嵌入項目與向量索引建立關聯。即使您是在 Google Cloud以外產生嵌入檔案,也可以將這些嵌入檔案上傳至 Cloud Storage 值區。
如要瞭解如何將使用 ABAP 專用 Vertex AI SDK 產生的嵌入資料傳送至 Cloud Storage 值區,請參閱「在 Cloud Storage 中儲存嵌入資料」。
為向量索引例項類別
如要建立及管理向量索引,您可以將 /GOOG/CL_VECTOR_INDEX
類別例項化。您可以傳遞用於驗證的用戶端金鑰,藉此例項化類別。
DATA(lo_vector_index) = NEW /goog/cl_vector_index( iv_key_name = 'CLIENT_KEY' ).
將 CLIENT_KEY
替換為用於驗證的用戶端金鑰。
建立向量索引
如要建立向量索引,您可以使用 /GOOG/CL_VECTOR_INDEX
類別的 CREATE_TREE_AH_INDEX
方法。並根據 tree-AH 演算法建立索引。
lo_vector_index->create_tree_ah_index( iv_display_name = 'INDEX_NAME'
iv_description = 'INDEX_DESCRIPTION'
iv_location_id = 'LOCATION_ID'
iv_gcs_content_uri = 'CONTENT_URI'
iv_dimensions = 'DIMENSIONS'
iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
iv_index_update_method = 'INDEX_UPDATE_METHOD'
iv_distance_measure_type = 'DISTANCE_MEASURE_TYPE'
iv_shard_size = 'SHARD_SIZE'
iv_leaf_node_embedding_count = 'LEAF_NODE_EMBEDDING_COUNT'
iv_leaf_nodes_to_search = 'LEAF_NODE_TO_SEARCH'
iv_etag = 'ETAG'
iv_cloud_kms_encryption_key = 'KEY_FOR_ENCRYPTION' ).
更改下列內容:
INDEX_NAME
:索引的顯示名稱。INDEX_DESCRIPTION
:索引說明。LOCATION_ID
: Google Cloud 您要儲存索引的區域。如要瞭解可用位置,請參閱「Vertex AI 位置」。CONTENT_URI
:包含嵌入資料的 Cloud Storage 值區 URI,用於建立索引。DIMENSIONS
:輸入向量的維度數量。NEIGHBORS_COUNT
:執行重新排序前,要透過近似搜尋尋找的鄰點數量。INDEX_UPDATE_METHOD
:索引的更新模式:BATCH_UPDATE
或STREAM_UPDATE
。DISTANCE_MEASURE_TYPE
:決定用於計算資料點和查詢向量之間距離的演算法。詳情請參閱「距離測量類型」。SHARD_SIZE
:每個分割區的大小。當索引很大時,系統會根據指定的分割大小進行分割。在服務期間,每個區塊都會在個別節點上提供服務,並獨立調整。LEAF_NODE_EMBEDDING_COUNT
:每個分葉節點的嵌入項目數量。如未設定,則預設值為1000
。LEAF_NODE_TO_SEARCH
:分葉節點的預設比率,任何查詢都有可能因此而經搜尋。必須介於 1 到 100 之間 (含 1 和 100)。如未設定,則預設值為10
(表示10%
)。ETAG
:執行一致的讀取-修改-寫入更新作業的 ETag 值。KEY_FOR_ENCRYPTION
:客戶管理加密金鑰的 Cloud KMS 資源 ID。
建立向量索引端點
如要建立向量索引端點,您可以使用 /GOOG/CL_VECTOR_INDEX
類別的 CREATE_INDEX_ENDPOINT
方法。
lo_vector_index->create_index_endpoint( iv_display_name = 'INDEX_ENDPOINT_NAME'
iv_description = 'INDEX_ENDPOINT_DESCRIPTION'
iv_location_id = 'LOCATION_ID'
iv_public_endpoint_enabled = 'ENABLE_PUBLIC_ENDPOINT'
iv_etag = 'ETAG'
iv_cloud_kms_encryption_key = 'KEY_FOR_ENCRYPTION' ).
更改下列內容:
INDEX_ENDPOINT_NAME
:索引端點的顯示名稱。INDEX_ENDPOINT_DESCRIPTION
:索引端點的說明。LOCATION_ID
: Google Cloud 您要建立索引端點的區域。如要瞭解可用位置,請參閱「Vertex AI 位置」。ENABLE_PUBLIC_ENDPOINT
:如果可透過公開端點存取已部署的索引,請將這個參數值設為ABAP_TRUE
。ETAG
:執行一致的讀取-修改-寫入更新作業的 ETag 值。KEY_FOR_ENCRYPTION
:客戶管理加密金鑰的 Cloud KMS 資源 ID。
將向量索引部署至索引端點
如要將向量索引部署至索引端點,您可以使用 /GOOG/CL_VECTOR_INDEX
類別的 DEPLOY_INDEX
方法。
lo_vector_index->deploy_index( iv_deployed_index_id = 'DEPLOYMENT_ID'
iv_location_id = 'LOCATION_ID'
iv_index_id = 'INDEX_ID'
iv_index_endpoint_id = 'INDEX_ENDPOINT_ID>'
iv_min_replica_count = 'MIN_REPLICA_COUNT'
iv_max_replica_count = 'MAX_REPLICA_COUNT'
iv_enable_access_logging = 'ENABLE_ACCESS_LOGGING'
iv_deployment_group = 'DEPLOYMENT_GROUP' ).
更改下列內容:
DEPLOYMENT_ID
:索引部署作業的 ID。LOCATION_ID
: Google Cloud 要部署索引的區域。如要瞭解可用位置,請參閱「Vertex AI 位置」。INDEX_ID
:索引的資源名稱。INDEX_ENDPOINT_ID
:要部署至索引端點的資源名稱。MIN_REPLICA_COUNT
:已部署模型的機器備份數量下限。MAX_REPLICA_COUNT
:已部署模型的機器備用資源數量上限。ENABLE_ACCESS_LOGGING
:如要將私人端點的存取記錄傳送至 Cloud Logging,請將這個參數值設為ABAP_TRUE
。DEPLOYMENT_GROUP
:部署群組名稱,例如test
、prod
。
更新及重建向量索引
如要為企業 AI 解決方案取得最準確的向量搜尋結果,您也必須持續更新索引,以便使用最新的企業資料。
更新批次索引
如要更新批次索引,並顯示 Cloud Storage 值區中的最新資訊,您可以使用 /GOOG/CL_VECTOR_INDEX
類別的 PATCH_TREE_AH_INDEX
方法。
lo_vector_index->patch_tree_ah_index( iv_index_id = 'INDEX_ID'
iv_gcs_content_uri = 'CONTENT_URI'
iv_location_id = 'LOCATION_ID'
iv_is_complete_overwrite = 'IS_COMPLETE_OVERWRITE' ).
更改下列內容:
INDEX_ID
:索引的資源名稱。CONTENT_URI
:含有最新企業資料嵌入內容的 Cloud Storage 值區 URI。LOCATION_ID
:索引的 Google Cloud 區域。IS_COMPLETE_OVERWRITE
:如要完全覆寫索引,並使用指定 Cloud Storage 值區中的資料,請將這個參數值設為ABAP_TRUE
。
您可以使用以下架構流程範例,透過 SAP 資料更新批次索引:
- 透過 SAP 背景工作,使用
/GOOG/CL_STORAGE_V1
類別,為最新資料更新 Cloud Storage 值區。對於非 SAP 資料,您也可以透過 SAP 以外的程序進行這項操作。 - 使用
/GOOG/CL_VECTOR_INDEX
類別的PATCH_TREE_AH_INDEX
方法,透過 SAP 中的背景工作,以特定頻率觸發批次索引更新。
更新串流索引
如要針對串流索引的資料點上傳/插入資訊,您可以使用 /GOOG/CL_VECTOR_INDEX
類別的 UPSERT_DATAPOINTS
方法。
lo_vector_index->upsert_datapoints( iv_index_id = 'INDEX_ID'
iv_location_id = 'LOCATION_ID'
iv_datapoint_id = 'ENTITY_ID'
it_embeddings = 'EMBEDDINGS' ).
更改下列內容:
INDEX_ID
:索引的資源名稱。LOCATION_ID
:索引的 Google Cloud 區域。ENTITY_ID
:要更新/插入的實體 ID。EMBEDDINGS
:針對資料點進行更新/插入的嵌入項目。
如要從串流索引中移除資料點的資訊,您可以使用 /GOOG/CL_VECTOR_INDEX
類別的 REMOVE_DATAPOINTS
方法。
lo_vector_index->remove_datapoints( iv_index_id = 'INDEX_ID'
iv_location_id = 'LOCATION_ID'
iv_datapoint_id = 'ENTITY_ID' ).
更改下列內容:
INDEX_ID
:索引的資源名稱。LOCATION_ID
:索引的 Google Cloud 區域。ENTITY_ID
:要移除的實體 ID。
系統會即時執行索引的更新/插入和移除作業。
您可以使用以下架構流程範例,更新包含 SAP 資料的串流索引:
- 找出企業 SAP 解決方案中的預留位置,例如 BADI、結束、增強功能和自訂 SAP 邏輯,這些都是 SAP 資料變更的點。
- 使用已識別的預留位置,透過
/GOOG/CL_VECTOR_INDEX
類別的UPSERT_DATAPOINTS
和REMOVE_DATAPOINTS
方法,針對 SAP 資料觸發串流索引的更新/插入或移除作業。
取得向量索引作業的狀態
Google Cloud 會以長時間執行的作業執行下列操作:建立向量索引和索引端點、將索引部署至索引端點,或更新向量批次索引。
為判斷長時間執行的作業 ID、Vertex AI 構件資源 ID 和錯誤訊息,SDK 會提供 /GOOG/CL_VECTORINDEX_RESPONSE
類別。
/GOOG/CL_VECTORINDEX_RESPONSE
類別擷取的回應會鏈結至透過 /GOOG/CL_VECTOR_INDEX
類別方法提出的要求,因此您可以在單一陳述式中直接存取回應,而不需要變數來儲存中間結果。
取得長時間執行作業 ID
如要取得每項向量搜尋工作的長時間運作作業 ID,您可以使用 /GOOG/CL_VECTORINDEX_RESPONSE
類別的 GET_LRO
方法。執行工作後,您可以使用相同的例項呼叫 GET_LRO
方法,取得對應的長時間執行作業 ID。
以下程式碼範例說明如何取得批次索引更新工作的長時間執行作業 ID:
DATA(lv_patch_index_lro) = lo_vector_index->patch_tree_ah_index(
iv_index_id = 'INDEX_ID'
iv_gcs_content_uri = 'CONTENT_URI'
iv_location_id = 'LOCATION_ID'
iv_is_complete_overwrite = 'IS_COMPLETE_OVERWRITE'
)->get_lro( ).
更改下列內容:
INDEX_ID
:索引的資源名稱。CONTENT_URI
:包含最新企業資料嵌入內容的 Cloud Storage 值區 URI。LOCATION_ID
:索引的 Google Cloud 區域。IS_COMPLETE_OVERWRITE
:如要完全覆寫索引,並使用指定 Cloud Storage 值區中的資料,請將這個參數值設為ABAP_TRUE
。
取得長時間執行作業的狀態
每個長時間執行的作業都有相關的狀態。如要驗證是否已成功安排為長時間執行作業的工作,您可以檢查作業的狀態。
如要判斷或持續監控任何 Vertex AI 相關工作的長時間執行作業狀態,您可以使用 /GOOG/CL_VERTEX_AI_SDK_UTILITY
類別的 GET_LRO_STATUS
方法。
/goog/cl_vertex_ai_sdk_utility=>get_lro_status(
EXPORTING
iv_key = 'CLIENY_KEY'
iv_operations_id = 'LONG_RUNNING_OPERATION_ID'
iv_location_id = 'LOCATION_ID'
IMPORTING
ev_is_done = DATA(lv_is_done) "Is the long-running operation complete
ev_is_successful = DATA(lv_is_successful) "Is the long-running operation successful
ev_error_code = DATA(lv_error_code) "Error code in the long-running operation in case of errors
ev_error_message = DATA(lv_error_message) ). "Error message in the long-running operation in case of errors
更改下列內容:
CLIENY_KEY
:用於驗證的用戶端金鑰。LONG_RUNNING_OPERATION_ID
:長時間執行作業 ID。LOCATION_ID
:索引的 Google Cloud 區域。
取得 Vertex AI 構件資源 ID
如要判斷已建立索引、已建立的索引端點、已部署的索引、要觸發哪個修補程式的索引 ID 的資源 ID,您可以使用 /GOOG/CL_VECTORINDEX_RESPONSE
類別的 GET_ID
方法。
執行工作後,您可以使用相同的例項呼叫 GET_ID
方法,取得對應的資源 ID。
以下程式碼範例說明如何在呼叫 /GOOG/CL_VECTOR_INDEX
類別的 CREATE_TREE_AH_INDEX
方法後,取得建立的索引 ID:
DATA(lv_id) = lo_vector_index->create_tree_ah_index(
iv_display_name = 'INDEX_NAME'
iv_location_id = 'LOCATION_ID'
iv_gcs_content_uri = 'CONTENT_URI'
iv_dimensions = 'DIMENSIONS'
iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
iv_leaf_node_embedding_count = 'LEAF_NODE_EMBEDDING_COUNT'
iv_leaf_nodes_to_search = 'LEAF_NODE_TO_SEARCH'
)->get_id( ).
更改下列內容:
INDEX_NAME
:索引的顯示名稱。LOCATION_ID
:索引的 Google Cloud 區域。CONTENT_URI
:包含嵌入資料的 Cloud Storage 值區 URI,用於建立索引。DIMENSIONS
:輸入向量的維度數量。NEIGHBORS_COUNT
:執行重新排序前,要透過近似搜尋尋找的鄰點。LEAF_NODE_EMBEDDING_COUNT
:每個分葉節點的嵌入項目數量。如未設定,則預設值為1000
。LEAF_NODE_TO_SEARCH
:分葉節點的預設比率,任何查詢都有可能因此而經搜尋。必須介於 1 到 100 之間 (含 1 和 100)。如未設定,則預設值為10
(表示10%
)。
取得錯誤代碼和錯誤訊息
透過 ABAP 的 Vertex AI SDK 觸發向量索引工作時,可能會發生錯誤。
如要在觸發工作後分別取得錯誤代碼和錯誤訊息 (如有),您可以使用 `/GOOG/CL_VECTORINDEX_RESPONSE
類別的 GET_ERROR_CODE
和 GET_ERROR_MESSAGE
方法。
執行工作後,您可以使用相同的例項呼叫 GET_ERROR_CODE
和 GET_ERROR_MESSAGE
方法,取得對應的錯誤代碼或錯誤訊息。
以下程式碼範例說明如何在建立索引失敗時,顯示錯誤代碼和錯誤訊息:
DATA(lo_vectorindex_response) = lo_vector_index->create_tree_ah_index(
iv_display_name = 'INDEX_NAME'
iv_location_id = 'LOCATION_ID'
iv_gcs_content_uri = 'CONTENT_URI'
iv_dimensions = 'DIMENSIONS'
iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
iv_leaf_node_embedding_count = 'LEAF_NODE_EMBEDDING_COUNT'
iv_leaf_nodes_to_search = 'LEAF_NODE_TO_SEARCH' ).
IF lo_vectorindex_response->get_error_code( ) IS NOT INITIAL.
DATA(lv_err_code) = lo_vectorindex_response->get_error_code( ).
DATA(lv_err_msg) = lo_vectorindex_response->get_error_message( ).
out->write( |Error Code- { lv_err_code }| ).
ENDIF.
更改下列內容:
INDEX_NAME
:索引的顯示名稱。LOCATION_ID
:索引的 Google Cloud 區域。CONTENT_URI
:包含嵌入資料的 Cloud Storage 值區 URI,用於建立索引。DIMENSIONS
:輸入向量的維度數量。NEIGHBORS_COUNT
:執行重新排序前,要透過近似搜尋尋找的鄰點。LEAF_NODE_EMBEDDING_COUNT
:每個分葉節點的嵌入項目數量。如未設定,則預設值為1000
。LEAF_NODE_TO_SEARCH
:分葉節點的預設比率,任何查詢都有可能因此而經搜尋。必須介於 1 到 100 之間 (含 1 和 100)。如未設定,則預設值為10
(表示10%
)。
搜尋最鄰近的項目
本節將說明如何使用 ABAP 適用的 Vertex AI SDK 搜尋最近鄰。
事前準備
請確認您或管理員已完成下列必要條件:
- 在 Google Cloud 專案中啟用 Vertex AI API。
- 設定驗證,以便存取 Vertex AI API。
- 設定向量搜尋參數。
建立 RFC 目的地
您需要為索引端點建立 RFC 目的地,並在該端點中部署索引,其中包含以嵌入檔案格式提供的企業資料。
為向量搜尋建立類別的例項
如要叫用向量搜尋,您可以將 /GOOG/CL_VECTOR_SEARCH
類別例項化。您可以透過傳遞搜尋鍵來將類別例項化,這個鍵是在 向量搜尋參數中設定。
DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_name = 'SEARCH_KEY' ).
將 SEARCH_KEY
替換為在向量搜尋參數中設定的搜尋鍵。
使用實體 ID 進行搜尋
如要針對特定實體 ID 查詢向量索引,您可以使用 /GOOG/CL_VECTOR_SEARCH
類別的 FIND_NEIGHBORS_BY_ENTITY_ID
方法。實體 ID 對應至向量索引中儲存的資料點。
lo_vector_search->find_neighbors_by_entity_id( iv_entity_id = 'ENTITY_ID'
iv_neighbor_count = 'NEIGHBOR_COUNT'
iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
更改下列內容:
ENTITY_ID
:要搜尋的實體 ID。NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。
使用搜尋字串進行搜尋
如要針對搜尋字串查詢向量索引,您可以使用 /GOOG/CL_VECTOR_SEARCH
類別的 FIND_NEIGHBORS_BY_STRING
方法。
SDK 會先將搜尋字串轉換為嵌入項目,然後擷取查詢的最近鄰項目。
DATA(lo_response) = lo_vector_search->find_neighbors_by_string(
iv_search_string = 'SEARCH_STRING'
iv_embeddings_model_key = 'MODEL_KEY'
iv_neighbor_count = 'NEIGHBOR_COUNT'
iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
更改下列內容:
SEARCH_STRING
:輸入搜尋字串。MODEL_KEY
:用於產生嵌入資料的模型鍵,可在模型產生參數中設定。NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。
使用嵌入項目進行搜尋
如要查詢與嵌入相關的向量索引,您可以使用 /GOOG/CL_VECTOR_SEARCH
類別的 FIND_NEIGHBORS_BY_EMBEDDING
方法。
DATA(lo_response) = lo_vector_search->find_neighbors_by_embeddings(
iv_neighbor_count = 'NEIGHBOR_COUNT'
iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
it_embeddings = 'EMBEDDINGS' ).
更改下列內容:
NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。EMBEDDINGS
:輸入嵌入值。
取得搜尋回應
為接收模型的已處理回應,並以有意義的方式呈現,SDK 會提供 ABAP 類別 /GOOG/CL_VECTORSEARCH_RESPONSE
。
/GOOG/CL_VECTORSEARCH_RESPONSE
類別擷取的回應會連結至透過 /GOOG/CL_VECTOR_SEARCH
類別方法提出的要求,因此您可以在單一陳述式中直接存取回應,而不需要變數來儲存中間結果。
取得搜尋查詢的最近鄰
如要判斷執行的搜尋查詢相對於資料點、搜尋字串或嵌入項目所找到的最相似項目,您可以使用 /GOOG/CL_VECTORSEARCH_RESPONSE
類別的 GET_NEAREST_NEIGHBOR
和 GET_NEAREST_NEIGHBORS
方法。
執行搜尋查詢後,您可以使用 /GOOG/CL_VECTOR_SEARCH
類別的 FIND_NEIGHBORS_BY_STRING
、FIND_NEIGHBORS_BY_EMBEDDING
和 FIND_NEIGHBORS_BY_ENTITY_ID
方法,以鏈結方式呼叫這些方法。
如要取得與搜尋資料點、字串或嵌入項目最接近的鄰近項目,請呼叫
GET_NEAREST_NEIGHBOR
方法。這個方法的回應會列出最近的資料點 ID、與搜尋查詢的距離,以及索引中與該資料點相關聯的特徵向量。以下程式碼範例說明如何取得搜尋字串的最近鄰字串:
DATA(ls_nearest_neighbor) = lo_vector_search->find_neighbors_by_string( iv_search_string = 'SEARCH_STRING' iv_embeddings_model_key = 'MODEL_KEY' iv_neighbor_count = 'NEIGHBOR_COUNT' iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' )->get_nearest_neighbor( ).
更改下列內容:
SEARCH_STRING
:輸入搜尋字串。MODEL_KEY
:用於產生嵌入資料的模型鍵,可在模型產生參數中設定。NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。
如要取得與搜尋到的資料點、字串或嵌入項目最相近的鄰近項目組合,請呼叫
GET_NEAREST_NEIGHBORS
方法。這個方法的回應是最近資料點的資料表,列出資料點 ID、與搜尋查詢的距離,以及索引中與這些資料點相關聯的特徵向量。以下程式碼範例說明如何取得搜尋字串的最近鄰字串:
DATA(lt_nearest_neighbors) = lo_vector_search->find_neighbors_by_string( iv_search_string = 'SEARCH_STRING' iv_embeddings_model_key = 'MODEL_KEY' iv_neighbor_count = 'NEIGHBOR_COUNT' iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' )->get_nearest_neighbors( ).
更改下列內容:
SEARCH_STRING
:輸入搜尋字串。MODEL_KEY
:用於產生嵌入資料的模型鍵,可在模型產生參數中設定。NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。
取得擷取鄰近項目的距離
如要判斷擷取的回應與搜尋查詢的距離,您可以使用 /GOOG/CL_VECTORSEARCH_RESPONSE
類別的 GET_DATAPOINT_DISTANCE
方法。
搜尋回應中的距離代表查詢 (字串、嵌入或實體 ID) 與擷取的結果向量之間的不相似程度。距離的具體意義取決於建立索引時使用的「距離測量方式」。
距離值可協助您瞭解每個搜尋結果與查詢的相關程度。距離較近的結果通常被視為更相似或相關,而距離較遠的結果則較不相似或相關。
以下程式碼範例說明如何取得搜尋字串最近鄰的距離:
DATA(lo_vectorsearch_response) = lo_vector_search->find_neighbors_by_string(
iv_search_string = 'SEARCH_STRING'
iv_embeddings_model_key = 'MODEL_KEY'
iv_neighbor_count = 'NEIGHBOR_COUNT'
iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
DATA(ls_nearest_neighbor) = lo_vectorsearch_response->get_nearest_neighbor( ).
DATA(lv_distance) = lo_vectorsearch_response->get_datapoint_distance( iv_datapoint_id = ls_nearest_neighbor-datapoint_id ).
更改下列內容:
SEARCH_STRING
:輸入搜尋字串。MODEL_KEY
:用於產生嵌入資料的模型鍵,可在模型產生參數中設定。NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。
取得擷取鄰近項目的嵌入向量
如要從搜尋查詢中判斷擷取回應的嵌入向量,您可以使用 /GOOG/CL_VECTORSEARCH_RESPONSE
類別的 GET_DATAPOINT_FEATURE_VECTOR
方法。
如要取得嵌入向量,FIND_NEIGHBORS_BY_STRING
、FIND_NEIGHBORS_BY_EMBEDDING
和 FIND_NEIGHBORS_BY_ENTITY_ID
方法的 IV_RETURN_FULL_DATAPOINT
參數必須設為 ABAP_TRUE
。
以下程式碼範例說明如何取得搜尋字串最近鄰的特色向量:
DATA(lo_vectorsearch_response) = lo_vector_search->find_neighbors_by_string(
iv_search_string = 'SEARCH_STRING'
iv_embeddings_model_key = 'MODEL_KEY'
iv_neighbor_count = 'NEIGHBOR_COUNT'
iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
DATA(ls_nearest_neighbor) = lo_vectorsearch_response->get_nearest_neighbor( ).
DATA(lt_feature_vector) = lo_vectorsearch_response->get_datapoint_feature_vector( iv_datapoint_id = ls_nearest_neighbor-datapoint_id ).
更改下列內容:
SEARCH_STRING
:輸入搜尋字串。MODEL_KEY
:用於產生嵌入資料的模型鍵,可在模型產生參數中設定。NEIGHBOR_COUNT
:要為查詢擷取的最近鄰點數量。RETURN_FULL_DATAPOINT
:如要針對擷取的資料點傳回向量嵌入資料,請將此參數值設為ABAP_TRUE
。
後續步驟
瞭解 Vector Search 術語。
在 Cloud 論壇上向社群提問,並討論 ABAP 專用的 Vertex AI SDK。