[C#] ChatGPT ์ฑํ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
ํด๋น ๊ฒ์๊ธ์ ์๋ ๊ฐ๋ฐํ๊ฒฝ์ ์ฌ์ฉํ์ฌ ์์ฑ๋จ
IDE : VisualStudio 2022
Framework : .NET 7.0
Laguage : C# 11
1. OpenAI API Key ๋ฐ๊ธ
- OpenAI API Key ๋ฐ๊ธ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์๊ธ์ ์ฐธ๊ณ
[Python] ChatGPT #1 OpenAI API Key ๋ฐ๊ธ
ChatGPT ChatGPT๋ ๋ฏธ๊ตญ์ AI ์ฐ๊ตฌ์ฌ๋จ OpenAI๊ฐ 2022๋ 11์ ๊ณต๊ฐํ ์ด๊ฑฐ๋ ์ธ์ด ๋ชจ๋ธ GPT-3.5 ๊ธฐ๋ฐ ๋ํํ ์ธ๊ณต์ง๋ฅ ์ฑ๋ด์ด๋ค. GPT๋ "Generative Pre-trained Transformer'์ ์ฝ์ด์ด๋ฉฐ ๋จธ์ ๋ฌ๋์ผ๋ก ๋ฐฉ๋ํ ๋ฐ์ดํฐ๋ฅผ
ssvip.tistory.com
2. Betalgo.OpenAI.GPT3 ์ค์น
- ํ๋ก์ ํธ ์ฐํด๋ฆญ ํ, Nuget ํจํค์ง ๊ด๋ฆฌ ํด๋ฆญ
- Betalgo.OpenAI.GPT3 ์ค์น
3. ์์ค์ฝ๋
- ์ค์น๋ Betalgo.OpenAI.GPT3 ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฐฉ์์ ChatGPT ์ฑํ ํ๋ก๊ทธ๋จ ์์ค์ฝ๋๋ฅผ ๊ตฌํํ๋ค.
3.1 Using๋ฌธ ์ถ๊ฐ
- Betalgo.OpenAI.GPT3์ ์ ์๋์ด์๋ 4๊ฐ์ namespace๋ฅผ ์ถ๊ฐ
/*ChatGPT ์ถ๊ฐ*/
using OpenAI.GPT3;
using OpenAI.GPT3.Managers;
using OpenAI.GPT3.ObjectModels;
using OpenAI.GPT3.ObjectModels.RequestModels;
3.2 ๋น๋๊ธฐ Request ๋ฉ์๋ ์ ์
- ChatGPT์ ๋น๋๊ธฐ๋ก ํต์ ํ๋ Request ๋ฉ์๋ ์ ์
- ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ์ prompt ๊ฐ์ ChatGPT์ ์์ฒญ ๋ฐ string ํํ๋ก ๋ฆฌํด
private async Task<string> RequestGPT(string prompt)
{
string result = "";
var gpt3 = new OpenAIService(new OpenAiOptions()
{
ApiKey = OPENAI_API_KEY
});
var completionResult = await gpt3.Completions.CreateCompletion(new CompletionCreateRequest()
{
Prompt = prompt,
Model = Models.TextDavinciV3, //๋ชจ๋ธ๋ช
. GPTํํ
๋ฌผ์ด๋ณด๋ ๋ค๋น์นV3์ด ๊ฐ์ฅ ์ข์ ๋ฒ์ ผ์ด๋ผ๊ณ ํ์. ํ์ง๋ง.. GPT 3.5 tubo๊ฐ ๋ ๋์๋ค๊ณ ํจ
Temperature = 0.5F, //๋๋ต์ ์์ ๋(๋ค์์ฑ - Diversity)). ์์ ๋๊ฐ ๋ฎ์ผ๋ฉด ๊ฐ์ ๋๋ต, ๋์ผ๋ฉด ์ข ์๋ฌด๋ง?
MaxTokens = 1000, //์ด๊ฒ ๊ธธ์๋ก ๊ธ์๊ฐ ๋ง์์ง. ์งง์ ๋ต์ฅ์ ์๊ด์์ผ๋ ์ด๊ฒ 100,200์ผ๋ก ์งง์ผ๋ฉด ๋ง์ ์งค๋ผ๋ฒ๋ฆผ (์๊ฐ์ ์ฝ์ด ์๊ฑฐ๋ ์ธ๋ค์ผ์์ผ๋ก ํ์ธ๋ง ํ ๋๋ ๋ฎ์ถ๋ฉด ์ข์ ๋ฏ. ์ถ๊ฐ๋ก ํ ํฐ์ 1๊ฐ ๋จ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ฐ, ์ ํํ๊ฒ 1๊ฐ ๋จ์ด๋ ์๋ (1๊ฐ ๋จ์ด๊ฐ ๋ ์๋ ์๊ณ ๊ธด๋จ์ด๋ 2๊ฐ ๋จ์ด๊ฐ ๋ ์ ์์. GPT ๊ฒ์์ ๋จ์๊ฐ๋๋ค๊ณ ํจ. ์ด ํ ํฐ ๋จ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํธ๋ํฝ์ด ๋งค๊ฒจ์ง๊ณ , (์ ๋ฃ์ธ๊ฒฝ์ฐ) ๊ณผ๊ธ ์ฑ
์ ์ด ๋จ)
N = 1 //๊ฒฝ์ฐ์ ์(๋๋ต์ ์). N=3์ผ๋ก ํ๋ฉด 3๋ฒ ๋ค๋ฅธ ํ์ ์ ๋ฐฐ์ด์ ๋ด์์ค
});
if (completionResult.Successful)
{
foreach (var choice in completionResult.Choices)
{
result = choice.Text.Replace("\n", "");
}
}
else
{
if (completionResult.Error == null)
{
throw new Exception("Unknown Error");
}
}
return result;
}
3.3 RequestGPT() ๋ฉ์๋ ํธ์ถ ์ด๋ฒคํธ
- Button Click ์ด๋ฒคํธ์ RequestGPT()๋ฅผ ํธ์ถํ๋ ์ฝ๋ ์์ฑ
- C#์ ๋น๋๊ธฐ์ ๋ํ ์ค๋ช ์ ํด๋น ๊ฒ์๊ธ ์ฐธ๊ณ
- ์ง๋ฌธ์ Color.Blue, ์๋ต์ Color.Red๋ก ํ ์คํธ ํ์
private async void btnSendMessage_Click(object sender, EventArgs e)
{
try
{
string prompt = txtMessage.Text.Trim(); // ์ง๋ฌธ
richTxtResult.SelectionFont = new(richTxtResult.Font, FontStyle.Bold);
richTxtResult.SelectionColor = Color.Blue;
richTxtResult.AppendText("Q : " + prompt + "\n");
txtMessage.Text = "";
var task1 = Task<string>.Run(() => RequestGPT(prompt)); // ChatCPT์ ์์ฒญ
string result = await task1;
richTxtResult.SelectionFont = new(richTxtResult.Font, FontStyle.Bold);
richTxtResult.SelectionColor = Color.Red;
richTxtResult.AppendText("GPT : " + result + "\n");
}
catch(Exception ex)
{
richTxtResult.AppendText(ex.ToString());
}
}
3.4 ChatGPT - ์ง๋ฌธํ๊ธฐ
- ChatGPT์ ์ง์๋ฅผ ์์ฑํ๋ค.
- ์ง๋ฌธ : ์ธ๊ฐ์ด ํ์ฑ์ ์ ์ฐฉํ๋ค๋ฉด ๊ฑด์ถ๋ฌผ์ ๋ชจ์ต์ ์ด๋ค ๋ชจ์ต์ผ์ง ์์ ๋กญ๊ฒ ์์ํด์ ์ธํ์ ๋ฌ์ฌํด์ฃผ์ธ์.
3.5 ์ ์ฒด ์์ค์ฝ๋
- ์ ์ฒด ์์ค์ฝ๋๋ ์๋์ ๊ฐ์
/*ChatGPT ์ถ๊ฐ*/
using Microsoft.Extensions.Configuration;
using OpenAI.GPT3;
using OpenAI.GPT3.Managers;
using OpenAI.GPT3.ObjectModels;
using OpenAI.GPT3.ObjectModels.RequestModels;
using System.Windows.Forms;
namespace ChatGPT_DOTNET
{
public partial class ChatGPT : Form
{
private string OPENAI_API_KEY = ""; // OpenAI API Key
/// <summary>
/// ์์ฑ์
/// </summary>
public ChatGPT()
{
InitializeComponent();
OPENAI_API_KEY = "OpenAI API Key ์
๋ ฅ";
}
/// <summary>
/// ํผ ๋ก๋ ์ด๋ฒคํธ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChatGPT_Load(object sender, EventArgs e)
{ }
/// <summary>
/// ์ ์ก ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnSendMessage_Click(object sender, EventArgs e)
{
try
{
string prompt = txtMessage.Text.Trim();
richTxtResult.SelectionFont = new(richTxtResult.Font, FontStyle.Bold);
richTxtResult.SelectionColor = Color.Blue;
richTxtResult.AppendText("Q : " + prompt + "\n");
txtMessage.Text = "";
var task1 = Task<string>.Run(() => RequestGPT(prompt)); // ChatCPT์ ์์ฒญ
string result = await task1;
richTxtResult.SelectionFont = new(richTxtResult.Font, FontStyle.Bold);
richTxtResult.SelectionColor = Color.Red;
richTxtResult.AppendText("GPT : " + result + "\n");
}
catch(Exception ex)
{
richTxtResult.AppendText(ex.ToString());
}
}
/// <summary>
/// ChatGPT Request ๋ฉ์๋
/// </summary>
/// <param name="prompt"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
private async Task<string> RequestGPT(string prompt)
{
string result = "";
var gpt3 = new OpenAIService(new OpenAiOptions()
{
ApiKey = OPENAI_API_KEY
});
var completionResult = await gpt3.Completions.CreateCompletion(new CompletionCreateRequest()
{
Prompt = prompt,
Model = Models.TextDavinciV3, //๋ชจ๋ธ๋ช
. GPTํํ
๋ฌผ์ด๋ณด๋ ๋ค๋น์นV3์ด ๊ฐ์ฅ ์ข์ ๋ฒ์ ผ์ด๋ผ๊ณ ํ์. ํ์ง๋ง.. GPT 3.5 tubo๊ฐ ๋ ๋์๋ค๊ณ ํจ
Temperature = 0.5F, //๋๋ต์ ์์ ๋(๋ค์์ฑ - Diversity)). ์์ ๋๊ฐ ๋ฎ์ผ๋ฉด ๊ฐ์ ๋๋ต, ๋์ผ๋ฉด ์ข ์๋ฌด๋ง?
MaxTokens = 1000, //์ด๊ฒ ๊ธธ์๋ก ๊ธ์๊ฐ ๋ง์์ง. ์งง์ ๋ต์ฅ์ ์๊ด์์ผ๋ ์ด๊ฒ 100,200์ผ๋ก ์งง์ผ๋ฉด ๋ง์ ์งค๋ผ๋ฒ๋ฆผ (์๊ฐ์ ์ฝ์ด ์๊ฑฐ๋ ์ธ๋ค์ผ์์ผ๋ก ํ์ธ๋ง ํ ๋๋ ๋ฎ์ถ๋ฉด ์ข์ ๋ฏ. ์ถ๊ฐ๋ก ํ ํฐ์ 1๊ฐ ๋จ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ฐ, ์ ํํ๊ฒ 1๊ฐ ๋จ์ด๋ ์๋ (1๊ฐ ๋จ์ด๊ฐ ๋ ์๋ ์๊ณ ๊ธด๋จ์ด๋ 2๊ฐ ๋จ์ด๊ฐ ๋ ์ ์์. GPT ๊ฒ์์ ๋จ์๊ฐ๋๋ค๊ณ ํจ. ์ด ํ ํฐ ๋จ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํธ๋ํฝ์ด ๋งค๊ฒจ์ง๊ณ , (์ ๋ฃ์ธ๊ฒฝ์ฐ) ๊ณผ๊ธ ์ฑ
์ ์ด ๋จ)
N = 1 //๊ฒฝ์ฐ์ ์(๋๋ต์ ์). N=3์ผ๋ก ํ๋ฉด 3๋ฒ ๋ค๋ฅธ ํ์ ์ ๋ฐฐ์ด์ ๋ด์์ค
});
if (completionResult.Successful)
{
foreach (var choice in completionResult.Choices)
{
result = choice.Text.Replace("\n", "");
}
}
else
{
if (completionResult.Error == null)
{
throw new Exception("Unknown Error");
}
}
return result;
}
private void txtMessage_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnSendMessage.PerformClick();
}
}
}
}
[C#][Chat GPT] Chat GPT API๋ฅผ ์ด์ฉํ ๊ฐ๋จ ์ฑํ ํ๋ก๊ทธ๋จ ๊ตฌํ
๋ด์ค์์ Chat GPT API๊ฐ ๊ณต๊ฐ๋์๋ค๋ ์์์ ๋ฃ๊ณ Chat GPT๋ก ์ฑํ ํ๋ก๊ทธ๋จ์ ๊ตฌํํด๋ณด์์ต๋๋ค (์์ ์ ์ฝ๋ ํ์ด๋ผ์ดํธ? ํ๋ ๋ฐฉ๋ฒ ์์๋๋ฐ.. ์ด๊ฒ๋ ๊น๋จน์๋ค์. ์ฌ๋ก์๋ฐ ๋ฏธ์ํด) # ์ฐธ๊ณ ์ฌํญ 1
topnanis.tistory.com