流程的節點類型 - Amazon Bedrock

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

流程的節點類型

Amazon Bedrock Flows 提供下列節點類型來建置您的流程。當您設定節點時,請提供下列欄位:

  • 名稱 – 輸入節點的名稱。

  • 類型 – 在 主控台中,您可以拖放要使用的節點類型。在 API 中,使用 type 欄位和 configuration 欄位中對應的 FlowNodeConfiguration

  • 輸入 – 為每個輸入提供下列資訊:

  • 輸出 – 為每個輸出提供下列資訊:

    • 名稱 – 輸出的名稱。有些節點具有您必須使用的預先定義名稱或類型。若要了解哪些名稱具有預先定義的名稱,請參閱 邏輯節點類型

    • 類型 – 輸出的資料類型。在執行時間達到此節點時,Amazon Bedrock 會驗證節點輸出是否符合資料類型。

  • 組態 – 在主控台中,您可以在節點頂端定義節點特定的欄位。在 API 中,使用適當的 FlowNodeConfiguration 並填寫其欄位。

每個節點類型如下所述,並在 API 中提供其結構。展開區段以進一步了解該節點類型。

用於控制流程邏輯的節點

使用下列節點類型來控制流程的邏輯。

每個流程只包含一個流程輸入節點,且必須以其開頭。流程輸入節點content會從InvokeFlow請求取得 、驗證資料類型,並將其傳送至下列節點。

以下顯示 API 中輸入 FlowNode 物件的一般結構:

{ "name": "string", "type": "Input", "outputs": [ { "name": "document", "type": "String | Number | Boolean | Object | Array", } ], "configuration": { "input": CONTEXT-DEPENDENT } }

流程輸出節點會根據定義的表達式,從上一個節點擷取輸入資料,並傳回它。在 主控台中,輸出是在測試視窗中選擇執行後傳回的回應。在 API 中,輸出會在flowOutputEventInvokeFlow回應的 content欄位中傳回。流程可以有多個流程輸出節點。

如果流程中有多個分支,則流程可以有多個流程輸出節點。

以下顯示輸出 FlowNode 物件的一般結構:

{ "name": "string", "type": "Output", "inputs": [ { "name": "document", "type": "String | Number | Boolean | Object | Array", "expression": "string" } ], "configuration": { "output": CONTEXT-DEPENDENT } }

條件節點會根據定義的條件,將資料從先前的節點傳送至不同的節點。條件節點可以接受多個輸入。

如需範例,請參閱「使用條件節點建立流程」。

定義條件節點
  1. 視需要新增任意數量的輸入,以評估您計劃新增的條件。

  2. 輸入每個輸入的名稱,指定要預期的類型,然後撰寫表達式從整個輸入中擷取相關部分。

  3. 將每個輸入連接到上游節點的相關輸出。

  4. 視需要新增任意數量的條件。

  5. 對於每個條件:

    1. 輸入條件的名稱。

    2. 使用關聯式和邏輯運算子來定義條件,將輸入與其他輸入或常數進行比較。

      注意

      條件會依序評估。如果滿足多個條件,則較早的條件優先。

    3. 將每個條件連接到您想要在滿足條件時傳送資料的下游節點。

條件表達式

若要定義條件,您可以依其名稱參考輸入,並使用下列任一關聯式運算子將其與值進行比較:

運算子 意義 支援的資料類型 範例使用方式 範例意義
== 等於 (資料類型也必須等於) 字串、數字、布林值 A == B 如果 A 等於 B
!= 不等於 字串、數字、布林值 != B 如果 A 不等於 B
> 大於 Number A > B 如果 A 大於 B
>= 大於或等於 Number A >= B 如果 A 大於或等於 B
< 小於 Number A < B 如果 A 小於 B
<= 小於或等於 Number A <= B 如果 A 小於或等於 B

您可以將輸入與其他輸入或條件表達式中的常數進行比較。例如,如果您有一個名為 的數值輸入profit,另一個名為 的數值輸入expenses,則 profit > expensesprofit <= 1000 都是有效的表達式。

您可以使用下列邏輯運算子來結合表達式,以因應更複雜的條件。我們建議您使用括號來解決運算式分組中的模棱兩可情況:

運算子 意義 範例使用方式 範例意義
以及 兩個表達式都是 true (A < B) 和 (C == 1) 如果兩個表達式都是 true:
  • 小於 B

  • C 等於 1

至少一個表達式為 true (A != 2) 或 (B > C) 如果任一表達式為 true:
  • 不等於 B

  • B 大於 C

