Share via


Chat Markup Language ChatML (förhandsversion)

Viktigt!

Att använda GPT-3.5-Turbo-modeller med slutpunkten för slutförande enligt beskrivningen i den här artikeln förblir i förhandsversion och är endast möjligt med gpt-35-turbo version (0301) som är planerad att pensioneras redan den 1 augusti 2024. Vi rekommenderar starkt att du använder API:et /slutpunkten för ga-chattens slutförande. API:et för chattslutsättning är den rekommenderade metoden för att interagera med GPT-3.5-Turbo-modellerna. API:et för chattslutsättning är också det enda sättet att komma åt GPT-4-modellerna.

Följande kodfragment visar det mest grundläggande sättet att använda GPT-3.5-Turbo-modellerna med ChatML. Om detta är första gången du använder dessa modeller programmatiskt rekommenderar vi att du börjar med vår GPT-35-Turbo & GPT-4 Snabbstart.

Kommentar

I Azure OpenAI-dokumentationen refererar vi till GPT-3.5-Turbo och GPT-35-Turbo omväxlande. Det officiella namnet på modellen på OpenAI är gpt-3.5-turbo, men för Azure OpenAI på grund av Specifika teckenbegränsningar i Azure är gpt-35-turbodet underliggande modellnamnet .

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'])

Kommentar

Följande parametrar är inte tillgängliga med modellen gpt-35-turbo: logprobs, best_ofoch echo. Om du anger någon av dessa parametrar får du ett fel.

Token <|im_end|> anger slutet på ett meddelande. När du använder ChatML rekommenderar vi att du inkluderar <|im_end|> token som en stoppsekvens för att säkerställa att modellen slutar generera text när den når slutet av meddelandet.

Överväg att ange max_tokens ett något högre värde än normalt, till exempel 300 eller 500. Detta säkerställer att modellen inte slutar generera text innan den når slutet av meddelandet.

Versionshantering för modell

Kommentar

gpt-35-turbo motsvarar gpt-3.5-turbo modellen från OpenAI.

Till skillnad från tidigare GPT-3- och GPT-3.5-modeller gpt-35-turbo kommer både modellen och gpt-4gpt-4-32k modellerna att fortsätta att uppdateras. När du skapar en distribution av dessa modeller måste du också ange en modellversion.

Du hittar modellens pensionsdatum för dessa modeller på vår modellsida .

Arbeta med Chat Markup Language (ChatML)

Kommentar

OpenAI fortsätter att förbättra GPT-35-Turbo och chattmarkeringsspråket som används med modellerna fortsätter att utvecklas i framtiden. Vi håller det här dokumentet uppdaterat med den senaste informationen.

OpenAI tränade GPT-35-Turbo på speciella token som avgränsar de olika delarna av prompten. Kommandotolken börjar med ett systemmeddelande som används för att prime-modellen följt av en serie meddelanden mellan användaren och assistenten.

Formatet för en grundläggande ChatML-prompt är följande:

<|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 

Systemmeddelande

Systemmeddelandet ingår i början av kommandotolken mellan <|im_start|>system token och <|im_end|> . Det här meddelandet innehåller de första instruktionerna för modellen. Du kan ange olika uppgifter i systemmeddelandet, bland annat:

  • En kort beskrivning av assistenten
  • Personlighetsdrag i assistenten
  • Instruktioner eller regler som du vill att assistenten ska följa
  • Data eller information som behövs för modellen, till exempel relevanta frågor från vanliga frågor och svar

Du kan anpassa systemmeddelandet för ditt användningsfall eller bara inkludera ett grundläggande systemmeddelande. Systemmeddelandet är valfritt, men vi rekommenderar att du åtminstone inkluderar ett grundläggande meddelande för att få bästa resultat.

Meddelanden

Efter systemmeddelandet kan du inkludera en serie meddelanden mellan användaren och assistenten. Varje meddelande bör börja med <|im_start|> token följt av rollen (user eller assistant) och avslutas med <|im_end|> token.

<|im_start|>user
What is thermodynamics?
<|im_end|>

För att utlösa ett svar från modellen ska uppmaningen sluta med <|im_start|>assistant token som anger att det är assistentens tur att svara. Du kan också ta med meddelanden mellan användaren och assistenten i prompten som ett sätt att göra några skottinlärning.

