Невозможно удалить «Сервер внезапно закрыто (отсутствует close_notify)»C#

Место общения программистов C#
Ответить
Anonymous
 Невозможно удалить «Сервер внезапно закрыто (отсутствует close_notify)»

Сообщение Anonymous »

Следующее посвящено точной настройке Openai. Я хочу получить потоковой ответ. Для этого я не вижу, что могу использовать SDK Openai для точной настройки, поэтому я звоню в API вручную. Я использовал SendAsync, потому что почтасинк, похоже, не работает с потоковым ответом. В любом случае, я борюсь с «сервером внезапно закрыто (отсутствует close_notify)» после каждого ответа. < /P>
В любом случае потоковая передача работает хорошо.

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

[HttpPost("chat")]
public async Task Chat([FromBody] ChatRequest request)
{
Response.Headers.ContentType = "text/event-stream";

var httpClient = _httpFactory.CreateClient();

var _request = new HttpRequestMessage(HttpMethod.Post, "https://api.openai.com/v1/chat/completions");
_request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _config["OpenAI:ApiKey"]);
_request.Content = new StringContent(JsonSerializer.Serialize(new
{
model = request.Model,
messages = new[]
{
new { role = "user", content = request.Question }
},
stream = true
}), Encoding.UTF8, "application/json");

var response = await httpClient.SendAsync(_request, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();

using var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream);

while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
if (string.IsNullOrWhiteSpace(line) || !line.StartsWith("data:")) continue;

var jsonData = line["data: ".Length..];
if (jsonData == "[DONE]")
{
break;
}

var json = JsonDocument.Parse(jsonData);
var delta = json.RootElement
.GetProperty("choices")[0]
.GetProperty("delta")
.GetProperty("content")
.GetString();

if (!string.IsNullOrEmpty(delta))
{
var buffer = Encoding.UTF8.GetBytes(delta);
await Response.Body.WriteAsync(buffer, 0, buffer.Length);
await Response.Body.FlushAsync();
}
}

return new EmptyResult();
}
< /code>
Когда я скручиваюсь < /p>
curl -X POST https://localhost:7080/api/FineTune/chat -H "Content-Type: application/json" -d "{\"model\": \"ft:gpt-3.5-turbo-0125:personal::*****\", \"question\": \"*****\"}"
< /code>
Я получил отзыв < /p>
*****.curl: (56) schannel: server closed abruptly (missing close_notify)
< /code>
Я изо всех сил пытался удалить это уведомление. У кого -нибудь есть подсказка об этом?var choice = json.RootElement.GetProperty("choices")[0];

if (choice.TryGetProperty("delta", out var deltaElement) &&
deltaElement.TryGetProperty("content", out var contentElement))
{
var delta = contentElement.GetString();
if (!string.IsNullOrEmpty(delta))
{
var buffer = Encoding.UTF8.GetBytes(delta);
await Response.Body.WriteAsync(buffer, 0, buffer.Length);
await Response.Body.FlushAsync();
}
}
Причина, по которой openai иногда не имеет поля «контента».

Подробнее здесь: https://stackoverflow.com/questions/796 ... tification
Ответить

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

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

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

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

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