表達式不是 true 不是 (A > B) 如果 A 不大於 B (相當於 A <= B)

在 API 中,當您傳送 CreateFlowUpdateFlow 請求時,您可以在 definition 欄位中定義下列項目:

  1. nodes 陣列中的條件 FlowNode 物件。一般格式如下所示 (請注意,條件節點沒有 outputs):

    { "name": "string", "type": "Condition", "inputs": [ { "name": "string", "type": "String | Number | Boolean | Object | Array", "expression": "string" } ], "configuration": { "condition": { "conditions": [ { "name": "string", "expression": "string" }, ... ] } } }
  2. 對於條件節點的每個輸入,connections陣列中的 FlowConnection 物件。在物件的 configuration 欄位中包含 FlowDataConnectionConfiguration FlowConnection 物件。物件的一般格式FlowConnection如下所示:

    { "name": "string", "source": "string", "target": "string", "type": "Data", "configuration": { "data": { "sourceOutput": "string", "expression": "string" } } }
  3. 對於條件節點中的每個條件 (包括預設條件),connections陣列中的 FlowConnection 物件。在物件的 configuration 欄位中包含 FlowConditionalConnectionConfiguration FlowConnection 物件。FlowConnection 物件的一般格式如下:

    { "name": "string", "source": "string", "target": "string", "type": "Conditional", "configuration": { "conditional": { "condition": "string" } } }

    使用關聯式和邏輯運算子來定義condition將此條件source節點連接到下游target節點的 。針對預設條件,請將條件指定為 default

迭代器節點採用 陣列,並反覆將其項目做為輸出傳回下游節點。迭代器節點的輸入會逐一處理,不會彼此平行處理。流程輸出節點會傳回不同回應中每個輸入的最終結果。除了陣列的大小之外,您也可以使用反覆運算節點下游的收集器節點來收集反覆運算的回應,並將其傳回為陣列。

以下顯示迭代器 FlowNode 物件的一般結構:

{ "name": "string", "type": "Iterator", "inputs": [ { "name": "array", "type": "String | Number | Boolean | Object | Array", "expression": "string" } ], "outputs": [ { "name": "arrayItem", "type": "String | Number | Boolean | Object | Array", }, { "name": "arraySize", "type": "Number" } ], "configuration": { "iterator": CONTEXT-DEPENDENT } }

除了陣列的大小之外,收集器節點還會採用反覆輸入,並以陣列的形式傳回它們。您可以在反覆運算節點下游使用收集器節點,在透過某些節點傳送重複項目之後收集這些項目。

以下顯示收集器 FlowNode 物件的一般結構:

{ "name": "string", "type": "Collector", "inputs": [ { "name": "arrayItem", "type": "String | Number | Boolean | Object | Array", "expression": "string" }, { "name": "arraySize", "type": "Number" } ], "outputs": [ { "name": "collectedArray", "type": "Array" }, ], "configuration": { "collector": CONTEXT-DEPENDENT } }

用於處理流程中資料的節點

使用下列節點類型來處理流程中的資料:

提示節點定義要在流程中使用的提示。您可以使用提示管理中的提示,或在節點中定義一個內嵌。如需詳細資訊,請參閱在 Amazon Bedrock 中使用提示管理來建構和儲存可重複使用的提示

如需範例,請參閱「嘗試範例流程」。

提示節點的輸入是用來填入變數的值。輸出是從模型產生的回應。

以下顯示提示 FlowNode 物件的一般結構:

{ "name": "string", "type": "prompt", "inputs": [ { "name": "content", "type": "String | Number | Boolean | Object | Array", "expression": "string" }, ... ], "outputs": [ { "name": "modelCompletion", "type": "String" } ], "configuration": { "prompt": { "sourceConfiguration": PromptFlowNodeSourceConfiguration object (see below), "guardrailConfiguration": { "guardrailIdentifier": "string", "guardrailVersion": "string" } } } }

PromptFlowNodeSourceConfiguration 物件取決於您使用提示管理的提示,還是內嵌定義提示:

  • 如果您使用提示管理的提示,物件應位於下列一般結構中:

    { "resource": { "promptArn": "string" } }
  • 如果您定義提示內嵌,請遵循 的 API 索引標籤中定義變體的指引 使用提示管理建立提示(但請注意,此物件中沒有 name 欄位)。您使用的物件應位於下列一般結構中:

    { "inline": { "modelId": "string", "templateType": "TEXT", "templateConfiguration": { "text": { "text": "string", "inputVariables": [ { "name": "string" }, ... ] } }, "inferenceConfiguration": { "text": { "maxTokens": int, "stopSequences": ["string", ...], "temperature": float, "topP": float } }, "additionalModelRequestFields": { "key": "value", ... } } }

