.NET 7 整合OpenAI ChatGPT與Web API
目錄
整合 .NET 應用程式與 Open AI
在本教程中,我們將介紹如何將您的.NET應用程式與Open AI整合,以獲取資料完成和聊天的功能。我們將使用Open AI提供的功能來補全句子並回答問題。這將使您的應用程式能夠更智能地回應用戶的輸入。
安裝 NuGet 套件
首先,我們需要安裝一些NuGet套件來整合我們的應用程式與Open AI。打開您的終端機並導航到您想要創建應用程式的位置,然後運行以下命令:
dotnet new webapi -n OpenAIDemo
cd OpenAIDemo
dotnet add package OpenAI
這將創建一個名為OpenAIDemo的新Web API專案並添加所需的NuGet套件。
取得 Open AI API 金鑰
在我們繼續操作之前,我們需要從Open AI網站上取得我們的API金鑰。請訪問Open AI網站並登錄您的帳戶。在個人設定中,您將找到一個名為「View API Keys」的選項,點擊它並創建一個新的API金鑰。
將此金鑰複製並返回到您的應用程式代碼中。在appsettings.json
文件中創建一個新的節,名為OpenAI
,並將API金鑰添加到該節中:
{
"OpenAI": {
"Key": "YOUR_API_KEY"
}
}
請確保將YOUR_API_KEY
替換為您從Open AI網站獲得的實際API金鑰。
建立 Open AI 服務
接下來,我們將建立一個Open AI服務來處理與Open AI的通信。在專案的根目錄中創建一個名為Services
的新文件夾。在該文件夾中創建一個IOpenAIService.cs
接口,並添加以下代碼:
using System.Threading.Tasks;
namespace OpenAIDemo.Services
{
public interface IOpenAIService
{
Task<string> CompleteText(string text);
Task<string> AdvanceCompleteText(string text, string model);
Task<string> ChatWithAI(string text, string language);
}
}
此接口定義了三個用於與Open AI進行通信的方法:CompleteText
、AdvanceCompleteText
和ChatWithAI
。
接下來,在Services
文件夾中創建一個名為OpenAIService.cs
的新類,並實現IOpenAIService
接口。請將以下代碼添加到類中:
using Microsoft.Extensions.Configuration;
using OpenAI;
namespace OpenAIDemo.Services
{
public class OpenAIService : IOpenAIService
{
private readonly IConfiguration _configuration;
private readonly OpenAIApi _api;
public OpenAIService(IConfiguration configuration)
{
_configuration = configuration;
_api = new OpenAIApi(_configuration["OpenAI:Key"]);
}
public async Task<string> CompleteText(string text)
{
var completions = await _api.Completions.CreateCompletionAsync(
model: "text-davinci-001",
prompt: text,
maxTokens: 100
);
return completions.Choices[0].Text;
}
public async Task<string> AdvanceCompleteText(string text, string model)
{
var completions = await _api.Completions.CreateCompletionAsync(
model: model,
prompt: text,
maxTokens: 100
);
return completions.Choices[0].Text;
}
public async Task<string> ChatWithAI(string text, string language)
{
var chat = await _api.Chat.CreateConversationAsync();
chat.Messages.Add(new Message { Role = "system", Content = "You are a teacher who helps new programmers understand if a programming language is valid or not.You will only respond with yes or no." });
chat.Messages.Add(new Message { Role = "user", Content = text });
var response = await _api.Chat.GetChatCompletionResponseAsync(chat.ConversationId, language);
return response.GetReplyFromUser();
}
}
}
在這個服務類中,我們使用了OpenAIApi
類來進行與Open AI的通信。首先,我們在構造函數中初始化了OpenAIApi
並傳遞了我們在appsettings.json
中設置的API金鑰。
然後,我們實現了三個方法來處理不同的Open AI功能。CompleteText
方法用於資料完成,AdvanceCompleteText
方法用於高級資料完成,ChatWithAI
方法用於聊天。
進行資料完成
現在,我們可以創建一個控制器來處理與Open AI的通信。在Controllers
文件夾中創建一個名為OpenAIController.cs
的新控制器,並添加以下代碼:
using Microsoft.AspNetCore.Mvc;
using OpenAIDemo.Services;
using System.Threading.Tasks;
namespace OpenAIDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class OpenAIController : ControllerBase
{
private readonly IOpenAIService _openAIService;
public OpenAIController(IOpenAIService openAIService)
{
_openAIService = openAIService;
}
[HttpPost("complete")]
public async Task<IActionResult> CompleteText(string text)
{
var completion = await _openAIService.CompleteText(text);
return Ok(completion);
}
[HttpPost("advance-complete")]
public async Task<IActionResult> AdvanceCompleteText(string text, string model)
{
var completion = await _openAIService.AdvanceCompleteText(text, model);
return Ok(completion);
}
}
}
這個控制器定義了兩個動作,CompleteText
和AdvanceCompleteText
,用於處理資料完成的請求。我們注入了之前創建的IOpenAIService
服務,以便在控制器中使用它。
現在我們已經完成了Open AI的整合。您可以運行您的應用程式並使用/api/OpenAI/complete
和/api/OpenAI/advance-complete
端點來傳遞您的資料完成請求。
設定聊天功能
要設置聊天功能,我們需要在OpenAIService.cs
文件中添加一些代碼。在OpenAIService
類中,請添加以下代碼:
public async Task<STRING> ChatWithAI(string text, string language)
{
var chat = await _api.Chat.CreateConversationAsync();
chat.Messages.Add(new Message { Role = "system", Content = "You are a teacher who helps new programmers understand if a programming language is valid or not. You will only respond with yes or no." });
chat.Messages.Add(new Message { Role = "user", Content = text });
var response = await _api.Chat.GetChatCompletionResponseAsync(chat.ConversationId, language);
return response.GetReplyFromUser();
}
這個方法允許我們與Open AI進行聊天。我們創建了一個對話,然後向其中添加了兩個消息:一個系統消息和一個用戶消息。系統消息告訴AI我們只會回答yes或no的問題,並且我們希望它幫助我們判斷一種程式語言是否有效。然後,我們將用戶的輸入添加到對話中,並通過GetChatCompletionResponseAsync
方法獲取AI的回答。
完成了上述步驟後,我們可以在我們的控制器中添加一個新的動作,以處理聊天請求。在OpenAIController.cs
文件中添加以下代碼:
[HttpPost("chat")]
public async Task<IActionResult> ChatWithAI(string text, string language)
{
var response = await _openAIService.ChatWithAI(text, language);
return Ok(response);
}
這個新的動作將使用我們剛剛添加的IOpenAIService
服務中的ChatWithAI
方法。
現在,您可以運行您的應用程式並使用/api/OpenAI/chat
端點來與Open AI進行聊天。
常見問題解答
問:我應該如何獲取Open AI API金鑰?
答:您可以在Open AI網站上創建一個帳戶並生成API金鑰。
問:我能否自定義資料完成的模型?
答:是的,您可以在高級資料完成功能中指定不同的模型。
問:聊天服務只能回答yes或no的問題嗎?
答:是的,這個聊天功能的目的是回答一些特定的問題,並限制回答僅為yes或no。
問:我可以將資料完成和聊天功能整合到我的應用程式中嗎?
答:是的,您可以在您的應用程式中同時使用資料完成和聊天功能。
問:我可以使用中文進行資料完成和聊天嗎?
答:是的,Open AI支持多種語言,包括中文。您可以在API請求中指定要使用的語言。
希望這個教程對於整合Open AI到您的.NET應用程式中有所幫助。如果您有任何疑問,請隨時向我們提問。謝謝!