Почему мой асинхронный API для CallApiAsync возвращает пустой ответ из метода выбораC#

Место общения программистов C#
Ответить
Anonymous
 Почему мой асинхронный API для CallApiAsync возвращает пустой ответ из метода выбора

Сообщение Anonymous »

Мне нужно обработать пакет видеоэлементов, отформатировать их и вызвать асинхронный API, чтобы получить дополнительные данные в формате YAML. Однако я столкнулся с проблемой, когда ответы API в основном пусты, несмотря на успешное выполнение задач. Ниже приведен соответствующий код.

Код: Выделить всё

var fetchTasks = videos.Select(async item =>
{
try
{
var formattedItem = new VideoItem
{
Title = item.Title,
Subtitle = _extractService.GetCleanSubtitle(item.Subtitle ?? ""),
Description = _extractService.GetCleanSubtitle(item.Description ?? ""),
};

if (string.IsNullOrEmpty(formattedItem.Subtitle) && string.IsNullOrEmpty(formattedItem.Description))
{
_logger.LogWarning($"Video {item.Id} has empty subtitle or description. Marking as not processed.");
item.NotProcess = true;
return new { item, processStatus = true, request = string.Empty, response = (string)null };
}
else
{
var builder = new RequestBuilder(formattedItem).WithYamlFormatPath(yamlPath);
var yamlRequest = builder.Build();

_logger.LogInformation($"Built YAML request: {yamlRequest}");

var response = await _apiService.CallApiAsync(yamlRequest);

_logger.LogInformation($"Response for video {item.Id}: {response}");

return new { item, processStatus = true, request = yamlRequest, response };
}
}
catch (Exception ex)
{
_logger.LogError($"Error fetching details for video {item.Id}: {ex.Message}");
return null;
}
});

var fetchedDetails = (await Task.WhenAll(fetchTasks)).Where(result => result != null);
Метод CallApiAsync

Код: Выделить всё

public async Task CallApiAsync(string response)
{
try
{
var completionResult = await _openAiService.ChatCompletion.CreateCompletion(new ChatCompletionCreateRequest
{
Messages = new List
{
ChatMessage.FromSystem("You are a helpful assistant."),
ChatMessage.FromUser(response)
},
Model = Models.Gpt_3_5_Turbo,
});
if (completionResult.Successful)
{
Console.WriteLine(completionResult.Choices.First().Message.Content);
return completionResult.Choices.First().Message.Content;
}
return "";
}
catch (Exception ex)
{
// Log or handle exception as neede
Console.WriteLine($"Error calling ChatGPT API: {ex.Message}");
throw;
}
}
После выполнения задачи обработать ответ.

Код: Выделить всё

foreach (var item in fetchedDetails)
{
var video = item.video;
var request = item.request;
var response = item.response;
var dbResponse = new Response
{
Request = request,
YtVideoId = item .Id,
Response = response
};
}
Здесь при сохранении ответа в базе данных я часто получаю item.response в виде пустой строки ().
Изображение

Когда я ставлю точку останова и отлаживаю ее в локальной среде, она работает нормально, но не после развертывания.
Похоже, что вызов API был запущен, но не ожидается. правильно внутри партии. Кажется, что задачи выполняются без ожидания ответа от CallApiAsync.
Как я могу реорганизовать этот код, чтобы дождаться внешнего вызова API, чтобы правильно получить ответ и обработать его в параллельно?

Подробнее здесь: https://stackoverflow.com/questions/786 ... om-the-sel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»