Exempel på fråga

I följande avsnitt visas exempel på olika typer av frågor som du kan använda med modellerna GPT-35-Turbo och GPT-4. De här exemplen är bara en startpunkt och du kan experimentera med olika uppmaningar för att anpassa beteendet för dina egna användningsfall.

Grundläggande exempel

Om du vill att modellerna GPT-35-Turbo och GPT-4 ska bete sig på samma sätt som chat.openai.com kan du använda ett grundläggande systemmeddelande som "Assistent är en stor språkmodell tränad av 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

Exempel med instruktioner

I vissa scenarier kanske du vill ge ytterligare instruktioner till modellen för att definiera skyddsräcken för vad modellen kan göra.

<|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

Använda data för jordning

Du kan också inkludera relevanta data eller information i systemmeddelandet för att ge modellen extra kontext för konversationen. Om du bara behöver inkludera en liten mängd information kan du hårdkoda den i systemmeddelandet. Om du har en stor mängd data som modellen bör känna till kan du använda inbäddningar eller en produkt som Azure AI Search för att hämta den mest relevanta informationen vid frågetillfället.

<|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

Få skottinlärning med ChatML

Du kan också ge några skottexempel till modellen. Metoden för få skottinlärning har ändrats något på grund av det nya promptformatet. Du kan nu inkludera en serie meddelanden mellan användaren och assistenten i prompten som några exempel. De här exemplen kan användas för att få svar på vanliga frågor för att få fram modellen eller lära ut specifika beteenden till modellen.

Det här är bara ett exempel på hur du kan använda få skottinlärning med GPT-35-Turbo. Du kan experimentera med olika metoder för att se vad som fungerar bäst för ditt användningsfall.

<|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|>

Använda Chat Markup Language för scenarier som inte är chattar

ChatML är utformat för att göra konversationer med flera turer enklare att hantera, men det fungerar också bra för scenarier som inte är chattar.

För ett scenario med entitetsextrahering kan du till exempel använda följande fråga:

<|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

Förhindra osäkra användarindata

Det är viktigt att lägga till åtgärder i ditt program för att säkerställa säker användning av chattmarkeringsspråket.

Vi rekommenderar att du förhindrar att slutanvändarna kan inkludera särskilda token i sina indata, till exempel <|im_start|> och <|im_end|>. Vi rekommenderar också att du inkluderar ytterligare validering för att säkerställa att de frågor du skickar till modellen är välformulerad och följer formatet Chat Markup Language enligt beskrivningen i det här dokumentet.

Du kan också ange instruktioner i systemmeddelandet för att vägleda modellen om hur du svarar på vissa typer av användarindata. Du kan till exempel instruera modellen att bara svara på meddelanden om ett visst ämne. Du kan också förstärka det här beteendet med några exempel på bilder.

Hantera konversationer

Tokengränsen för gpt-35-turbo är 4 096 token. Den här gränsen inkluderar antalet token från både prompten och slutförandet. Antalet token i prompten i kombination med värdet för parametern max_tokens måste ligga under 4096, annars får du ett fel.

Det är ditt ansvar att se till att prompten och slutförandet ligger inom tokengränsen. Det innebär att för längre konversationer måste du hålla reda på antalet token och bara skicka modellen en uppmaning som ligger inom tokengränsen.

Följande kodexempel visar ett enkelt exempel på hur du kan hålla reda på de separata meddelandena i konversationen.

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'])

Hålla sig under tokengränsen

Den enklaste metoden för att hålla sig under tokengränsen är att ta bort de äldsta meddelandena i konversationen när du når tokengränsen.

Du kan välja att alltid inkludera så många token som möjligt när du håller dig under gränsen eller så kan du alltid inkludera ett visst antal tidigare meddelanden förutsatt att dessa meddelanden ligger inom gränsen. Det är viktigt att komma ihåg att längre frågor tar längre tid att generera ett svar och medför en högre kostnad än kortare frågor.

Du kan uppskatta antalet token i en sträng med hjälp av tiktoken Python-biblioteket enligt nedan.

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]

Nästa steg