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

问题描述 投票:0回答:1

当前实施情况

    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<ResponseStream> 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.");
                }

                var responseContent = agentResponse.Completion;
                Console.WriteLine("Agent Response Content: " + responseContent);

                return responseContent;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error invoking agent: {ex.Message}");
                return null;
            }
        }
    }

输出

代理响应内容:Amazon.BedrockAgentRuntime.Model.ResponseStream

我尝试过的:
我正在使用 Amazon Bedrock SDK 使用

InvokeAgentAsync
查询代理。我成功发送了请求并收到了回复。但是,当我尝试访问代理的响应时,我得到一个类型为
Amazon.BedrockAgentRuntime.Model.ResponseStream
的对象,而不是纯文本或可读输出。

这是我的代码的相关部分:

var agentResponse = await _client.InvokeAgentAsync(request);

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

// Attempting to retrieve response content
return agentResponse.Completion.ToString();

这会导致输出如下:

Agent Response Content: Amazon.BedrockAgentRuntime.Model.ResponseStream

我还检查了

agentResponse.Completion
,但找不到像
Text
Message
这样包含响应内容的属性。


我的期望:
我期望

agentResponse.Completion
有一个属性或方法,以纯文本形式返回代理的响应(例如,
Text
Message
)。或者,如果涉及
ResponseStream
,我期望有文档或明确的方法来处理它并提取文本内容。

c# json stream aws-sdk amazon-bedrock
1个回答
0
投票

在 C# 中,我们需要使用强类型 POCO / DTO 对象序列化/反序列化响应对象,并获取响应中的所有属性。 https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html 在链接中,您将找到一个 python 示例,其中显示了直接 json 输出,该输出在 .net、java 中的工作方式不同。因此,您创建 POCO 类并序列化它以发出请求,反之亦然,同时反序列化响应。 示例请求类。

    public class BedrockAgentRequest
{
    public string MessageVersion { get; set; }
    public Agent Agent { get; set; }
    public string InputText { get; set; }
    public string SessionId { get; set; }
    public string ActionGroup { get; set; }
    public string Function { get; set; }
    public List<Parameter> Parameters { get; set; }
    public Dictionary<string, string> SessionAttributes { get; set; }
    public Dictionary<string, string> PromptSessionAttributes { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.