Um die benutzerdefinierte Orchestrierung mithilfe der API-Operationen zu konfigurieren, senden Sie eine UpdateAgent-Anfrage (siehe Link für Anfrage- und Antwortformate und Felddetails) mit einem Build-Time-Endpunkt für Agenten für Amazon Bedrock. Geben Sie das Objekt orchestrationType als CUSTOM_ORCHESTRATION an.
Beispiel für Orchestrierungsnutzdaten in React
Nachfolgend finden Sie ein React-Beispiel, das die Orchestrierung der Gedankenkette zeigt. In diesem Beispiel fordert der Amazon-Bedrock-Agent das Modell nach jedem Schritt auf, die nächste Aktion vorherzusagen. Beachten Sie, dass der erste Status einer Konversation immer START lautet. Ereignisse sind die Antworten, die die Funktion als Antwort an Agenten für Amazon Bedrock sendet.
function react_chain_of_thought_orchestration(event) {
const incomingState = event.state;
let payloadData = '';
let responseEvent = '';
let responseTrace = '';
let responseAttribution = '';
if (incomingState == 'START') {
// 1. Invoke model in start
responseEvent = 'INVOKE_MODEL';
payloadData = JSON.stringify(intermediatePayload(event));
}
else if (incomingState == 'MODEL_INVOKED') {
const stopReason = modelInvocationStopReason(event);
if (stopReason == "tool_use") {
// 2.a. If invoke model predicts tool call, then we send INVOKE_TOOL event
responseEvent = 'INVOKE_TOOL';
payloadData = toolUsePayload(event);
}
else if (stopReason == "end_turn") {
// 2.b. If invoke model predicts an end turn, then we send FINISH event
responseEvent = 'FINISH';
payloadData = getEndTurnPayload(event);
}
}
else if (incomingState == 'TOOL_INVOKED') {
// 3. After a tool invocation, we again ask LLM to predict what should be the next step
responseEvent = 'INVOKE_MODEL';
payloadData = intermediatePayload(event);
}
else {
// Invalid incoming state
throw new Error('Invalid state provided!');
}
// 4. Create the final payload to send back to BedrockAgent
const payload = createPayload(payloadData, responseEvent, responseTrace, ...);
return JSON.stringify(payload);
}
Beispiel für Orchestrierungsnutzdaten in Lambda
Das folgende Beispiel zeigt die Orchestrierung der Gedankenkette. In diesem Beispiel fordert der Amazon-Bedrock-Agent das Modell nach jedem Schritt auf, die nächste Aktion vorherzusagen. Beachten Sie, dass der erste Status einer Konversation immer START lautet. Ereignisse sind die Antworten, die die Funktion als Antwort an Agenten für Amazon Bedrock sendet.
Die Nutzdatenstruktur an Orchestrierungs-Lambda
{
"version": "1.0",
"state": "START | MODEL_INVOKED | TOOL_INVOKED | APPLY_GUARDRAIL_INVOKED | user-defined",
"input": {
"text": "user-provided text or tool results in converse format"
},
"context": {
"requestId": "invoke agent request id",
"sessionId": "invoke agent session id",
"agentConfiguration": {
"instruction": "agent instruction>,
"defaultModelId": "agent default model id",
"tools": [{
"toolSpec": {...}
}
...
],
"guardrails": {
"version": "guardrail version",
"identifier": "guardrail identifier"
}
},
"session": [{
"agentInput": "input utterance provided in invokeAgent",
"agentOutput": "output response from invokeAgent",
"intermediarySteps": [{
"orchestrationInput": {
"state": "START | MODEL_INVOKED | TOOL_INVOKED | APPLY_GUARDRAIL_INVOKED | user defined",
"text": "..."
},
"orchestrationOutput": {
"event": "INVOKE_MODEL | INVOKE_TOOL | APPLY_GUARDRAIL | FINISH | user defined",
"text": "Converse API request or text"
}
}]
}],
"sessionAttributes": {
key value pairs
},
"promptSessionAttributes": {
key value pairs
}
}
}
Die Nutzdatenstruktur von Orchestrierungs-Lambda
{
"version": "1.0",
"actionEvent": "INVOKE_MODEL | INVOKE_TOOL | APPLY_GUARDRAIL | FINISH | user defined",
"output": {
"text": "Converse API request for INVOKE_MODEL, INVOKE_TOOL, APPLY_GUARDRAIL or text for FINISH",
"trace": {
"event": {
"text": "Trace message to emit as event in InvokeAgent response"
}
}
},
"context": {
"sessionAttributes": {
key value pairs
},
"promptSessionAttributes": {
key value pairs
}
}
}
Beispiel für einen START_STATE, der von Agenten für Amazon Bedrock an Orchestrator-Lambda gesendet wurde
{
"version": "1.0",
"state": "START",
"input": {
"text": "{\"text\":\"invoke agent input text\"}"
},
"context": {
...
}
}
Wenn Orchestrierungs-Lambda als Antwort eine INVOKE_MODEL EVENT-Antwort sendet, könnte diese etwa wie folgt aussehen:
{
"version": "1.0",
"actionEvent": "INVOKE_MODEL",
"output": {
"text": "converse API request",
"trace": {
"event": {
"text": "debug trace text"
}
}
},
"context": {}
}
Beispiel für ein INVOKE_TOOL_EVENT über die Converse-API
{
"version": "1.0",
"actionEvent": "INVOKE_TOOL",
"output": {
"text": "{\"toolUse\":{\"toolUseId\":\"unique id\",\"name\":\"tool name\",\"input\":{}}}"
}
}