Paweł Łukasiewicz
2024-10-01
Paweł Łukasiewicz
2024-10-01
Udostępnij Udostępnij Kontakt
Wprowadzenie

Sporo teorii i wygenerowanych przykładów jest już za nami. Spróbujmy jednak wejść nieco głębiej w temat i zbudować prosty translator wykorzystując język C# oraz integrację z ChatGPT. Wykorzystamy udostępnione API i zobaczymy co uda nam się zbudować.

W ramach tego wpisu utworzymy prostą aplikację konsolową, która będzie tłumaczyła wprowadzony tekst na język hiszpański oraz angielski. Ten przykład będzie prosty ale pokaże ogólny zamysł używania ChatGPT we własnych aplikacjach.

Klucz API

Pierwszy krok to wygenerowanie klucza API. Możecie to zrobić przechodząc pod ten adres: https://platform.openai.com/account/api-keys (oczywiście po uprzednim zalogowaniu)

Pamiętajcie jedynie o skopiowaniu klucza i zapisaniu go w bezpiecznym miejscu, ponieważ nie będzie on dostępny do ponownego wyświetlenia. Jeżeli zgubicie do niego dostęp trzeba będzie wygenerować nowy klucz:

Aplikacja konsolowa

Tutaj bez żadnych niespodzianek. Tworzymy aplikację konsolową w oparciu o .NET 8.0. Po utworzeniu nowego projektu przejdziemy od razu do dodania wymaganej paczki, tj. OpenAI:

Przeglądając dokumentacje OpenAI dostępną pod tym adresem https://platform.openai.com/docs/quickstart?language-preference=javascript możemy znaleźć przykładowy kod integracyjny napisany w JavaScript oraz Pyhton. Jeżeli nie znamy żadnego z tych języków możemy posilić się samym ChatGPT i wygenerować poniższy kod w naszym ulubionym języku:

using OpenAI_API;
using OpenAI_API.Chat;

var client = new OpenAIAPI("your-api-key-here");

var chatRequest = new ChatRequest()
{
    Model = "gpt-4o-mini",
    Messages = new List
    {
        new ChatMessage(ChatMessageRole.System, "You are a helpful assistant."),
        new ChatMessage(ChatMessageRole.User, "Write a haiku about recursion in programming.")
    }
};

var completion = await client.Chat.CreateChatCompletionAsync(chatRequest);

Console.WriteLine(completion.Choices[0].Message.Content);

Powyższy kod umieszczamy w Program.cs i…możemy pochwalić się swoim pierwszym translatorem napisanym przy wykorzystaniu sztucznej inteligencji. "Jedyne" o czym należy pamiętać to wklejenie swojego klucza API.

Czemu "jedyne" napisałem w cudzysłowie? Bo osoby regularnie korzystające z ChatGPT doskonale wiedzą, że wygenerowany kod nie zawsze działa. W powyższym wypadku wszystko jest w porządku w starych wersjach paczki, np. 1.6.0. Jednakże w najnowszym wydaniu paczki (w momencie pisania artykułu: v2.0.0) możemy zobaczyć liczne błędy i niekompilujący się kod. Jako doświadczone osoby nie panikujemy, sprawdzamy oficjalną dokumentację i wszystko staje się jasne: https://github.com/openai/openai-dotnet

Nasz kod przyjmie nieco inną formę:

using OpenAI.Chat;

ChatClient client = new(model: "gpt-4o-mini", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY"));

ChatCompletion completion = client.CompleteChat("Przetłumacz to zdanie: ‘to tylko pierwszy test’ na angielski i hiszpański.");

Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}");

Na poniższym zrzucie ekranu możecie zobaczyć działającą aplikacje i tekst przetłumaczony na dwa języki, hiszpański i angielski:

Przed wykonaniem kodu warto jeszcze upewnić się z jakiego modelu korzystacie. Osoby korzystające z bezpłatnych planów nie mają dostępu do każdego modelu. Jeżeli spróbujecie wykorzystać ten, który nie jest w Waszym pakiecie, zostaniecie o tym poinformowani:

Jeżeli jeszcze będziecie mieli problemy z wywołaniem powyższego kodu warto spróbować przejść na płatny pakiet i doładować swoje konto w najniższej możliwej kwocie, tj. 5$. Wówczas nie powinno już być żadnych problemów niezależnie od wybranego modelu:

Żeby nasz kod wyglądał i działał nieco lepiej wprowadzimy jedną zmianę i pozwolimy użytkownikowi na wprowadzenie tekstu oraz wskazanie języków na które chce dokonać tłumaczenia. Przykładowa implementacja może wyglądać w poniższy sposób:

using OpenAI.Chat;

var model1 = "gpt-3.5-turbo";
var model2 = "gpt-4o";
var model3 = "gpt-4o-mini";

Console.WriteLine("Podaj tekst do przetłumaczenia: ");
string input = Console.ReadLine() + "\n";

Console.WriteLine("Podaj pierwszy język do tłumaczenia: ");
string lang1 = Console.ReadLine() + "\n";

Console.WriteLine("Podaj drugi język do tłumaczenia: ");
string lang2 = Console.ReadLine() + "\n";

ChatClient client = new(model: model1, apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY"));

ChatCompletion completion = client.CompleteChat($"Przetłumacz to zdanie: '${input}' na ${lang1} i ${lang2}.");

Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}");

Console.ReadKey();
A sam wynik działania przedstawia się następująco:

Podsumowanie

W tym krótkim wpisie chciałem pokazać jak w prosty sposób można wykorzystać ChatGPT w swoich aplikacjach. Dodatkowo przeglądaliśmy różne dokumentacje oraz skorzystaliśmy z pomocy AI w celu wykonania konwersji kodu napisanego w jednym języku na drugi. Nie obyło się bez problemów, ale wszystkie udało się rozwiązać – takie są codzienne uroki programowania.

Doceniasz moją pracę? Wesprzyj bloga 'kupując mi kawę'.

Jeżeli seria wpisów dotycząca ChatGPT była dla Ciebie pomocna, pozwoliła Ci rozwinąć obecne umiejętności lub dzięki niej nauczyłeś się czegoś nowego... będę wdzięczny za wsparcie w każdej postaci wraz z wiadomością, którą będę miał przyjemność przeczytać.

Z góry dziekuje za każde wsparcie - i pamiętajcie, wpisy były, są i będą za darmo!