Chat Markup Language ChatML (Preview)
Důležité
Použití modelů GPT-3.5-Turbo s koncovým bodem dokončení, jak je popsáno v tomto článku, zůstává ve verzi Preview a je možné pouze s gpt-35-turbo
verzí (0301), která se plánuje pro vyřazení z provozu na začátku 1. srpna 2024. Důrazně doporučujeme použít rozhraní API nebo koncový bod pro dokončování chatu hosta. Rozhraní API pro dokončování chatu je doporučená metoda interakce s modely GPT-3.5-Turbo. Rozhraní API pro dokončování chatu je také jediným způsobem, jak získat přístup k modelům GPT-4.
Následující fragment kódu ukazuje nejzásadnější způsob použití modelů GPT-3.5-Turbo s ChatML. Pokud používáte tyto modely poprvé programově, doporučujeme začít s naším rychlým startem GPT-35-Turbo & GPT-4.
Poznámka:
V dokumentaci k Azure OpenAI odkazujeme na GPT-3.5-Turbo a GPT-35-Turbo zaměnitelně. Oficiální název modelu na platformě OpenAI je gpt-3.5-turbo
, ale pro Azure OpenAI kvůli omezením konkrétních znaků Azure je gpt-35-turbo
název základního modelu .
import os
import openai
openai.api_type = "azure"
openai.api_base = "https://{your-resource-name}.openai.azure.com/"
openai.api_version = "2024-02-01"
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create(
engine="gpt-35-turbo", # The deployment name you chose when you deployed the GPT-35-Turbo model
prompt="<|im_start|>system\nAssistant is a large language model trained by OpenAI.\n<|im_end|>\n<|im_start|>user\nWho were the founders of Microsoft?\n<|im_end|>\n<|im_start|>assistant\n",
temperature=0,
max_tokens=500,
top_p=0.5,
stop=["<|im_end|>"])
print(response['choices'][0]['text'])
Poznámka:
Následující parametry nejsou k dispozici s modelem gpt-35-turbo: logprobs
, best_of
a echo
. Pokud nastavíte některý z těchto parametrů, zobrazí se chyba.
Token <|im_end|>
označuje konec zprávy. Při použití ChatML se doporučuje zahrnout <|im_end|>
token jako sekvenci zastavení, aby se zajistilo, že model přestane generovat text, když dosáhne konce zprávy.
Zvažte nastavení max_tokens
na mírně vyšší hodnotu, než je normální hodnota, například 300 nebo 500. Tím se zajistí, že model nezastaví generování textu, než dosáhne konce zprávy.
Správa verzí modelů
Poznámka:
gpt-35-turbo
je ekvivalentní gpt-3.5-turbo
modelu z OpenAI.
Na rozdíl od předchozích modelů gpt-35-turbo
GPT-3 a GPT-3.5 se model i gpt-4
gpt-4-32k
modely i nadále aktualizují. Při vytváření nasazení těchto modelů budete také muset zadat verzi modelu.
Data vyřazení modelu pro tyto modely najdete na naší stránce modelů .
Práce s jazykem Chat Markup Language (ChatML)
Poznámka:
OpenAI i nadále vylepšuje GPT-35-Turbo a jazyk chatových značek používaný s modely se v budoucnu bude dále vyvíjet. Tento dokument budeme aktualizovat nejnovějšími informacemi.
OpenAI vytrénoval GPT-35-Turbo na speciálních tokenech, které označují různé části výzvy. Tato výzva začíná systémovou zprávou, která se používá k vytvoření modelu a následuje řada zpráv mezi uživatelem a asistentem.
Formát základní výzvy ChatML je následující:
<|im_start|>system
Provide some context and/or instructions to the model.
<|im_end|>
<|im_start|>user
The user’s message goes here
<|im_end|>
<|im_start|>assistant
Systémová zpráva
Systémová zpráva je zahrnuta na začátku výzvy mezi <|im_start|>system
tokeny a <|im_end|>
tokeny. Tato zpráva obsahuje počáteční pokyny k modelu. V systémové zprávě můžete zadat různé informace, mezi které patří:
- Stručný popis asistenta
- Osobnostní vlastnosti asistenta
- Pokyny nebo pravidla, která chcete, aby asistent postupoval
- Data nebo informace potřebné pro model, například relevantní otázky z nejčastějších dotazů
Systémovou zprávu můžete přizpůsobit pro váš případ použití nebo jenom zahrnout základní systémovou zprávu. Systémová zpráva je nepovinná, ale doporučuje se alespoň zahrnout základní zprávu, aby získala nejlepší výsledky.
Zprávy
Za systémovou zprávou můžete zahrnout řadu zpráv mezi uživatelem a asistentem. Každá zpráva by měla začínat tokenem <|im_start|>
následovaným rolí (user
nebo assistant
) a končit tokenem <|im_end|>
.
<|im_start|>user
What is thermodynamics?
<|im_end|>
Pokud chcete aktivovat odpověď z modelu, měla by výzva končit tokenem <|im_start|>assistant
označujícím, že se jedná o asistenta, který reaguje. Do výzvy můžete také zahrnout zprávy mezi uživatelem a asistentem jako způsob, jak provést několik snímků učení.
Příklady dotazů
Následující část ukazuje příklady různých stylů výzev, které můžete použít s modely GPT-35-Turbo a GPT-4. Tyto příklady jsou jen výchozím bodem a můžete experimentovat s různými výzvami k přizpůsobení chování pro vlastní případy použití.
Základní příklad
Pokud chcete, aby se modely GPT-35-Turbo a GPT-4 chovaly podobně jako chat.openai.com, můžete použít základní systémovou zprávu jako "Assistant je velký jazykový model natrénovaný aplikací OpenAI".
<|im_start|>system
Assistant is a large language model trained by OpenAI.
<|im_end|>
<|im_start|>user
Who were the founders of Microsoft?
<|im_end|>
<|im_start|>assistant
Příklad s pokyny
V některých scénářích můžete chtít modelu poskytnout další pokyny, které definují mantinely pro to, co model dokáže udělat.
<|im_start|>system
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.
<|im_end|>
<|im_start|>user
When are my taxes due?
<|im_end|>
<|im_start|>assistant
Použití dat k uzemnění
Do systémové zprávy můžete také zahrnout relevantní data nebo informace, abyste modelu poskytli další kontext konverzace. Pokud potřebujete zahrnout jenom malé množství informací, můžete ho pevně naprogramovat v systémové zprávě. Pokud máte velké množství dat, o kterých by měl model vědět, můžete použít vkládání nebo produkt, jako je Azure AI Search , a načíst nejrelevavantnější informace v době dotazu.
<|im_start|>system
Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Serivce. Only answer questions using the context below and if you're not sure of an answer, you can say "I don't know".
Context:
- Azure OpenAI Service provides REST API access to OpenAI's powerful language models including the GPT-3, Codex and Embeddings model series.
- Azure OpenAI Service gives customers advanced language AI with OpenAI GPT-3, Codex, and DALL-E models with the security and enterprise promise of Azure. Azure OpenAI co-develops the APIs with OpenAI, ensuring compatibility and a smooth transition from one to the other.
- At Microsoft, we're committed to the advancement of AI driven by principles that put people first. Microsoft has made significant investments to help guard against abuse and unintended harm, which includes requiring applicants to show well-defined use cases, incorporating Microsoft’s principles for responsible AI use
<|im_end|>
<|im_start|>user
What is Azure OpenAI Service?
<|im_end|>
<|im_start|>assistant
Několik snímků učení pomocí ChatML
Do modelu můžete také uvést několik příkladů. Přístup pro několik snímků učení se mírně změnil kvůli novému formátu výzvy. Teď můžete do výzvy zahrnout řadu zpráv mezi uživatelem a asistentem, a to v několika příkladech. Tyto příklady se dají použít k počátečním odpovědím na běžné otázky k vytvoření modelu nebo k výuce konkrétního chování modelu.
Toto je jen jeden příklad použití několika snímků učení s GPT-35-Turbo. Můžete experimentovat s různými přístupy a zjistit, co je pro váš případ použití nejvhodnější.
<|im_start|>system
Assistant is an intelligent chatbot designed to help users answer their tax related questions.
<|im_end|>
<|im_start|>user
When do I need to file my taxes by?
<|im_end|>
<|im_start|>assistant
In 2023, you will need to file your taxes by April 18th. The date falls after the usual April 15th deadline because April 15th falls on a Saturday in 2023. For more details, see https://www.irs.gov/filing/individuals/when-to-file
<|im_end|>
<|im_start|>user
How can I check the status of my tax refund?
<|im_end|>
<|im_start|>assistant
You can check the status of your tax refund by visiting https://www.irs.gov/refunds
<|im_end|>
Použití jazyka značek chatu pro scénáře, které nejsou chatované
ChatML je navržený tak, aby usnadnil správu konverzací s více možnostmi, ale funguje dobře i pro scénáře, které nejsou chatované.
Například pro scénář extrakce entit můžete použít následující výzvu:
<|im_start|>system
You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you've extracted from the text as a JSON object. Here's an example of your output format:
{
"name": "",
"company": "",
"phone_number": ""
}
<|im_end|>
<|im_start|>user
Hello. My name is Robert Smith. I’m calling from Contoso Insurance, Delaware. My colleague mentioned that you are interested in learning about our comprehensive benefits policy. Could you give me a call back at (555) 346-9322 when you get a chance so we can go over the benefits?
<|im_end|>
<|im_start|>assistant
Zabránění nebezpečným uživatelským vstupům
Je důležité do aplikace přidat zmírnění rizik, aby se zajistilo bezpečné použití jazyka Chat Markup Language.
Doporučujeme, abyste koncovým uživatelům zabránili v zahrnutí speciálních tokenů do jejich vstupu, například <|im_start|>
a <|im_end|>
. Doporučujeme také zahrnout další ověření, abyste zajistili, že výzvy, které odesíláte do modelu, budou správně vytvořené a budou postupovat podle formátu Chat Markup Language, jak je popsáno v tomto dokumentu.
V systémové zprávě můžete také poskytnout pokyny, které povedou model k tomu, jak reagovat na určité typy uživatelských vstupů. Můžete například dát modelu pokyn, aby odpovídal pouze na zprávy týkající se určitého předmětu. Toto chování můžete také posílit několika příklady snímků.
Správa konverzací
Limit tokenu je gpt-35-turbo
4096 tokenů. Tento limit zahrnuje počet tokenů z výzvy i dokončení. Počet tokenů v příkazovém řádku v kombinaci s hodnotou max_tokens
parametru musí zůstat pod 4096 nebo se zobrazí chyba.
Je vaší zodpovědností zajistit, aby výzva a dokončení spadají do limitu tokenu. To znamená, že u delších konverzací je potřeba sledovat počet tokenů a odeslat model pouze výzvu, která spadá do limitu tokenu.
Následující ukázka kódu ukazuje jednoduchý příklad toho, jak můžete sledovat samostatné zprávy v konverzaci.
import os
import openai
openai.api_type = "azure"
openai.api_base = "https://{your-resource-name}.openai.azure.com/" #This corresponds to your Azure OpenAI resource's endpoint value
openai.api_version = "2024-02-01"
openai.api_key = os.getenv("OPENAI_API_KEY")
# defining a function to create the prompt from the system message and the conversation messages
def create_prompt(system_message, messages):
prompt = system_message
for message in messages:
prompt += f"\n<|im_start|>{message['sender']}\n{message['text']}\n<|im_end|>"
prompt += "\n<|im_start|>assistant\n"
return prompt
# defining the user input and the system message
user_input = "<your user input>"
system_message = f"<|im_start|>system\n{'<your system message>'}\n<|im_end|>"
# creating a list of messages to track the conversation
messages = [{"sender": "user", "text": user_input}]
response = openai.Completion.create(
engine="gpt-35-turbo", # The deployment name you chose when you deployed the GPT-35-Turbo model.
prompt=create_prompt(system_message, messages),
temperature=0.5,
max_tokens=250,
top_p=0.9,
frequency_penalty=0,
presence_penalty=0,
stop=['<|im_end|>']
)
messages.append({"sender": "assistant", "text": response['choices'][0]['text']})
print(response['choices'][0]['text'])
Zůstat pod limitem tokenu
Nejjednodušším přístupem k zachování limitu tokenu je odebrání nejstarších zpráv v konverzaci, když dosáhnete limitu tokenu.
Při zachování limitu můžete vždy zahrnout co nejvíce tokenů, nebo můžete vždy zahrnout nastavený počet předchozích zpráv za předpokladu, že tyto zprávy zůstanou v limitu. Je důležité mít na paměti, že generování odpovědi delšími výzvami trvá déle a účtují se vyšší náklady než kratší výzvy.
Počet tokenů v řetězci můžete odhadnout pomocí knihovny tiktoken Pythonu, jak je znázorněno níže.
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|>user\nHello<|im_end|><|im_start|>assistant",
allowed_special={"<|im_start|>", "<|im_end|>"}
)
assert len(tokens) == 7
assert tokens == [100264, 882, 198, 9906, 100265, 100264, 78191]
Další kroky
- Další informace o Azure OpenAI.
- Začněte s modelem GPT-35-Turbo pomocí rychlého startu GPT-35-Turbo & GPT-4.
- Další příklady najdete v úložišti GitHub s ukázkami Azure OpenAI.