我试图返回流结果从azure openai API,任何人都可以告诉,如果最后一行在下面的方法将返回完整的内容,或将错过的内容没有收到的api。.另外,这是从Azure OpenAI SDK流API返回流的正确方法吗?
public async Task<Stream> GetStreamResponse(CompletionsRequest rawAzureOpenAIRequest)
{
rawAzureOpenAIRequest = new CompletionsRequest();
rawAzureOpenAIRequest.ModelToUse = DefaultTextModelToUse;
CompletionsOptions optns = new CompletionsOptions();
optns.Prompts.Add("below is the summary of technical consultant role in software");
var azResponse = await _openAIRepository
.GetRawCompletionStreamingResponse(rawAzureOpenAIRequest.ModelToUse, optns,
canToken);
return azResponse.GetRawResponse().ContentStream;
}
下面是azure的方法描述,但我不清楚“对于没有内容的响应返回null”在这里是什么意思。是指还没取的内容吗?
我发现了另一种使用azure openai API产生返回的方法,但它是批量产生的,并且没有按预期工作。
public async IAsyncEnumerable<string> GetStreamResponse(CompletionsRequest rawAzureOpenAIRequest)
{
rawAzureOpenAIRequest = new CompletionsRequest();
rawAzureOpenAIRequest.ModelToUse = DefaultTextModelToUse;
CompletionsOptions optns = new CompletionsOptions();
optns.Prompts.Add("below is the summary of technical consultant role in software");
var azResponse = await _openAIRepository.GetStreamingResponse(rawAzureOpenAIRequest.ModelToUse, optns,
canToken);
await foreach (var choice in azResponse.Value.GetChoicesStreaming())
{
await foreach (var message in choice.GetTextStreaming())
{
yield return message;
}
}
}
我尝试创建一个消费API,它似乎返回结果,但我认为我可能会使用方法1丢失一些数据。
1条答案
按热度按时间jyztefdp1#
azResponse.GetRawResponse().ContentStream;
将返回从Azure OpenAI API获得的流。ContentStream property
对于没有内容的响应返回null。在Azure OpenAI SDK的上下文中,如果API响应没有任何要返回的内容,则ContentStream属性将为null。它不引用尚未获取的内容。
处理ContentStream为null的情况的C#代码。
IAsyncEnumerable
的第二种方法,它以批处理的方式给出结果,并在消息可用时返回每个消息。有关详细信息,请参阅azure-sdk-for-net/ResponseSamples.cs at main- GitHub和Github Issue.