Delen via


Chat Markup Language ChatML (preview)

Belangrijk

Het gebruik van GPT-3.5-Turbo-modellen met het voltooiingseindpunt, zoals beschreven in dit artikel, blijft in preview en is alleen mogelijk met gpt-35-turbo versie (0301) die vanaf 1 augustus 2024 buiten gebruik wordt gesteld. We raden u ten zeerste aan de GA Chat-voltooiings-API/-eindpunt te gebruiken. De CHAT-voltooiings-API is de aanbevolen methode voor interactie met de GPT-3.5-Turbo-modellen. De CHAT-voltooiings-API is ook de enige manier om toegang te krijgen tot de GPT-4-modellen.

In het volgende codefragment ziet u de meest eenvoudige manier om de GPT-3.5-Turbo-modellen met ChatML te gebruiken. Als dit uw eerste keer is dat u deze modellen programmatisch gebruikt, raden we u aan te beginnen met onze GPT-35-Turbo & GPT-4-snelstartgids.

Notitie

In de Documentatie van Azure OpenAI verwijzen we naar GPT-3.5-Turbo en GPT-35-Turbo. De officiële naam van het model op OpenAI is gpt-3.5-turbo, maar voor Azure OpenAI vanwege specifieke Tekens van Azure is gpt-35-turbode naam van het onderliggende model.

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

Notitie

De volgende parameters zijn niet beschikbaar voor het gpt-35-turbo-model: logprobs, best_ofen echo. Als u een van deze parameters instelt, krijgt u een foutmelding.

Het <|im_end|> token geeft het einde van een bericht aan. Wanneer u ChatML gebruikt, is het raadzaam token op te nemen <|im_end|> als een stopvolgorde om ervoor te zorgen dat het model stopt met het genereren van tekst wanneer het einde van het bericht wordt bereikt.

Overweeg om een iets hogere waarde in te stellen max_tokens dan normaal, zoals 300 of 500. Dit zorgt ervoor dat het model niet stopt met het genereren van tekst voordat het einde van het bericht wordt bereikt.

Versiebeheer model

Notitie

gpt-35-turbo is gelijk aan het gpt-3.5-turbo model van OpenAI.

In tegenstelling tot eerdere GPT-3- en GPT-3.5-modellen, blijven het gpt-35-turbo model en de gpt-4 modellen gpt-4-32k bijgewerkt. Wanneer u een implementatie van deze modellen maakt, moet u ook een modelversie opgeven.

U vindt de buitengebruikstellingsdatums van het model voor deze modellen op onze modellenpagina .

Werken met Chat Markup Language (ChatML)

Notitie

OpenAI blijft de GPT-35-Turbo verbeteren en de Chat Markup Language die met de modellen wordt gebruikt, blijven zich in de toekomst verder ontwikkelen. Dit document wordt bijgewerkt met de meest recente informatie.

OpenAI getraind GPT-35-Turbo op speciale tokens die de verschillende onderdelen van de prompt afbakenen. De prompt begint met een systeembericht dat wordt gebruikt om het model te primen, gevolgd door een reeks berichten tussen de gebruiker en de assistent.

De indeling van een eenvoudige ChatML-prompt is als volgt:

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

Systeembericht

Het systeembericht wordt opgenomen aan het begin van de prompt tussen de <|im_start|>system en <|im_end|> tokens. Dit bericht bevat de eerste instructies voor het model. U kunt verschillende informatie opgeven in het systeembericht, waaronder:

  • Een korte beschrijving van de assistent
  • Persoonlijkheidskenmerken van de assistent
  • Instructies of regels die u wilt volgen door de assistent
  • Gegevens of informatie die nodig is voor het model, zoals relevante vragen uit een veelgestelde vragen

U kunt het systeembericht aanpassen voor uw use-case of gewoon een basissysteembericht opnemen. Het systeembericht is optioneel, maar het wordt aanbevolen om ten minste een basisbericht op te nemen om de beste resultaten te krijgen.

Berichten

Na het systeembericht kunt u een reeks berichten tussen de gebruiker en de assistent opnemen. Elk bericht moet beginnen met het <|im_start|> token gevolgd door de rol (user of assistant) en eindigen met het <|im_end|> token.

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

Als u een antwoord van het model wilt activeren, moet de prompt eindigen met <|im_start|>assistant een token dat aangeeft dat het de beurt is van de assistent om te reageren. U kunt ook berichten opnemen tussen de gebruiker en de assistent in de prompt als een manier om weinig shot learning uit te voeren.

Promptvoorbeelden