若要將護欄從 Amazon Bedrock 護欄套用至您的提示或從中產生的回應,請在 guardrailIdentifier 欄位中包含 guardrailConfiguration 欄位,並在 欄位中指定護欄的 ID 或 ARN,以及在 guardrailVersion 欄位中指定護欄的版本。

代理程式節點可讓您傳送提示給代理程式,在 FMs 與相關資源之間協調,以識別和執行最終使用者的動作。如需詳細資訊,請參閱使用 AI 代理器自動化應用程式中的任務

在組態中,指定要使用之代理程式別名的 Amazon Resource Name (ARN)。節點的輸入是客服人員的提示,以及任何相關聯的提示或工作階段屬性。節點會將代理程式的回應傳回為輸出。

客服人員節點可以支援多轉調用,在流程執行期間啟用使用者與客服人員之間的互動對話。當客服人員節點需要其他資訊或釐清時,可以暫停流程執行,並向使用者請求特定輸入。一旦使用者提供請求的資訊,客服人員節點會繼續處理新的輸入。這會持續到代理程式節點擁有完成其執行所需的所有必要資訊為止

以下顯示代理程式 FlowNode 物件的一般結構:

{ "name": "string", "type": "Agent", "inputs": [ { "name": "agentInputText" "type": "String | Number | Boolean | Object | Array", "expression": "string" }, { "name": "promptAttributes" "type": "Object", "expression": "string" }, { "name": "sessionAttributes" "type": "Object", "expression": "string" } ], "outputs": [ { "name": "agentResponse", "type": "String" } ], "configuration": { "agent": { "agentAliasArn": "string" } } }

知識庫節點可讓您從 Amazon Bedrock 知識庫將查詢傳送至知識庫。如需詳細資訊,請參閱使用 Amazon Bedrock 知識庫擷取資料並產生 AI 回應

在組態中,knowledgeBaseId提供最少的 。根據您的使用案例,您可以選擇包含下列欄位:

  • modelId – 如果您想要根據擷取的結果產生回應,請包含要使用的模型 ID。若要以陣列形式傳回擷取的結果,請省略模型 ID。

  • guardrailConfiguration – 包含 guardrailIdentifier欄位中 Amazon Bedrock Guardrails 中定義的護欄 ID 或 ARN,以及 guardrailVersion 欄位中護欄的版本。

    注意

    只有在知識庫節點RetrieveAndGenerate中使用 時,才能套用護欄。

節點的輸入是對知識庫的查詢。輸出可以是模型回應、字串或擷取結果的陣列。

以下顯示知識庫 FlowNode 物件的一般結構:

{ "name": "string", "type": "KnowledgeBase", "inputs": [ { "name": "retrievalQuery", "type": "String", "expression": "string" } ], "outputs": [ { "name": "retrievalResults" | "outputText", "type": "Array | String" } ], "configuration": { "knowledgeBase": { "knowledgeBaseId": "string", "modelId": "string", "guardrailConfiguration": { "guardrailIdentifier": "string", "guardrailVersion": "string" } } } }

S3 儲存節點可讓您將資料儲存在 Amazon S3 儲存貯體的流程中。在組態中,您可以指定要用於資料儲存的 S3 儲存貯體。節點的輸入是要存放的內容和物件金鑰。節點會傳回 S3 位置的 URI 做為其輸出。

以下顯示 S3 儲存 FlowNode 物件的一般結構:

{ "name": "string", "type": "Storage", "inputs": [ { "name": "content", "type": "String | Number | Boolean | Object | Array", "expression": "string" }, { "name": "objectKey", "type": "String", "expression": "string" } ], "outputs": [ { "name": "s3Uri", "type": "String" } ], "configuration": { "retrieval": { "serviceConfiguration": { "s3": { "bucketName": "string" } } } } }

S3 擷取節點可讓您從 Amazon S3 位置擷取資料,以引入流程。在組態中,您可以指定要從中擷取資料的 S3 儲存貯體。節點的輸入是物件金鑰。節點會傳回 S3 位置中的內容做為輸出。

注意

目前,S3 位置中的資料必須是 UTF-8 編碼字串。

以下顯示 S3 擷取 FlowNode 物件的一般結構:

{ "name": "string", "type": "Retrieval", "inputs": [ { "name": "objectKey", "type": "String", "expression": "string" } ], "outputs": [ { "name": "s3Content", "type": "String" } ], "configuration": { "retrieval": { "serviceConfiguration": { "s3": { "bucketName": "string" } } } } }

