本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
連線至結構化資料存放區以建立知識庫
若要將知識庫連接到結構化資料存放區,請指定下列元件:
-
查詢引擎組態
將執行所產生 SQL 查詢的運算服務組態。查詢引擎用於將自然語言使用者查詢轉換為 SQL 查詢,可用於從資料存放區擷取資料。您可以選擇 Amazon Redshift 作為查詢引擎。選擇此組態時,您必須指定:
-
運算交集中繼資料,例如叢集 ID 或工作群組 ARN,視選擇的查詢引擎而定。
-
使用查詢引擎的身分驗證方法,可使用具有適當許可的 IAM 服務角色、查詢引擎資料庫使用者或連結至資料庫登入資料的 AWS Secrets Manager 秘密。
-
-
儲存組態
包含您資料的資料存放區的組態。您可以連線至 Amazon Redshift Provisioned 或 Amazon Redshift Serverless,並使用 Amazon Redshift 或 AWS Glue Data Catalog 做為您的資料存放區。
-
(選用) 查詢組態
您可以使用選用的查詢組態來提高 SQL 生成的準確性:
-
查詢時間上限 – 經過這段時間後,查詢就會逾時。
-
說明 – 提供有關表格或欄的中繼資料或補充資訊。您可以包括表格或欄的說明、使用情形附註,或任何其他屬性。您新增的說明可透過提供有關表格或欄結構的額外內容和資訊,來改善 SQL 查詢生成。
-
包含項目和排除項目 – 指定要針對 SQL 生成包含或排除的一組表格或欄。如果您想要將 SQL 查詢的範圍限於一組定義的可用表格或欄的子集,則此欄位會非常重要。此選項可透過減少不必要的表格或欄參考,協助最佳化生成過程。
如果您指定包含項目,則會忽略所有其他表格和欄。如果您指定排除項目,則會忽略您指定的表格和欄。
注意
包含項目和排除項目無法替代防護機制,僅用於提高模型準確性。
-
策劃的查詢 – 一組預先定義的問題和答案範例。問題會編寫成自然語言查詢 (NLQ),答案則是對應的 SQL 查詢。這些範例透過提供應生成的查詢類型範例,來協助 SQL 生成過程。這些範例可作為參考點來提高生成式 SQL 輸出的準確性和關聯性。
-
展開與您的使用案例對應的區段:
若要使用 連線至結構化資料存放區 AWS Management Console,請執行下列動作:
-
AWS Management Console 使用具有使用 Amazon Bedrock 主控台之許可的 IAM 身分登入 。然後,開啟位於 https://https://console.aws.amazon.com/bedrock
的 Amazon Bedrock 主控台。 -
在左側導覽窗格中,選擇知識庫。
-
在知識庫區段中,選擇建立,然後選擇具有結構化資料存放區的知識庫。
-
設定知識庫的下列詳細資訊:
-
(選用) 變更預設名稱並提供知識庫的說明。
-
選取要用於從資料存放區擷取資料的查詢引擎。
-
選擇具有適當許可的 IAM 服務角色,以建立和管理此知識庫。您可以讓 Amazon Bedrock 建立服務角色,或選擇您已建立的自訂角色。如需建立自訂角色的詳細資訊,請參閱 設定您的查詢引擎和使用結構化資料存放區建立知識庫的許可。
-
(選用) 新增標籤以與您的知識庫建立關聯。如需詳細資訊,請參閱標記 Amazon Bedrock 資源。
-
選擇下一步。
-
-
設定查詢引擎:
-
選取您在其中建立叢集或工作群組的服務。然後選擇要使用的叢集或工作群組。
-
選取身分驗證方法,並提供必要的欄位。
-
選取要存放中繼資料的資料存放區。然後,選擇或輸入資料庫的名稱。
-
(選用) 視需要修改查詢組態。如需不同組態的詳細資訊,請參閱本主題的開頭。
-
選擇下一步。
-
-
檢閱您的知識庫組態,並視需要編輯任何區段。確認 以建立您的知識庫。
若要使用 Amazon Bedrock API 連線至結構化資料存放區,請使用具有下列一般請求內文的 Amazon Bedrock 建置時間端點代理程式傳送 CreateKnowledgeBase 請求:
{ "name": "string", "roleArn": "string", "knowledgeBaseConfiguration": { "type": "SQL", "sqlKnowledgeBaseConfiguration": SqlKnowledgeBaseConfiguration }, "description": "string", "clientToken": "string", "tags": { "string": "string" } }
下列欄位為必要欄位。
| 欄位 | 基本描述 |
|---|---|
| 名稱 | 知識庫的名稱 |
| roleArn | 具有適當許可的知識庫服務角色。您可以使用 主控台自動建立具有適當許可的服務角色。 |
| knowledgeBaseConfiguration | 包含知識庫的組態。對於結構化資料庫,指定 SQL為 type並包含 sqlKnowledgeBaseConfiguration 欄位。 |
下列欄位為選用欄位。
| 欄位 | 使用 |
|---|---|
| description | 包含知識庫的描述。 |
| clientToken | 為確保 API 請求僅完成一次。如需詳細資訊,請參閱確保冪等性。 |
| 標籤 | 將標籤與流程建立關聯。如需詳細資訊,請參閱標記 Amazon Bedrock 資源。 |
SQLKnowledgeBaseConfiguration 取決於您使用的查詢引擎。對於 Amazon Redshift,將 type 欄位指定為 ,REDSHIFT並包含 欄位,該redshiftConfiguration欄位會映射至 RedshiftConfiguration。對於 RedshiftConfiguration,您可以設定下列欄位:
您可以設定下列類型的查詢引擎:
如果您的 Amazon Redshift 資料庫佈建在專用運算節點上, queryEngineConfiguration 欄位的值應為 RedshiftQueryEngineConfiguration,格式如下:
{ "type": "PROVISIONED", "provisionedConfiguration": { "clusterIdentifier": "string", "authConfiguration": RedshiftProvisionedAuthConfiguration }, }
在 clusterIdentifier 欄位中指定叢集的 ID。RedshiftProvisionedAuthConfiguration 取決於您使用的授權類型。選取符合您授權方法的標籤:
如果您使用的是 Amazon Redshift Serverless, queryConfiguration欄位的值應為 RedshiftQueryEngineConfiguration,格式如下:
{ "type": "SERVERLESS", "serverlessConfiguration": { "workgroupArn": "string", "authConfiguration": } }
在 workgroupArn 欄位中指定工作群組的 ARN。RedshiftServerlessAuthConfiguration 取決於您使用的授權類型。選取符合您授權方法的標籤:
此欄位會映射至包含單一 RedshiftQueryEngineStorageConfiguration 的陣列,其格式取決於資料的存放位置。
如果您的資料存放在 中 AWS Glue Data Catalog, RedshiftQueryEngineStorageConfiguration應該採用下列格式:
{ "type": "AWS_DATA_CATALOG", "awsDataCatalogConfiguration": { "tableNames": ["string"] } }
在tableNames要映射到的陣列中,新增您要將知識庫連接到的每個資料表的名稱。
注意
以跨資料庫查詢 () 中所述的模式輸入資料表名稱${databaseName}.${tableName}。您可以指定 來包含所有資料表${databaseName.*}。
如果您的資料存放在 Amazon Redshift 資料庫中, RedshiftQueryEngineStorageConfiguration應該採用下列格式:
{ "type": "string", "redshiftConfiguration": { "databaseName": "string" } }
在 databaseName 欄位中指定 Amazon Redshift 資料庫的名稱。
注意
以跨資料庫查詢 () 中所述的模式輸入資料表名稱${databaseName}.${tableName}。您可以指定 來包含所有資料表${databaseName.*}。
如果您的資料庫是透過 Amazon SageMaker AI Lakehouse 掛載,則資料庫名稱的格式為 ${db}@${schema}。
此欄位會映射至下列 QueryGenerationConfiguration,您可以用來設定查詢資料的方式:
{ "executionTimeoutSeconds": number, "generationContext": { "tables": [ { "name": "string", "description": "string", "inclusion": "string", "columns": [ { "name": "string", "description": "string", "inclusion": "string" }, ... ] }, ... ], "curatedQueries": [ { "naturalLanguage": "string", "sql": "string" }, ... ] } }
如果您希望查詢逾時,請在 executionTimeoutSeconds 欄位中以秒為單位指定逾時持續時間。
generationContext 欄位會映射至 QueryGenerationContext 物件,您可以在其中視需要設定下列任意數量的選項。
重要
如果您包含產生內容,查詢引擎會盡最大努力在產生 SQL 時套用內容。產生內容是非確定性的,僅用於提高模型準確性。為了確保準確性,請驗證產生的 SQL 查詢。
如需有關您可以包含的產生內容的資訊,請展開下列區段:
若要改善查詢資料庫的 SQL 產生準確性,您可以提供資料表或資料欄的描述,以提供比簡短資料表或資料欄名稱更多的內容。您可以執行下列作業:
-
若要新增資料表的描述,請在
tables陣列中包含 QueryGenerationTable 物件。在該物件中,指定name欄位中的資料表名稱和description欄位中的描述,如下列範例所示:{ "name": "database.schema.tableA", "description": "Description for Table A" } -
若要新增資料欄的描述,請在
tables陣列中包含 QueryGenerationTable 物件。在該物件中,在name欄位中指定資料表的名稱,並包含 欄位,該columns欄位會對應至 QueryGenerationColumn 的陣列。在QueryGenerationColumn物件中,在name欄位中包含資料欄的名稱,並在description欄位中包含描述,如下列範例所示:{ "name": "database.schema.tableA", "columns": [ { "name": "Column A", "description": "Description for Column A" } ] } -
您可以為資料表和其中的資料欄新增描述,如下列範例所示:
{ "name": "database.schema.tableA", "description": "Description for Table A", "columns": [ { "name": "columnA", "description": "Description for Column A" } ] }注意
以跨資料庫查詢中所述的模式輸入資料表和資料欄名稱。如果您的資料庫位於 AWS Glue Data Catalog,則格式為
awsdatacatalog.gluedatabase.table。
您可以使用 QueryGenerationTable 和 QueryGenerationColumn 物件中的 inclusion 欄位,建議在產生 SQL 時包含或排除的資料表或資料欄。 QueryGenerationColumn 您可以在 inclusion 欄位中指定下列其中一個值:
-
INCLUDE – 產生 SQL 時,只會包含您指定的資料表或資料欄做為內容。
-
EXCLUDE – 產生 SQL 時,會將您指定的資料表或資料欄排除為內容。
您可以透過以下方式指定是否包含或排除資料表或資料欄:
-
若要包含或排除資料表,請在
tables陣列中包含 QueryGenerationTable 物件。在該物件中,指定name欄位中資料表的名稱,以及是否要在inclusion欄位中包含或排除,如下列範例所示:{ "name": "database.schema.tableA", "inclusion": "EXCLUDE" }查詢引擎不會在產生 SQL 的其他內容
Table A中新增 。 -
若要包含或排除資料欄,請在
tables陣列中包含 QueryGenerationTable 物件。在該物件中,在name欄位中指定資料表的名稱,並包含 欄位,該columns欄位會對應至 QueryGenerationColumn 的陣列。在QueryGenerationColumn物件中,在name欄位中包含資料欄的名稱,以及是否要在inclusion欄位中包含或排除資料欄,如下列範例所示:{ "name": "database.schema.tableA", "columns": [ { "name": "database.schema.tableA.columnA", "inclusion": "EXCLUDE" } ] }產生 SQL 時,SQL 產生會在內容
Column ATable A中忽略 。 -
您可以在指定包含或排除項目時合併資料表和資料欄,如下列範例所示:
{ "name": "database.schema.tableA", "inclusion": "INCLUDE", "columns": [ { "name": "database.schema.tableA.columnA", "inclusion": "EXCLUDE" } ] }SQL 產生包含
Table A,但在新增產生 SQL 的內容時排除Column A在其中。
重要
資料表和資料欄排除無法取代護欄。這些資料表和資料欄包含和排除會用作模型在產生 SQL 時要考慮的其他內容。
若要改善查詢引擎將使用者查詢轉換為 SQL 查詢的準確性,您可以在 QueryGenerationContext 物件的 curatedQueries 欄位中提供其範例,其會對應至 CuratedQuery 物件的陣列。每個物件包含下列欄位:
-
naturalLanguage – 自然語言查詢的範例。
-
sql – 對應至自然語言查詢的 SQL 查詢。