如何用PHP版AWS SDK调用Bedrock Agent Runtime并正确解析结果
正确解析AWS Bedrock Agent invokeAgent返回结果的方法
问题说明
调用AWS Bedrock Agent的invokeAgent接口时,出现解析错误:
Failed to parse unknown message type. in /vendor/aws/aws-sdk-php/src/Api/Parser/EventParsingIterator.php:74
同时需要获取与AWS控制台测试Agent时一致的输出结果。
解决方案
invokeAgent返回的是事件流响应,不能直接遍历原始响应数组,需通过SDK提供的事件类型判断来正确解析。修正后的代码如下:
$client = new BedrockAgentRuntimeClient([ 'version' => 'latest', 'region' => 'us-east-1', 'credentials' => [ 'key' => '...', 'secret' => '...', ], ]); $payloadAgent = [ 'agentId' => '...', 'agentAliasId' => '...', 'sessionId' => '123456', 'enableTrace' => false, 'inputText' => 'prompt to send to the agent', ]; $completion = ''; try { $response = $client->invokeAgent($payloadAgent); $eventIterator = $response['completion']; foreach ($eventIterator as $event) { // 仅处理Completion事件,对应控制台的纯回答内容 if ($event instanceof \Aws\BedrockAgentRuntime\Event\CompletionEvent) { $chunkBytes = $event->getChunk()->get('bytes'); $completion .= utf8_decode($chunkBytes); } } echo "最终输出:" . $completion; } catch (\Aws\Exception\AwsException|\Exception $e) { echo $e->getMessage(); }
关键说明
- 事件类型判断:通过
instanceof识别CompletionEvent类型,避免因未知事件类型触发解析错误 - 对齐控制台输出:保持
enableTrace为false,仅提取纯回答内容,与控制台默认测试结果一致 - 编码处理:使用
utf8_decode将字节流转换为可读的UTF-8文本,确保内容显示正常
内容的提问来源于stack exchange,提问作者Boyko
相关产品推荐
相关产品推荐

