Praca z uzupełnianiami tekstu w usłudze Azure OpenAI
Modele GPT-35-Turbo i GPT-4 to modele językowe zoptymalizowane pod kątem interfejsów konwersacyjnych. Modele zachowują się inaczej niż starsze modele GPT-3. Poprzednie modele były tekstem i tekstem, co oznacza, że zaakceptowały ciąg monitu i zwróciły ukończenie, aby dołączyć do monitu, jak już wiesz.
Jednak modele GPT-35-Turbo i GPT-4 to konwersacja i komunikat-out. Modele oczekują danych wejściowych sformatowanych w określonym formacie transkrypcji podobnej do czatu i zwracają uzupełnianie reprezentujące wiadomość napisaną przez model w czacie.
GPT-35-Turbo i GPT-4 mogą nadal akceptować i generować uzupełnianie tekstu, ale gdzie świecą z czatem.
W usłudze Azure OpenAI istnieją dwie różne opcje interakcji z modelami tego typu:
- Interfejs API uzupełniania czatu.
- Interfejs API uzupełniania za pomocą języka znaczników czatu (ChatML).
Interfejs API uzupełniania czatów to nowy dedykowany interfejs API umożliwiający interakcję z modelami GPT-35-Turbo i GPT-4 i będziemy go używać w tym miejscu.
Opis ról interfejsu API uzupełniania czatu
OpenAI wytrenował modele GPT-35-Turbo i GPT-4 w celu akceptowania danych wejściowych sformatowanych jako konwersacja. Każde dane wejściowe lub monit wysyłane do modelu i każda odpowiedź zwrócona przez model jest dodawana do ogólnej konwersacji w interfejsie API uzupełniania czatu.
Interfejs API uzupełniania czatu odnosi się do przychodzących monitów i odpowiedzi wychodzących jako komunikatów.
Model akceptuje tablicę obiektów komunikatów z konwersacją zorganizowaną według ról. Istnieją trzy typy ról: System, Użytkownik i Asystent.
Rola systemowa
Rola systemu znana również jako komunikat systemowy jest uwzględniana na początku tablicy. Ten komunikat zawiera początkowe instrukcje dotyczące modelu. Możesz podać różne informacje w roli systemu, w tym:
- Krótki opis asystenta
- Cechy osobowości asystenta
- Instrukcje lub reguły, które mają być przestrzegane przez asystenta
- Dane lub informacje potrzebne dla modelu, takie jak istotne pytania z często zadawanych pytań
Rolę systemu można dostosować dla danego przypadku użycia lub po prostu dołączyć podstawowe instrukcje. Rola/komunikat systemu jest opcjonalny, ale zaleca się uwzględnienie co najmniej podstawowego, aby uzyskać najlepsze wyniki.
Role użytkownika i asystenta
Konwersacja odbywa się między użytkownikiem a asystentem. Użytkownik jest osobą wprowadzającą monity i wchodzącą w interakcję z modelem. Odpowiedzi z modelu są reprezentowane przez rolę systemu.
Komunikat, który użytkownik wysyła do modelu, powinien postępować zgodnie z najlepszymi rozwiązaniami dotyczącymi projektowania monitów w celu uzyskania odpowiedzi o najwyższej jakości.
Przykłady monitów o komunikat
Oto kilka przykładów różnych stylów monitów, których można użyć z modelami GPT-35-Turbo i GPT-4. Przykłady są tylko punktem wyjścia i można eksperymentować z różnymi monitami, aby dostosować zachowanie.
Przykład podstawowy
Jeśli chcesz, aby model GPT-35-Turbo zachowywał się podobnie do chat.openai.com, możesz użyć podstawowego komunikatu systemowego, takiego jak "Asystent jest dużym modelem językowym wyszkolonym przez openAI".
Dowiesz się, jak używać zestawu .NET SDK interfejsu API uzupełniania czatu w następnej lekcji, na razie będziemy trzymać się nazw zmiennych jako przykładu.
string systemMessage = "Assistant is a large language model trained by OpenAI";
string userMessage = "Who were the founders of Microsoft?";
Przykład z instrukcjami
W przypadku niektórych scenariuszy możesz podać dodatkowe instrukcje dotyczące modelu w celu zdefiniowania barier zabezpieczających dla tego, co może zrobić model.
string systemMessage = """
Assistant is an intelligent chatbot designed to help users answer their tax related questions.
Instructions:
- Only answer questions related to taxes.
- If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information.
""";
string userMessage = "When are my taxes due?";
Zarządzanie konwersacjami
Model nie ma pamięci, więc potrzebuje zaktualizowanej transkrypcji z każdym nowym pytaniem ze wszystkimi pytaniami i odpowiedziami w przeciwnym razie utraci kontekst.
Oznacza to, że musisz wysłać całą, zaktualizowaną konwersację do modelu za każdym razem, gdy wchodzisz z nim w interakcję, a następnie można łatwo osiągnąć limit tokenów dla każdego modelu.
Limit tokenu dla gpt-35-turbo
to 4096 tokenów, natomiast limity tokenów dla gpt-4
i gpt-4-32k
są odpowiednio 8192 i 32768. Musisz pozostać w granicach tych limitów. W przeciwnym razie zostanie wyświetlony błąd.
Możesz śledzić liczbę tokenów i usuwać najstarsze komunikaty z tablicy wysłanej do modelu. Najlepiej zawsze przechowywać komunikat systemowy i usuwać tylko komunikaty asystenta lub użytkownika. Jednak wraz z upływem czasu ta metoda zarządzania konwersacją może spowodować obniżenie jakości konwersacji, ponieważ kontekst wcześniejszych części konwersacji zostanie utracony.
Alternatywnie po osiągnięciu limitu tokenu możesz poprosić użytkownika o rozpoczęcie nowej konwersacji.