Lambda 函數節點可讓您呼叫 Lambda 函數,您可以在其中定義程式碼來執行商業邏輯。當您在流程中包含 Lambda 節點時,Amazon Bedrock 會將輸入事件傳送至您指定的 Lambda 函數。

在組態中,指定 Lambda 函數的 Amazon Resource Name (ARN)。定義要在 Lambda 輸入事件中傳送的輸入。您可以根據這些輸入編寫程式碼,並定義函數傳回的內容。函數回應會在輸出中傳回。

以下顯示 Lambda 函數 FlowNode 物件的一般結構:

{ "name": "string", "type": "LambdaFunction", "inputs": [ { "name": "codeHookInput", "type": "String | Number | Boolean | Object | Array", "expression": "string" }, ... ], "outputs": [ { "name": "functionResponse", "type": "String | Number | Boolean | Object | Array" } ], "configuration": { "lambdaFunction": { "lambdaArn": "string" } } }

流程的 Lambda 輸入事件

傳送至 Lambda 節點中 Lambda 函數的輸入事件格式如下:

{ "messageVersion": "1.0", "flow": { "flowArn": "string", "flowAliasArn": "string" }, "node": { "name": "string", "inputs": [ { "name": "string", "type": "String | Number | Boolean | Object | Array", "expression": "string", "value": ... }, ... ] } }

每個輸入的欄位符合您在定義 Lambda 節點時指定的欄位,而 value 欄位的值會在運算式解析後填入節點的完整輸入。例如,如果節點的整個輸入是 ,[1, 2, 3]且表達式是 $.data[1],則輸入事件中傳送至 Lambda 函數的值會是 2

如需 Lambda 中事件的詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的 Lambda 概念

流程的 Lambda 回應

當您撰寫 Lambda 函數時,您可以定義其傳回的回應。此回應會傳回至您的流程,做為 Lambda 節點的輸出。

內嵌程式碼節點可讓您直接在流程中撰寫和執行程式碼,無需使用外部 Lambda 函數即可進行資料轉換、自訂邏輯和整合。當您在流程中包含內嵌程式碼節點時,Amazon Bedrock 會在未與任何人共用且無法存取網際網路的隔離受 AWS 管環境中執行您的程式碼。

注意

Amazon Bedrock 的內嵌程式碼節點處於預覽版本中,可能會有所變更。

在節點組態中,指定要與程式設計語言一起執行的程式碼 (Python_3 目前是唯一的選項)。將程式碼可存取的輸入定義為變數。程式碼中最後一行執行的結果會傳回為節點輸出。

下列範例顯示內嵌程式碼 FlowNode 物件的一般結構:

{ "name": "string", "type": "InlineCode", "inputs": [{ "name": "string", "type": "String | Number | Boolean | Object | Array", "expression": "string" }, ... ], "outputs": [{ "name": "response", "type": "String | Number | Boolean | Object | Array" }], "configuration": { "inlineCode": { "code": "string", "language": "Python_3" } } }

使用內嵌程式碼節點時的考量事項

在流程中使用內嵌程式碼節點時,請考慮下列事項:

重要

建議您先測試程式碼,再將其新增至內嵌程式碼節點。

  • 目前,內嵌程式碼節點支援的唯一程式設計語言是 Python 3.12 (Python_3)

  • 內嵌程式碼就像互動式 Python 工作階段。只會擷取最後執行行的結果,並以節點輸出的形式傳回。

  • 不會擷取 Python 主控台輸出 (例如來自 print函數的輸出)。

  • 內嵌程式碼節點的輸入可作為程式碼中的 Python 變數。使用節點輸入的確切名稱來參考它們。

  • 正確設定輸入和輸出類型,以避免執行時間錯誤。您最多可以設定五個節點輸入。

  • 每個流程最多可以有五個內嵌程式碼節點。

  • 每個 最多可以有 25 個執行中的內嵌程式碼節點 AWS 帳戶。

  • 您的程式碼不能超過 5 MB。

內嵌程式碼節點輸入

您為內嵌程式碼節點定義的輸入可作為程式碼中的 Python 變數。例如,如果您定義名為 的輸入userData,則可以直接在程式碼中將其存取為 userData

每個輸入的值會根據您定義的表達式填入。例如,如果節點的輸入是 {"name": "John", "age": 30}且表達式是 $.name,則輸入變數的值會是 "John"

內嵌程式碼節點輸出

程式碼中最後一行執行的結果會傳回為內嵌程式碼節點的輸出。此輸出可供流程中的後續節點使用。

