当前实施情况
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# 中,我们需要使用强类型 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; }
}