- Artykuł
Modele ChatGPT 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 umożliwiały wprowadzanie i wyprowadzanie tekstu, co oznaczało, że akceptowały ciąg monitu i zwracały uzupełnienie w celu dołączenia do monitu. Jednak modele ChatGPT i GPT-4 obsługują konwersację przychodzącą i wychodzącą. Modele oczekują danych wejściowych sformatowanych w określonym formacie transkrypcji przypominającym czat i zwracają uzupełnienie, które reprezentuje wiadomość napisaną przez model na czacie. Chociaż ten format został zaprojektowany specjalnie do rozmów wieloturowych, przekonasz się, że może on również dobrze działać w scenariuszach innych niż czat.
W Azure OpenAI istnieją dwie różne opcje interakcji z tego typu modelami:
- Interfejs API zakończenia czatu.
- Uzupełniający interfejs API z językiem znaczników czatu (ChatML).
Chat Completion API to nowy dedykowany interfejs API do interakcji z modelami ChatGPT i GPT-4. Ten interfejs API jest preferowaną metodą uzyskiwania dostępu do tych modeli.Jest to również jedyny sposób na dostęp do nowych modeli GPT-4.
ChatML używa tego samegoAPI zakończeniaktórego używasz w innych modelach, takich jak text-davinci-002, wymaga unikalnego formatu zachęty opartego na tokenie, znanego jako Chat Markup Language (ChatML). Zapewnia to niższy poziom dostępu niż dedykowany interfejs Chat Completion API, ale wymaga również dodatkowej weryfikacji danych wejściowych, obsługuje tylko modele ChatGPT (gpt-35-turbo) orazformat bazowy z większym prawdopodobieństwem zmieni się w czasie.
Ten artykuł przeprowadzi Cię przez proces rozpoczynania pracy z nowymi modelami ChatGPT i GPT-4. Ważne jest, aby używać opisanych tutaj technik, aby uzyskać najlepsze wyniki. Jeśli spróbujesz wchodzić w interakcje z modelami w taki sam sposób, jak ze starszą serią modeli, modele często będą rozwlekłe i dostarczają mniej użytecznych odpowiedzi.
Praca z modelami ChatGPT i GPT-4
Poniższy fragment kodu przedstawia najbardziej podstawowy sposób korzystania z modeli ChatGPT i GPT-4 z interfejsem Chat Completion API. Jeśli programowo korzystasz z tych modeli po raz pierwszy, zalecamy rozpoczęcie od naszego.
Modele GPT-4 są obecnie dostępne tylko na zamówienie.Istniejący klienci platformy Azure OpenAI mogąubiegać się o dostęp, wypełniając ten formularz.
import osimport openaiopenai.api_type = "azure"openai.api_version = "2023-05-15" openai.api_base = os.getenv("OPENAI_API_BASE") # Wartość punktu końcowego zasobu Azure OpenAI.openai.api_key = os.getenv("OPENAI_API_KEY ")response = openai.ChatCompletion.create( engine="gpt-35-turbo", # Nazwa wdrożenia wybrana podczas wdrażania modelu ChatGPT lub GPT-4. message=[ {"role": "system", " content": "Assistant to duży model językowy przeszkolony przez OpenAI."}, {"role": "user", "content": "Kim byli założyciele firmy Microsoft?"} ])print(response)print(response[ 'wybory'][0]['wiadomość']['treść'])
Wyjście
{ "choices": [ { "finish_reason": "stop", "index": 0, "message": { "content": "Założycielami firmy Microsoft są Bill Gates i Paul Allen. Byli oni współzałożycielami firmy w 1975 roku .", "rola": "asystent" } } ], "utworzono": 1679014551, "id": "chatcmpl-6usfn2yyjkbmESe3G4jaQR6bsScO1", "model": "gpt-3.5-turbo-0301", "obiekt": "czat .completion", "usage": { "completion_tokens": 86, "prompt_tokens": 37, "total_tokens": 123 }}
Notatka
Następujące parametry nie są dostępne w nowych modelach ChatGPT i GPT-4:logprobs
,najlepsze
, IEcho
. Jeśli ustawisz którykolwiek z tych parametrów, pojawi się błąd.
Każda odpowiedź zawiera akoniec_powodu
. Możliwe wartości dlakoniec_powodu
Czy:
- zatrzymywać się: API zwróciło pełne dane wyjściowe modelu.
- długość: Niekompletne dane wyjściowe modelu z powodu parametru max_tokens lub limitu tokenów.
- filtr zawartości: treść pominięta z powodu flagi w naszych filtrach treści.
- zero:Odpowiedź interfejsu API nadal trwa lub jest niekompletna.
Rozważ ustawieniemax_tokeny
do nieco wyższej wartości niż zwykle, takiej jak 300 lub 500. Dzięki temu model nie przestanie generować tekstu przed osiągnięciem końca wiadomości.
Wersjonowanie modeli
Notatka
gpt-35-turbo
jest równoważne zgpt-3.5-turbo
model z OpenAI.
W przeciwieństwie do poprzednich modeli GPT-3 i GPT-3.5,gpt-35-turbo
model jak igpt-4
Igpt-4-32k
modele będą nadal aktualizowane. Podczas tworzenia Azastosowaniespośród tych modeli, musisz także określić wersję modelu.
Obecnie tylko wersja0301
jest dostępny dla ChatGPT i0314
dla modeli GPT-4. W przyszłości będziemy nadal udostępniać zaktualizowane wersje. Czasy wycofywania modeli można znaleźć na naszej stroniemodelestrona.
Praca z interfejsem Chat Completion API
OpenAI wyszkolił modele ChatGPT i GPT-4, aby akceptowały dane wejściowe sformatowane jako rozmowa. Parametr message przyjmuje tablicę słowników z konwersacją uporządkowaną według roli.
Format podstawowego zakończenia czatu jest następujący:
{"role": "system", "content": "Dostarcz kontekst i/lub instrukcje do modelu"},{"role": "user", "content": "Tutaj trafiają wiadomości użytkowników"}
Rozmowa z jedną przykładową odpowiedzią, po której następuje pytanie, wyglądałaby tak:
{"role": "system", "content": "Dostarcz kontekst i/lub instrukcje do modelu."},{"role": "user", "content": "Przykładowe pytanie idzie tutaj."}, {"role": "asystent", "content": "Przykładowa odpowiedź znajduje się tutaj."},{"role": "użytkownik", "content": "Pierwsze pytanie/wiadomość, na które model ma faktycznie odpowiedzieć."}
Rola systemowa
Rola systemowa, znana również jako komunikat systemowy, znajduje się na początku tablicy. Ten komunikat zawiera wstępne instrukcje dla modelu. W roli systemowej możesz podać różne informacje, w tym:
- Krótki opis asystenta
- Cechy osobowości asystenta
- Instrukcje lub zasady, których asystent ma przestrzegać
- Dane lub informacje potrzebne do modelu, takie jak odpowiednie pytania z często zadawanych pytań
Możesz dostosować rolę systemową do swojego przypadku użycia lub po prostu dołączyć podstawowe instrukcje. Rola/wiadomość systemowa jest opcjonalna, ale zaleca się uwzględnienie przynajmniej podstawowej, aby uzyskać najlepsze wyniki.
Wiadomości
Po roli systemowej możesz dołączyć serię komunikatów międzyużytkownikiasystent.
{"role": "user", "content": "Co to jest termodynamika?"}
Aby wywołać odpowiedź z modelu, należy zakończyć komunikatem użytkownika wskazującym, że to kolej asystenta na odpowiedź. Możesz także załączyć serię przykładowych wiadomości między użytkownikiem a asystentem, aby przeprowadzić krótką naukę.
Przykłady monitów o wiadomość
W poniższej sekcji przedstawiono przykłady różnych stylów monitów, których można użyć w modelach ChatGPT i GPT-4. Te przykłady to tylko punkt wyjścia i możesz eksperymentować z różnymi monitami, aby dostosować zachowanie do własnych przypadków użycia.
Podstawowy przykład
Jeśli chcesz, aby model ChatGPT zachowywał się podobnie dochat.openai.com, możesz użyć podstawowego komunikatu systemowego, takiego jak „Asystent to duży model językowy przeszkolony przez OpenAI”.
{"role": "system", "content": "Assistant to duży model językowy przeszkolony przez OpenAI."},{"role": "user", "content": "Kim byli założyciele firmy Microsoft?"}
Przykład z instrukcją
W przypadku niektórych scenariuszy możesz chcieć podać modelowi dodatkowe instrukcje, aby zdefiniować poręcze dla tego, co model jest w stanie zrobić.
{"role": "system", "content": "Asystent to inteligentny chatbot, którego zadaniem jest pomaganie użytkownikom w odpowiadaniu na pytania związane z podatkami.Instrukcje: - Odpowiadaj tylko na pytania związane z podatkami. - Jeśli nie jesteś pewien odpowiedzi, może powiedzieć „Nie wiem” lub „Nie jestem pewien” i polecić użytkownikom, aby odwiedzili witrynę IRS w celu uzyskania dalszych informacji. "},{"role": "user", "content": "Kiedy moje podatki należny?"}
Używanie danych do uziemienia
Możesz również dołączyć odpowiednie dane lub informacje do komunikatu systemowego, aby nadać modelowi dodatkowy kontekst dla konwersacji. Jeśli potrzebujesz zawrzeć tylko niewielką ilość informacji, możesz zakodować je na stałe w komunikacie systemowym. Jeśli masz dużą ilość danych, o których model powinien wiedzieć, możesz użyćosadzanialub produkt npWyszukiwanie poznawcze platformy Azureaby pobrać najistotniejsze informacje w czasie zapytania.
{"role": "system", "content": "Asystent to inteligentny chatbot, którego zadaniem jest pomaganie użytkownikom w odpowiadaniu na pytania techniczne dotyczące usługi Azure OpenAI. Odpowiadaj tylko na pytania, korzystając z poniższego kontekstu, a jeśli nie masz pewności co do odpowiedzi, może powiedzieć „nie wiem”. Kontekst: – Usługa Azure OpenAI zapewnia dostęp API REST do zaawansowanych modeli językowych OpenAI, w tym serii modeli GPT-3, Codex i Embeddings. – Usługa Azure OpenAI zapewnia klientom zaawansowaną sztuczną inteligencję językową dzięki OpenAI GPT- 3, Codex i DALL-E z obietnicą bezpieczeństwa i korporacyjności platformy Azure.Azure OpenAI współtworzy interfejsy API z OpenAI, zapewniając kompatybilność i płynne przejście z jednego do drugiego. — W firmie Microsoft jesteśmy oddani rozwój sztucznej inteligencji oparty na zasadach, które stawiają ludzi na pierwszym miejscu. Firma Microsoft dokonała znacznych inwestycji, aby pomóc chronić się przed nadużyciami i niezamierzonymi szkodami, co obejmuje wymaganie od wnioskodawców przedstawienia dobrze zdefiniowanych przypadków użycia, obejmujących zasady firmy Microsoft dotyczące odpowiedzialnego korzystania z sztucznej inteligencji."},{" rola": "użytkownik", "zawartość": "Czym jest usługa Azure OpenAI?"}
Niewielu strzeliło naukę z funkcją Chat Completion
Możesz też podać modelowi kilka przykładowych ujęć. Podejście do uczenia się kilku ujęć zmieniło się nieznacznie ze względu na nowy format zachęty. Możesz teraz dołączyć serię wiadomości między użytkownikiem a asystentem w monicie jako kilka przykładów ujęć. Tych przykładów można użyć do zasiewania odpowiedzi na często zadawane pytania w celu przygotowania modelu lub nauczenia modelu określonych zachowań.
To tylko jeden przykład tego, jak możesz wykorzystać naukę kilku ujęć z ChatGPT i GPT-4. Możesz eksperymentować z różnymi podejściami, aby zobaczyć, co najlepiej sprawdza się w Twoim przypadku użycia.
{"role": "system", "content": "Asystent to inteligentny chatbot zaprojektowany, aby pomóc użytkownikom odpowiedzieć na ich pytania związane z podatkami. "},{"role": "user", "content": "Kiedy potrzebuję złożyć moje podatki do?"},{"role": "assistant", "content": "W 2023 roku będziesz musiał złożyć swoje podatki do 18 kwietnia. Data przypada po zwykłym terminie 15 kwietnia, ponieważ 15 kwietnia wypada w sobotę w 2023 r. Więcej informacji: https://www.irs.gov/filing/individuals/when-to-file."},{"role": "user", "content": "How can can Sprawdzam status mojego zwrotu podatku?"},{"role": "assistant", "content": "Możesz sprawdzić status swojego zwrotu podatku, odwiedzając stronę https://www.irs.gov/refunds"}
Korzystanie z funkcji uzupełniania czatu w scenariuszach niezwiązanych z czatem
Interfejs Chat Completion API został zaprojektowany do pracy z konwersacjami obejmującymi wiele tur, ale sprawdza się również w scenariuszach innych niż czat.
Na przykład w przypadku scenariusza wyodrębniania jednostek można użyć następującego monitu:
{"role": "system", "content": "Jesteś asystentem zaprojektowanym do wyodrębniania jednostek z tekstu. Użytkownicy będą wklejać ciąg tekstu, a Ty będziesz odpowiadać jednostkami wyodrębnionymi z tekstu jako obiekt JSON Oto przykład formatu danych wyjściowych:{ "nazwa": "", "firma": "", "numer_telefonu": ""}"},{"role": "użytkownik", "zawartość": "Cześć. Nazywam się Robert Smith. Dzwonię z Contoso Insurance, Delaware. Mój kolega wspomniał, że jesteś zainteresowany poznaniem naszej kompleksowej polityki świadczeń. Czy możesz do mnie oddzwonić pod numer (555) 346-9322, gdy będziesz miał okazję żebyśmy mogli omówić korzyści?"}
Tworzenie podstawowej pętli konwersacji
Dotychczasowe przykłady pokazały Ci podstawową mechanikę interakcji z interfejsem Chat Completion API. Ten przykład pokazuje, jak utworzyć pętlę konwersacji, która wykonuje następujące czynności:
- Stale pobiera dane wejściowe z konsoli i odpowiednio formatuje je jako część tablicy komunikatów jako treść roli użytkownika.
- Generuje odpowiedzi, które są drukowane w konsoli, formatowane i dodawane do tablicy komunikatów jako treść roli asystenta.
Oznacza to, że za każdym razem, gdy zadawane jest nowe pytanie, wraz z ostatnim pytaniem wysyłany jest bieżący zapis dotychczasowej rozmowy. Ponieważ model nie ma pamięci, musisz wysyłać zaktualizowany transkrypcję z każdym nowym pytaniem, w przeciwnym razie model straci kontekst poprzednich pytań i odpowiedzi.
import osimport openaiopenai.api_type = "azure"openai.api_version = "2023-05-15" openai.api_base = os.getenv("OPENAI_API_BASE") # Wartość punktu końcowego zasobu Azure OpenAI .openai.api_key = os.getenv("OPENAI_API_KEY ")conversation=[{"role": "system", "content": "Jesteś pomocnym asystentem."}]while(True): user_input = input() konwersacja.append({"role": "użytkownik" , "content": user_input}) response = openai.ChatCompletion.create( engine="gpt-3.5-turbo", # Nazwa wdrożenia wybrana podczas wdrażania modelu ChatGPT lub GPT-4.messes = konwersacja ) konwersacja.append ({"role": "asystent", "treść": odpowiedź['wybory'][0]['wiadomość']['treść']}) print("\n" + odpowiedź['wybory'][0 ]['wiadomość']['treść'] + "\n")
Po uruchomieniu powyższego kodu otrzymasz puste okno konsoli. Wpisz swoje pierwsze pytanie w oknie, a następnie naciśnij Enter. Po zwróceniu odpowiedzi możesz powtórzyć proces i dalej zadawać pytania.
Zarządzanie rozmowami
Poprzedni przykład będzie działał do momentu osiągnięcia limitu tokenów modelu. Z każdym zadanym pytaniem i otrzymaną odpowiedzią,wiadomości
tablica powiększa się. Limit tokenów dlagpt-35-turbo
wynosi 4096 tokenów, natomiast limit tokenów dlagpt-4
Igpt-4-32k
to odpowiednio 8192 i 32768. Te limity obejmują liczbę tokenów zarówno z wysłanej tablicy komunikatów, jak i odpowiedzi modelu. Liczba tokenów w tablicy komunikatów połączona z wartościąmax_tokeny
parametr musi mieścić się w tych granicach, w przeciwnym razie pojawi się błąd.
Twoim obowiązkiem jest upewnienie się, że monit i zakończenie mieszczą się w limicie tokena. Oznacza to, że w przypadku dłuższych konwersacji musisz śledzić liczbę tokenów i wysyłać modelowi monit, który mieści się w limicie.
Poniższy przykładowy kod przedstawia prosty przykład pętli czatu z techniką obsługi liczby tokenów 4096 przy użyciu biblioteki tiktoken OpenAI.
Kod wymaga tiktokena0.3.0
. Jeśli masz starszą wersję uruchompip install tiktoken --upgrade
.
import tiktokenimport openaiimport osopenai.api_type = "azure"openai.api_version = "2023-05-15" openai.api_base = os.getenv("OPENAI_API_BASE") # Wartość punktu końcowego zasobu Azure OpenAI .openai.api_key = os.getenv(" OPENAI_API_KEY")system_message = {"role": "system", "content": "Jesteś pomocnym asystentem."}max_response_tokens = 250token_limit= 4096conversation=[]conversation.append(system_message)def num_tokens_from_messages(messages, model="gpt -3.5-turbo-0301"): encoding = tiktoken.encoding_for_model(model) num_tokens = 0 dla wiadomości w wiadomościach: num_tokens += 4 # każda wiadomość następuje po {role/name}\n{content}\ n dla klucza, wartość w message.items(): num_tokens += len(encoding.encode(value)) if key == "name": # jeśli jest nazwa, rola jest pomijana num_tokens += -1 # rola to zawsze wymagany i zawsze 1 token num_tokens += 2 # każda odpowiedź jest poprzedzona assistant return num_tokenswhile(True): user_input = input("") konwersacja.append({"role": "user", "content": user_input}) conv_history_tokens = num_tokens_from_messages(conversation) while (conv_history_tokens+max_response_tokens >= token_limit): del konwersja[1] conv_history_tokens = num_tokens_from_messages(conversation) response = openai.ChatCompletion.create( engine="gpt-35-turbo", # The nazwa wdrożenia wybrana podczas wdrażania modelu ChatGPT lub GPT-4. wiadomości = konwersacja, temperatura = 0,7, max_tokens=max_response_tokens, ) konwersacja.append({"role": "asystent", "content": odpowiedź['wybory'][0]['wiadomość']['treść'] }) print("\n" + response['wybory'][0]['wiadomość']['zawartość'] + "\n")
W tym przykładzie po osiągnięciu liczby tokenów najstarsze wiadomości w transkrypcji konwersacji zostaną usunięte.z
jest używany zamiastMuzyka pop()
dla wydajności i zaczynamy od indeksu 1, aby zawsze zachować komunikat systemowy i usuwać tylko komunikaty użytkownika/asystenta. Z biegiem czasu ta metoda zarządzania konwersacją może spowodować pogorszenie jakości konwersacji, ponieważ model będzie stopniowo tracił kontekst wcześniejszych części konwersacji.
Alternatywnym podejściem jest ograniczenie czasu trwania konwersacji do maksymalnej długości tokena lub określonej liczby tur. Po osiągnięciu maksymalnego limitu tokenów, gdy model utraciłby kontekst, gdybyś zezwolił na kontynuację konwersacji, możesz poprosić użytkownika, aby rozpoczął nową konwersację i wyczyścił tablicę komunikatów, aby rozpocząć zupełnie nową konwersację z pełnym dostępny limit tokenów.
Pokazana wcześniej część kodu zliczająca tokeny jest uproszczoną wersją jednego zPrzykłady książek kucharskich OpenAI.
Następne kroki
- Dowiedz się więcej o usłudze Azure OpenAI.
- Rozpocznij pracę z modelem ChatGPT zSzybki start ChatGPT.
- Aby uzyskać więcej przykładów, sprawdźRepozytorium Azure OpenAI Samples GitHub
Praca z modelami ChatGPT
Ważny
Korzystanie z modeli GPT-35-Turbo z punktem końcowym ukończenia pozostaje w wersji zapoznawczej. Ze względu na możliwość wprowadzenia zmian w bazowej składni ChatML zdecydowanie zalecamy korzystanie z interfejsu Chat Completion API/punktu końcowego. Chat Completion API to zalecana metoda interakcji z modelami ChatGPT (gpt-35-turbo). Chat Completion API to także jedyny sposób na dostęp do modeli GPT-4.
Poniższy fragment kodu przedstawia najbardziej podstawowy sposób używania modeli ChatGPT z ChatML. Jeśli programowo korzystasz z tych modeli po raz pierwszy, zalecamy rozpoczęcie od naszego.
import osimport openaiopenai.api_type = "azure"openai.api_base = "https://{nazwa-twojego-zasobu}.openai.azure.com/"openai.api_version = "2023-05-15"openai.api_key = os. getenv("OPENAI_API_KEY")response = openai.Completion.create( engine="gpt-35-turbo", # Nazwa wdrożenia wybrana podczas wdrażania modelu ChatGPT prompt="<|im_start|>system\nAssistant to duża model języka przeszkolony przez OpenAI.\n<|im_end|>\n<|im_start|>user\nKim byli założyciele firmy Microsoft?\n<|im_end|>\n<|im_start|>assistant\n", temperature= 0, max_tokens=500, top_p=0.5, stop=["<|im_end|>"])print(odpowiedź['wybory'][0]['tekst'])
Notatka
Następujące parametry nie są dostępne w modelu gpt-35-turbo:logprobs
,najlepsze
, IEcho
. Jeśli ustawisz którykolwiek z tych parametrów, pojawi się błąd.
The<|im_koniec|>
token oznacza koniec komunikatu. Polecamy m.in<|im_koniec|>
token jako sekwencję zatrzymania, aby upewnić się, że model przestanie generować tekst po osiągnięciu końca wiadomości. Możesz przeczytać więcej o specjalnych żetonach wJęzyk znaczników czatu (ChatML)Sekcja.
Rozważ ustawieniemax_tokeny
do nieco wyższej wartości niż zwykle, takiej jak 300 lub 500. Dzięki temu model nie przestanie generować tekstu przed osiągnięciem końca wiadomości.
Wersjonowanie modeli
Notatka
gpt-35-turbo
jest równoważne zgpt-3.5-turbo
model z OpenAI.
W przeciwieństwie do poprzednich modeli GPT-3 i GPT-3.5,gpt-35-turbo
model jak igpt-4
Igpt-4-32k
modele będą nadal aktualizowane. Podczas tworzenia Azastosowaniespośród tych modeli, musisz także określić wersję modelu.
Obecnie tylko wersja0301
jest dostępny dla ChatGPT. W przyszłości będziemy nadal udostępniać zaktualizowane wersje. Czasy wycofywania modeli można znaleźć na naszej stroniemodelestrona.
Praca z językiem znaczników czatu (ChatML)
Notatka
OpenAI nadal ulepsza ChatGPT, a język znaczników czatu używany w modelach będzie nadal ewoluował w przyszłości. Będziemy aktualizować ten dokument o najnowsze informacje.
OpenAI wyszkolił ChatGPT w zakresie specjalnych tokenów, które wyznaczają różne części zachęty. Monit zaczyna się od komunikatu systemowego, który służy do przygotowania modelu, po którym następuje seria komunikatów między użytkownikiem a asystentem.
Format podstawowego monitu ChatML jest następujący:
<|im_start|>system Podaj kontekst i/lub instrukcje dla modelu.<|im_end|> <|im_start|>użytkownik Wiadomość użytkownika trafia tutaj<|im_end|> <|im_start|>asystent
wiadomość systemowa
Komunikat systemowy jest zawarty na początku monitu między<|im_start|>system
I<|im_koniec|>
żetony. Ten komunikat zawiera wstępne instrukcje dla modelu. W komunikacie systemowym możesz podać różne informacje, w tym:
- Krótki opis asystenta
- Cechy osobowości asystenta
- Instrukcje lub zasady, których asystent ma przestrzegać
- Dane lub informacje potrzebne do modelu, takie jak odpowiednie pytania z często zadawanych pytań
Możesz dostosować komunikat systemowy do swojego przypadku użycia lub po prostu dołączyć podstawowy komunikat systemowy. Komunikat systemowy jest opcjonalny, ale zaleca się podanie przynajmniej podstawowego komunikatu, aby uzyskać najlepsze wyniki.
Wiadomości
Po komunikacie systemowym możesz dołączyć serię komunikatów międzyużytkownikiasystent. Każda wiadomość powinna zaczynać się od<|w_początku|>
token, po którym następuje rola (użytkownik
Lubasystent
) i zakończyć na<|im_koniec|>
znak.
<|im_start|>użytkownikCo to jest termodynamika?<|im_end|>
Aby wyzwolić odpowiedź z modelu, monit powinien kończyć się na<|im_start|>asystent
żeton wskazujący, że nadeszła kolej asystenta na odpowiedź. Możesz także dołączyć wiadomości między użytkownikiem a asystentem w monicie jako sposób na naukę kilku ujęć.
Szybkie przykłady
W poniższej sekcji przedstawiono przykłady różnych stylów monitów, których można użyć w modelach ChatGPT i GPT-4. Te przykłady to tylko punkt wyjścia i możesz eksperymentować z różnymi monitami, aby dostosować zachowanie do własnych przypadków użycia.
Podstawowy przykład
Jeśli chcesz, aby modele ChatGPT i GPT-4 zachowywały się podobnie dochat.openai.com, możesz użyć podstawowego komunikatu systemowego, takiego jak „Asystent to duży model językowy przeszkolony przez OpenAI”.
<|im_start|>systemAssistant to duży model językowy przeszkolony przez OpenAI.<|im_end|><|im_start|>userKim byli założyciele firmy Microsoft?<|im_end|><|im_start|>assistant
Przykład z instrukcją
W przypadku niektórych scenariuszy możesz chcieć podać modelowi dodatkowe instrukcje, aby zdefiniować poręcze dla tego, co model jest w stanie zrobić.
<|im_start|>systemAssistant to inteligentny chatbot zaprojektowany, aby pomóc użytkownikom odpowiedzieć na ich pytania związane z podatkami. Instrukcje: – Odpowiadaj tylko na pytania związane z podatkami. - Jeśli nie masz pewności co do odpowiedzi, możesz powiedzieć „Nie wiem” lub „Nie jestem pewien” i polecić użytkownikom witrynę IRS, aby uzyskać więcej informacji.<|im_end|><|im_start|> userKiedy należy mi się podatek?<|im_end|><|im_start|>asystent
Używanie danych do uziemienia
Możesz również dołączyć odpowiednie dane lub informacje do komunikatu systemowego, aby nadać modelowi dodatkowy kontekst dla konwersacji. Jeśli potrzebujesz zawrzeć tylko niewielką ilość informacji, możesz zakodować je na stałe w komunikacie systemowym. Jeśli masz dużą ilość danych, o których model powinien wiedzieć, możesz użyćosadzanialub produkt npWyszukiwanie poznawcze platformy Azureaby pobrać najistotniejsze informacje w czasie zapytania.
<|im_start|>systemAssistant to inteligentny chatbot, który pomaga użytkownikom odpowiadać na pytania techniczne dotyczące usługi Azure OpenAI. Odpowiadaj na pytania tylko w poniższym kontekście, a jeśli nie jesteś pewien odpowiedzi, możesz powiedzieć „nie wiem”. Kontekst: — Usługa Azure OpenAI zapewnia dostęp API REST do zaawansowanych modeli językowych OpenAI, w tym GPT-3, Seria modeli Codex i Embeddings. — Azure OpenAI Service zapewnia klientom zaawansowaną sztuczną inteligencję językową z modelami OpenAI GPT-3, Codex i DALL-E z obietnicą bezpieczeństwa i przedsiębiorstwa platformy Azure. Azure OpenAI współtworzy interfejsy API z OpenAI, zapewniając kompatybilność i płynne przejście między nimi. W firmie Microsoft jesteśmy zaangażowani w rozwój sztucznej inteligencji, kierując się zasadami, które stawiają ludzi na pierwszym miejscu. Firma Microsoft dokonała znacznych inwestycji, aby chronić się przed nadużyciami i niezamierzonymi szkodami, co obejmuje wymaganie od wnioskodawców przedstawienia dobrze zdefiniowanych przypadków użycia, uwzględniających zasady firmy Microsoft dotyczące odpowiedzialnego korzystania z sztucznej inteligencji<|im_end|><|im_start|>użytkownikCzym jest usługa Azure OpenAI?< |im_end|><|im_start|>asystent
Niewielu strzeliło do nauki z ChatML
Możesz też podać modelowi kilka przykładowych ujęć. Podejście do uczenia się kilku ujęć zmieniło się nieznacznie ze względu na nowy format zachęty. Możesz teraz dołączyć serię wiadomości między użytkownikiem a asystentem w monicie jako kilka przykładów ujęć. Tych przykładów można użyć do zasiewania odpowiedzi na często zadawane pytania w celu przygotowania modelu lub nauczenia modelu określonych zachowań.
To tylko jeden przykład tego, jak możesz wykorzystać naukę kilku ujęć z ChatGPT. Możesz eksperymentować z różnymi podejściami, aby zobaczyć, co najlepiej sprawdza się w Twoim przypadku użycia.
<|im_start|>systemAssistant to inteligentny chatbot zaprojektowany, aby pomóc użytkownikom odpowiedzieć na ich pytania związane z podatkami. <|im_end|><|im_start|>userKiedy muszę złożyć podatki?<|im_end|><|im_start|>assistantW 2023 r. będziesz musiał złożyć swoje podatki do 18 kwietnia. Data przypada po zwykłym terminie 15 kwietnia, ponieważ 15 kwietnia wypada w sobotę w 2023 r. Więcej informacji można znaleźć na stronie https://www.irs.gov/filing/individuals/when-to-file<|im_end|><| im_start|>userJak mogę sprawdzić status mojego zwrotu podatku?<|im_end|><|im_start|>assistantMożesz sprawdzić status swojego zwrotu podatku, odwiedzając stronę https://www.irs.gov/refunds<|im_end| >
Używanie języka znaczników czatu w scenariuszach niezwiązanych z czatem
ChatML ma na celu ułatwienie zarządzania konwersacjami obejmującymi wiele tur, ale sprawdza się również w scenariuszach innych niż czat.
Na przykład w przypadku scenariusza wyodrębniania jednostek można użyć następującego monitu:
<|im_start|>systemJesteś asystentem przeznaczonym do wyodrębniania jednostek z tekstu. Użytkownicy wkleją ciąg tekstu, a Ty odpowiesz jednostkami, które wyodrębniłeś z tekstu jako obiekt JSON. Oto przykład formatu danych wyjściowych:{ "name": "", "company": "", "phone_number": ""}<|im_end|><|im_start|>userHello. Nazywam się Robert Smith. Dzwonię z Contoso Insurance, Delaware. Mój kolega wspomniał, że jesteś zainteresowany poznaniem naszej kompleksowej polityki świadczeń. Czy możesz oddzwonić do mnie pod numer (555) 346-9322, kiedy będziesz miał okazję, abyśmy mogli omówić korzyści?<|im_end|><|im_start|>asystent
Zapobieganie niebezpiecznym wpisom użytkownika
Ważne jest, aby dodać środki zaradcze do aplikacji, aby zapewnić bezpieczne korzystanie z języka znaczników czatu.
Zalecamy uniemożliwienie użytkownikom końcowym dołączania specjalnych tokenów do danych wejściowych, takich jak<|w_początku|>
I<|im_koniec|>
. Zalecamy również uwzględnienie dodatkowej weryfikacji, aby upewnić się, że monity wysyłane do modelu są dobrze sformułowane i zgodne z formatem Chat Markup Language opisanym w tym dokumencie.
Możesz również podać instrukcje w komunikacie systemowym, aby poprowadzić model, jak reagować na określone typy danych wejściowych użytkownika. Na przykład możesz poinstruować model, aby odpowiadał tylko na wiadomości dotyczące określonego tematu. Możesz również wzmocnić to zachowanie kilkoma przykładami strzałów.
Zarządzanie rozmowami
Limit tokenów dlagpt-35-turbo
to 4096 tokenów. Ten limit obejmuje liczbę tokenów zarówno z monitu, jak i zakończenia. Liczba tokenów w monicie połączona z wartościąmax_tokeny
parametr musi pozostać poniżej 4096, w przeciwnym razie pojawi się błąd.
Twoim obowiązkiem jest upewnienie się, że monit i zakończenie mieszczą się w limicie tokenów. Oznacza to, że w przypadku dłuższych konwersacji musisz śledzić liczbę tokenów i wysyłać modelowi tylko monit, który mieści się w limicie tokenów.
Poniższy przykład kodu pokazuje prosty przykład, jak można śledzić oddzielne wiadomości w konwersacji.
import osimport openaiopenai.api_type = "azure"openai.api_base = "https://{your-resource-name}.openai.azure.com/" #To odpowiada wartości punktu końcowego zasobu Azure OpenAIopenai.api_version = "2023-05 -15" openai.api_key = os.getenv("OPENAI_API_KEY")# zdefiniowanie funkcji do tworzenia podpowiedzi z komunikatu systemowego i konwersacji komunikatówdef create_prompt(komunikat_systemowy, komunikaty): znak zachęty = komunikat_systemowy dla komunikatu w komunikatach: znak zachęty += f "\n<|im_start|>{wiadomość['nadawca']}\n{wiadomość['tekst']}\n<|im_end|>" zachęta += "\n<|im_start|>asystent\n" powrót prompt# definiowanie danych wprowadzonych przez użytkownika i komunikatu systemowegouser_input = "" system_message = f"<|im_start|>system\n{''}\n<|im_end|>"# tworzenie lista wiadomości do śledzenia konwersacjimessages = [{"sender": "user", "text": user_input}]response = openai.Completion.create( engine="gpt-35-turbo", # Nazwa wdrożenia wybrana podczas wdrożyłeś model ChatGPT. prompt=create_prompt(system_message,message), temperature=0.5, max_tokens=250, top_p=0.9, frequency_penalty=0, present_penalty=0, stop=['<|im_end|>'])messages.append ({"nadawca": "asystent", "text": response['choices'][0]['text']})print(response['choices'][0]['text'])
Przebywanie poniżej limitu tokena
Najprostszym podejściem do utrzymania limitu tokenów jest usunięcie najstarszych wiadomości z konwersacji po osiągnięciu limitu tokenów.
Możesz zawsze dołączać jak najwięcej tokenów, pozostając poniżej limitu, lub zawsze możesz dołączyć określoną liczbę poprzednich wiadomości, zakładając, że te wiadomości mieszczą się w limicie. Należy pamiętać, że dłuższe monity wymagają więcej czasu na wygenerowanie odpowiedzi i wiążą się z wyższymi kosztami niż krótsze monity.
Możesz oszacować liczbę tokenów w ciągu, używając metodyTIK TokBiblioteka Pythona, jak pokazano poniżej.
import tiktoken cl100k_base = tiktoken.get_encoding("cl100k_base") enc = tiktoken.Encoding( name="gpt-35-turbo", pat_str=cl100k_base._pat_str, mergeable_ranks=cl100k_base._mergeable_ranks, special_tokens={ **cl100k_base._special_tokens, " <|im_start|>": 100264, "<|im_end|>": 100265 } ) tokens = enc.encode( "<|im_start|>użytkownik\nWitam<|im_end|><|im_start|>asystent", dozwolone_specjalne= {"<|im_start|>", "<|im_end|>"} ) len(tokeny) == 7 tokenów twierdzenia == [100264, 882, 198, 9906, 100265, 100264, 78191]
Następne kroki
- Dowiedz się więcej o usłudze Azure OpenAI.
- Rozpocznij pracę z modelem ChatGPT zSzybki start ChatGPT.
- Aby uzyskać więcej przykładów, sprawdźRepozytorium Azure OpenAI Samples GitHub