[アップデート] Amzon Bedrock Agents の InvokeInlineAgent API がストリーミング生成をサポートしました
こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。
Amzon Bedrock Agents の InvokeInlineAgent API がストリーミング生成をサポートしました。
今まで対応していなかったストリーミング生成をサポートし、さらに使いやすくなったのではないでしょうか。
InvokeInlineAgent
InvokeInlineAgent API は Amazon Bedrock Agents を構築せずとも、 Agents の定義を API のパラメーターに含めることで Agents の機能を利用できる API です。InvokeInlineAgent API で実行する Agents は InlineAgent と呼ばれています。
アップデート内容
InvokeInlineAgent API に今回、新たに streamingConfigurations
が追加され、ストリーミングの有無かう、 Amazon Bedrock Guardrails が当てられている場合に、チェックする文字数の間隔値を指定できるようになりました。
client.invoke_inline_agent(
actionGroups=[
{
'actionGroupExecutor': {
'customControl': 'RETURN_CONTROL',
'lambda': 'string'
},
'actionGroupName': 'string',
'apiSchema': {
'payload': 'string',
's3': {
's3BucketName': 'string',
's3ObjectKey': 'string'
}
},
'description': 'string',
'functionSchema': {
'functions': [
{
'description': 'string',
'name': 'string',
'parameters': {
'string': {
'description': 'string',
'required': True|False,
'type': 'string'|'number'|'integer'|'boolean'|'array'
}
},
'requireConfirmation': 'ENABLED'|'DISABLED'
},
]
},
'parentActionGroupSignature': 'AMAZON.UserInput'|'AMAZON.CodeInterpreter'
},
],
bedrockModelConfigurations={
'performanceConfig': {
'latency': 'standard'|'optimized'
}
},
customerEncryptionKeyArn='string',
enableTrace=True|False,
endSession=True|False,
foundationModel='string',
guardrailConfiguration={
'guardrailIdentifier': 'string',
'guardrailVersion': 'string'
},
idleSessionTTLInSeconds=123,
inlineSessionState={
'files': [
{
'name': 'string',
'source': {
'byteContent': {
'data': b'bytes',
'mediaType': 'string'
},
's3Location': {
'uri': 'string'
},
'sourceType': 'S3'|'BYTE_CONTENT'
},
'useCase': 'CODE_INTERPRETER'|'CHAT'
},
],
'invocationId': 'string',
'promptSessionAttributes': {
'string': 'string'
},
'returnControlInvocationResults': [
{
'apiResult': {
'actionGroup': 'string',
'agentId': 'string',
'apiPath': 'string',
'confirmationState': 'CONFIRM'|'DENY',
'httpMethod': 'string',
'httpStatusCode': 123,
'responseBody': {
'string': {
'body': 'string'
}
},
'responseState': 'FAILURE'|'REPROMPT'
},
'functionResult': {
'actionGroup': 'string',
'agentId': 'string',
'confirmationState': 'CONFIRM'|'DENY',
'function': 'string',
'responseBody': {
'string': {
'body': 'string'
}
},
'responseState': 'FAILURE'|'REPROMPT'
}
},
],
'sessionAttributes': {
'string': 'string'
}
},
inputText='string',
instruction='string',
knowledgeBases=[
{
'description': 'string',
'knowledgeBaseId': 'string',
'retrievalConfiguration': {
'vectorSearchConfiguration': {
'filter': {
'andAll': [
{'... recursive ...'},
],
'equals': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'greaterThan': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'greaterThanOrEquals': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'in': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'lessThan': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'lessThanOrEquals': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'listContains': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'notEquals': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'notIn': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'orAll': [
{'... recursive ...'},
],
'startsWith': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
},
'stringContains': {
'key': 'string',
'value': {...}|[...]|123|123.4|'string'|True|None
}
},
'implicitFilterConfiguration': {
'metadataAttributes': [
{
'description': 'string',
'key': 'string',
'type': 'STRING'|'NUMBER'|'BOOLEAN'|'STRING_LIST'
},
],
'modelArn': 'string'
},
'numberOfResults': 123,
'overrideSearchType': 'HYBRID'|'SEMANTIC',
'rerankingConfiguration': {
'bedrockRerankingConfiguration': {
'metadataConfiguration': {
'selectionMode': 'SELECTIVE'|'ALL',
'selectiveModeConfiguration': {
'fieldsToExclude': [
{
'fieldName': 'string'
},
],
'fieldsToInclude': [
{
'fieldName': 'string'
},
]
}
},
'modelConfiguration': {
'additionalModelRequestFields': {
'string': {...}|[...]|123|123.4|'string'|True|None
},
'modelArn': 'string'
},
'numberOfRerankedResults': 123
},
'type': 'BEDROCK_RERANKING_MODEL'
}
}
}
},
],
promptOverrideConfiguration={
'overrideLambda': 'string',
'promptConfigurations': [
{
'basePromptTemplate': 'string',
'inferenceConfiguration': {
'maximumLength': 123,
'stopSequences': [
'string',
],
'temperature': ...,
'topK': 123,
'topP': ...
},
'parserMode': 'DEFAULT'|'OVERRIDDEN',
'promptCreationMode': 'DEFAULT'|'OVERRIDDEN',
'promptState': 'ENABLED'|'DISABLED',
'promptType': 'PRE_PROCESSING'|'ORCHESTRATION'|'KNOWLEDGE_BASE_RESPONSE_GENERATION'|'POST_PROCESSING'|'ROUTING_CLASSIFIER'
},
]
},
sessionId='string',
+ streamingConfigurations={
+ 'applyGuardrailInterval': 123,
+ 'streamFinalResponse': True|False
+ }
)
やってみる
それでは実際に、以下のコードでストリーミング処理をしてみます。森田の書いたコードを参考にさせていただきました。
トレース部分はアップデート前後で変わらないため、最終的な Output 部分をストリーミングするようにしてみました。
import boto3
from uuid import uuid4
from pprint import pprint
session_id = str(uuid4())
bedrock_agent_runtime = boto3.client('bedrock-agent-runtime', region_name='us-west-2')
inputText = """
x = 2*3
print(x)
日本語で、実行結果とともに処理内容を解説してください。
"""
response = bedrock_agent_runtime.invoke_inline_agent(
sessionId=session_id,
# Input
inputText=inputText,
endSession=False,
enableTrace=True,
# Agent configurations
foundationModel='anthropic.claude-3-haiku-20240307-v1:0',
instruction="あなたは、ユーザの代わりにコードを実行するエージェントです。ユーザから入力されたコードをCodeInterpreterActionを使って実行します。",
actionGroups=[
{
'actionGroupName': 'CodeInterpreterAction',
'parentActionGroupSignature': 'AMAZON.CodeInterpreter'
}
],
+ streamingConfigurations={
+ 'streamFinalResponse': True
+ },
)
- print("Trace:")
- for event in response['completion']:
- if 'trace' in event:
- pprint(event['trace']['trace']['orchestrationTrace'])
- if 'chunk' in event:
- break
print("------")
print("Output:")
+ for event in response['completion']:
+ if 'chunk' in event:
+ print(event['chunk']['bytes'].decode('utf-8'), end='')
うまくストリーミング生成されていることがわかりますね。
まとめ
以上、簡単ではございましたが「Amzon Bedrock Agents の InvokeInlineAgent API がストリーミング生成をサポートしました。」でした。
InvokeInlineAgent API をなんとなく知ってはいたのですが、こんなに簡単に Agents を体験できるのはクセになりますね。
このブログが参考になれば幸いです。
クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!