需要結構化輸出
為了確保一致且結構化的輸出格式,您可以使用結構化輸出,包括 XML、JSON 或 Markdown 等格式。此方法可讓下游使用案例更有效地使用和處理模型產生的輸出。透過提供明確指示給模型,模型會以遵循預先定義之結構描述的方式產生回應。建議您提供 output
schema 供模型遵循。
例如,如果下游解析器預期 JSON 物件中的鍵采用特定命名慣例,則您應該在查詢的輸出結構描述欄位中指定此點。此外,如果您偏好回應為 JSON 格式,而且沒有任何前序文字,請相應地指示模型。也就是說,明確陳述「請只產生 JSON 輸出。請勿提供任何前序。」。
使用預先填入協助模型啟動
有效的替代方案是預先填入 assistant 內容,藉此引導模型的回應。此技術可讓您引導模型的動作、略過前序,以及強制執行特定輸出格式,例如 JSON 和 XML。例如,如果您使用 "{" 或 "```json" 預先填入助理內容,則該輸入可以引導模型產生 JSON 物件,而無需提供其他資訊。
提示
如果您明確想要擷取 JSON,一種常見的觀察到的模式是使用 ```json 預先填充 JSON,並在 ``` 上新增停止序列。這可確保模型輸出的 JSON 物件可透過程式設計方式進行解析。
以下是一些常見格式結構描述的範例。
以下程式碼示範如何使用 API 進行預先填充:
import boto3 import json # Create a Bedrock Runtime client. client = boto3.client( "bedrock-runtime", region_name="us-east-1" ) request_body = { "system": [ {"text": "You write JSON objects based on the given instructions"} ], "messages": [ { "role": "user", "content": [{"text": "Provide details about the best selling full-frame cameras in past three years. Answer in JSON format with keys like name, brand, price and a summary."}] }, { "role": "assistant", "content": [{"text": " Here is the JSON response: ```json"}] }, ], "inferenceConfig": { "maxTokens": 300, "temperature": 0, } } # Invoke the model and extract the response body. response = client.invoke_model( modelId="amazon.nova-micro-v1:0", body=json.dumps(request_body) ) model_response = json.loads(response["body"].read())
注意
對於結構化輸出,無論是否利用了工具的使用,我們都建議使用貪婪解碼參數。也就是 temperature=0。
在輸出結構描述區段新增適當的結構描述,可讓模型偏好符合該結構描述。不過,模型輸出並非確定性的,並且可能與輸出結構描述不同。
角色 |
提示詞 |
|
|---|---|---|
使用者 |
提供過去三年中最暢銷的全片幅相機的詳細資訊。使用名稱、品牌、價格和摘要等鍵,以 JSON 格式回答。 |
提供過去三年中最暢銷的全片幅相機的詳細資訊。您必須僅以 JSON 格式回答。請遵循以下輸出結構描述。 輸出結構描述:
|
助理 |
|
|
另一種方法是透過在助理的訊息中包含所需的初始文字,來預先填入模型的回應。在此情況下,Amazon Nova 模型的回應將從助理訊息結束的位置繼續。
角色 |
提示詞 |
|---|---|
使用者 |
提供過去三年中最暢銷的全片幅相機的詳細資訊。您的回應應該採用 JSON 格式,並具有下列鍵:名稱、品牌、年份、價格、摘要。 |
助理(預先填入) |
```json |
助理 |
|
第三種方法是透過在工具使用結構描述區段中包含傳統 JSON 結構描述,使用工具來強制模型回應的特定結構描述。您可以為提供的結構描述指定工具選擇,Amazon Nova 的回應將根據選取的工具進行結構化。若要進一步了解如何利用工具的使用,請參閱 搭配 Amazon Nova 使用工具 (函數呼叫)。
使用者 |
從下列提供的查詢中,擷取相關實體
|
ToolConfig |
|