例如,下列程式碼會傳回字典做為節點輸出:

# Process input data result = {"processed": True, "data": userData} # The last line's result is returned as the node output result
注意

Lex 節點依賴 Amazon Lex 服務,該服務可能會存放和使用客戶內容,以開發和持續改善其他服務 AWS 。身為 AWS 客戶,您可以選擇不儲存內容或將其用於改善服務。若要了解如何為 Amazon Lex 實作選擇退出政策,請參閱 AI 服務選擇退出政策

Lex 節點可讓您呼叫 Amazon Lex 機器人,使用自然語言處理來處理表達用語,並根據機器人定義識別意圖。如需詳細資訊,請參閱 Amazon Lex 開發人員指南

在組態中,指定要使用之機器人別名的 Amazon Resource Name (ARN) 和要使用的地區設定。節點的輸入是表達用語和任何隨附的請求屬性工作階段屬性。節點會傳回已識別的意圖做為輸出。

注意

目前,Lex 節點不支援多迴轉對話。一個 Lex 節點只能處理一個表達用語。

以下顯示 Lex FlowNode 物件的一般結構:

{ "name": "string", "type": "Lex", "inputs": [ { "name": "inputText", "type": "String | Number | Boolean | Object | Array", "expression": "string" }, { "name": "requestAttributes", "type": "Object", "expression": "string" }, { "name": "sessionAttributes", "type": "Object", "expression": "string" } ], "outputs": [ { "name": "predictedIntent", "type": "String" } ], "configuration": { "lex": { "botAliasArn": "string", "localeId": "string" } } }

節點類型的摘要資料表

下表摘要說明每個節點類型允許的輸入和輸出。注意下列事項:

  • 如果名稱標記為任何,您可以提供任何字串做為名稱。否則,您必須使用資料表中指定的值。

  • 如果類型標記為任何,您可以指定下列任何資料類型:字串、數字、布林值、物件、陣列。否則,您必須使用資料表中指定的類型。

  • 您可以為條件提示Lambda 函數內嵌程式碼節點定義多個輸入。

邏輯節點類型
輸入資訊 輸出資訊
節點類型 輸入 名稱 Type 輸出 名稱 Type
輸入 N/A N/A N/A InvokeFlow 請求中的 content 欄位。 document 任何
輸出 InvokeFlow 回應中要傳回的資料。 document 任何 N/A N/A N/A
Condition

根據條件傳送的資料。

(允許多個輸入)

任何 任何

根據條件傳送的資料。

(指定不同路徑的條件)

任何 任何
迭代器 您想要反覆將下列節點套用到每個成員的陣列 (這些節點)。 array 陣列 陣列中的每個項目 arrayItem 任何
輸入陣列的大小 arraySize Number
收集器 您想要合併到陣列的反覆運算。 arrayItem 任何 已附加上一個節點的所有輸出的陣列。 collectedArray 陣列
輸出陣列的大小 arraySize Number
資料處理節點類型
輸入資訊 輸出資訊
節點類型 輸入 名稱 Type 輸出 名稱 Type
提示

在提示中填入變數的值 (允許多個輸入)。

${variable-name} 任何 模型傳回的回應。 modelCompletion 字串
S3 儲存體 要存放在 S3 儲存貯體的資料。 content 任何 S3 位置的 URI。 s3Uri 字串
用於 S3 物件的物件金鑰 objectKey 字串
S3 擷取 S3 物件的物件金鑰 objectKey 字串 從 S3 儲存貯體擷取的資料。 s3Content 任何
代理程式 傳送給客服人員的提示。 agentInputText 字串 從代理程式傳回的回應。 agentResponse 字串
提示一起傳送的任何提示屬性 promptAttributes 物件
隨提示一起傳送的任何工作階段屬性 sessionAttributes 物件
知識庫 要傳送至知識庫的查詢。 retrievalQuery 字串 從知識庫傳回的結果或產生的回應。 retrievalResults 陣列
Lambda 函數

要傳送至函數的資料 (允許多個輸入)。

任何 任何 從函數傳回的回應。 functionResponse 任何
內嵌程式碼節點

要執行之程式碼的變數 (允許多個輸入)。

任何 任何 程式碼中執行的最後一行。 response 任何
Lex 要傳送給機器人的表達用語。 inputText 字串 機器人針對表達用語預測的意圖。 predictedIntent 字串
與表達用語一起傳送的任何請求屬性 requestAttributes 物件
任何要與表達用語一起傳送的工作階段屬性 sessionAttributes 物件