In de volgende sectie ziet u voorbeelden van verschillende stijlen van prompts die u kunt gebruiken met de GPT-35-Turbo- en GPT-4-modellen. Deze voorbeelden zijn slechts een uitgangspunt en u kunt experimenteren met verschillende prompts om het gedrag voor uw eigen gebruiksscenario's aan te passen.

Basisvoorbeeld

Als u wilt dat de GPT-35-Turbo- en GPT-4-modellen zich op dezelfde manier gedragen als chat.openai.com, kunt u een basissysteembericht gebruiken zoals 'Assistent is een groot taalmodel dat is getraind door 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

Voorbeeld met instructies

Voor sommige scenario's wilt u mogelijk aanvullende instructies geven aan het model om kaders te definiëren voor wat het model kan doen.

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

Gegevens gebruiken voor aarding

U kunt ook relevante gegevens of informatie opnemen in het systeembericht om het model extra context te geven voor het gesprek. Als u slechts een kleine hoeveelheid informatie hoeft op te nemen, kunt u deze code in het systeembericht hard coden. Als u een grote hoeveelheid gegevens hebt waarvan het model op de hoogte moet zijn, kunt u insluitingen of een product zoals Azure AI Search gebruiken om de meest relevante informatie op het moment van de query op te halen.

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

Weinig shot learning met ChatML

U kunt ook enkele shotvoorbeelden aan het model geven. De benadering voor weinig shot learning is enigszins gewijzigd vanwege de nieuwe promptindeling. U kunt nu een reeks berichten opnemen tussen de gebruiker en de assistent in de prompt als enkele voorbeelden van schermafbeeldingen. Deze voorbeelden kunnen worden gebruikt om antwoorden te zaaien op veelgestelde vragen om het model te primen of om bepaalde gedragingen aan het model te leren.

Dit is slechts één voorbeeld van hoe u weinig shot learning kunt gebruiken met GPT-35-Turbo. U kunt experimenteren met verschillende benaderingen om te zien wat het beste werkt voor uw use-case.

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

Taal voor chatmarkeringen gebruiken voor niet-chatscenario's

ChatML is ontworpen om gesprekken met meerdere paden gemakkelijker te beheren, maar het werkt ook goed voor niet-chatscenario's.

Voor een scenario voor entiteitextractie kunt u bijvoorbeeld de volgende prompt gebruiken:

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

Onveilige gebruikersinvoer voorkomen

Het is belangrijk om oplossingen toe te voegen aan uw toepassing om veilig gebruik van de taal voor chatmarkeringen te garanderen.

We raden u aan te voorkomen dat eindgebruikers speciale tokens kunnen opnemen in hun invoer, zoals <|im_start|> en <|im_end|>. We raden u ook aan extra validatie op te nemen om ervoor te zorgen dat de prompts die u naar het model verzendt, goed zijn opgemaakt en de indeling chatmarkeringstaal volgen, zoals beschreven in dit document.

U kunt ook instructies geven in het systeembericht om het model te begeleiden bij het reageren op bepaalde typen gebruikersinvoer. U kunt bijvoorbeeld het model instrueren om alleen berichten over een bepaald onderwerp te beantwoorden. U kunt dit gedrag ook versterken met enkele voorbeelden van opnamen.

Gesprekken beheren

De tokenlimiet voor gpt-35-turbo 4096 tokens is. Deze limiet omvat het aantal tokens van zowel de prompt als de voltooiing. Het aantal tokens in de prompt in combinatie met de waarde van de max_tokens parameter moet onder 4096 blijven of u ontvangt een foutmelding.

Het is uw verantwoordelijkheid om ervoor te zorgen dat de prompt en voltooiing binnen de tokenlimiet vallen. Dit betekent dat u voor langere gesprekken het aantal token moet bijhouden en alleen het model een prompt verzendt die binnen de tokenlimiet valt.

In het volgende codevoorbeeld ziet u een eenvoudig voorbeeld van hoe u de afzonderlijke berichten in het gesprek kunt bijhouden.

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

Onder de tokenlimiet blijven

De eenvoudigste manier om onder de tokenlimiet te blijven, is door de oudste berichten in het gesprek te verwijderen wanneer u de tokenlimiet bereikt.

U kunt ervoor kiezen om altijd zoveel mogelijk tokens op te nemen terwijl u onder de limiet blijft of u kunt altijd een bepaald aantal eerdere berichten opnemen, ervan uitgaande dat deze berichten binnen de limiet blijven. Het is belangrijk om te onthouden dat het langer duurt om een reactie te genereren en hogere kosten in rekening te brengen dan kortere prompts.

U kunt het aantal tokens in een tekenreeks schatten met behulp van de Tiktoken Python-bibliotheek, zoals hieronder wordt weergegeven.

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]

Volgende stappen