C# Web API 使用 ChatGPT Completion for Chat Message 接口并通过 Stream 返回结果
以下是一个示例代码,可以实现在 C# 的 Web API 中使用 ChatGPT 的 Completion for the chat message 接口,并采用 Stream 返回给客户端:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
namespace ChatGPTWebAPI.Controllers
{
public class ChatController : ApiController
{
private const string ChatGPTUrl = 'https://api.openai.com/v1/completions';
[HttpPost]
public async Task<HttpResponseMessage> GenerateChatMessage()
{
try
{
var requestBody = await Request.Content.ReadAsByteArrayAsync();
var responseStream = await CallChatGPTWebAPI(requestBody);
var result = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
result.Content = new StreamContent(responseStream);
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue('application/octet-stream');
return result;
}
catch (Exception ex)
{
return Request.CreateErrorResponse(System.Net.HttpStatusCode.InternalServerError, ex);
}
}
private async Task<Stream> CallChatGPTWebAPI(byte[] requestBody)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue('Bearer', 'YOUR_API_KEY');
var content = new ByteArrayContent(requestBody);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue('application/json');
var response = await client.PostAsync(ChatGPTUrl, content);
return await response.Content.ReadAsStreamAsync();
}
}
}
}
在这个示例代码中,我们定义了一个名为 ChatController 的 Web API 控制器,并在其中实现了一个名为 GenerateChatMessage 的 POST 方法。该方法接受客户端发送的请求数据,将其转发到 ChatGPT 的 Completion for the chat message 接口,然后将返回的 Stream 作为响应数据返回给客户端。
在 CallChatGPTWebAPI 方法中,我们使用 HttpClient 发送 POST 请求到 ChatGPT 的 Completion for the chat message 接口,并在请求头中添加了 API Key。请求体中包含客户端发送的聊天消息。接着,我们通过异步方式读取响应内容,并返回响应的 Stream 对象。
在 GenerateChatMessage 方法中,我们首先读取客户端发送的请求数据,然后调用 CallChatGPTWebAPI 方法发送请求,并获取响应的 Stream。最后,我们将响应的 Stream 对象作为响应数据返回给客户端。
值得注意的是,在 GenerateChatMessage 方法中,我们使用 StreamContent 类来创建响应的 Content 对象,并设置其 ContentType 为 application/octet-stream。这样可以确保响应数据正确传输。
原文地址: https://www.cveoy.top/t/topic/l6IP 著作权归作者所有。请勿转载和采集!