You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确读取和处理InvokeAgentResponse中的Amazon.BedrockAgentRuntime.Model.ResponseStream

解决Amazon Bedrock Agent响应流提取纯文本的问题

问题分析

InvokeAgentAsync返回的Completion是流式响应对象(ResponseStream),并非直接的文本内容,因此直接调用ToString()只会返回类型名称,无法获取实际响应文本。

解决方案

通过StreamReader异步读取流式对象的内容,将其转换为纯文本。以下是修改后的完整实现:

public class AgentClient : IAgentClient
{
    private readonly AmazonBedrockAgentRuntimeClient _client;
    private readonly BedrockSettings _settings;

    public AgentClient()
    {
        _settings = new BedrockSettings();
        var credentials = new BasicAWSCredentials(_settings.AccessKeyId, _settings.SecretAccessKey);
        var config = new AmazonBedrockAgentRuntimeConfig
        {
            RegionEndpoint = Amazon.RegionEndpoint.GetBySystemName(_settings.Region)
        };
        _client = new AmazonBedrockAgentRuntimeClient(credentials, config);
    }

    public async Task<string> QueryAgentAsync(string sessionId, string inputText)
    {
        try
        {
            var request = new InvokeAgentRequest
            {
                SessionId = sessionId,
                AgentId = _settings.AgentId,
                AgentAliasId = _settings.AgentAliasId,
                InputText = inputText,
                EnableTrace = true
            };

            var agentResponse = await _client.InvokeAgentAsync(request);

            if (agentResponse.Completion == null)
            {
                throw new Exception("Completion is undefined in the response.");
            }

            // 读取流式响应内容为纯文本
            using var streamReader = new StreamReader(agentResponse.Completion);
            var responseText = await streamReader.ReadToEndAsync();
            
            Console.WriteLine("Agent Response Content: " + responseText);
            return responseText;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error invoking agent: {ex.Message}");
            return null;
        }
    }
}

关键说明

  • 流读取逻辑:使用StreamReader的ReadToEndAsync()方法异步读取整个响应流,确保获取完整的文本内容。
  • 资源释放:用using语句包裹StreamReader,自动处理流的释放,避免资源泄漏。
  • 返回类型调整:将方法返回类型从Task<ResponseStream>改为Task<string>,直接返回纯文本,匹配你的需求。

若需保留流式处理(如大文本场景),可直接操作ResponseStream对象,但需确保使用完毕后手动释放资源。

内容的提问来源于stack exchange,提问作者Naveen Fernando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:02:41