Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Modely řady GPT-3.5-Turbo, GPT-4 a GPT-4o jsou jazykové modely optimalizované pro konverzační rozhraní. Modely se chovají jinak než starší modely GPT-3. Předchozí modely fungovaly jako text na vstupu a text na výstupu, což znamená, že přijaly vstupní řetězec a vrátily doplněk k připojení k tomuto řetězci. Nejnovější modely jsou navrženy pro vstup ve formě konverzace a výstup ve formě zpráv. Modely očekávají, že vstup bude ve formátu chatu. Vrátí výsledek, který představuje modelem vytvořenou zprávu v chatu. Tento formát byl navržen speciálně pro víceotáčkové konverzace, ale může také dobře fungovat pro nehovorové scénáře.
Tento článek vás provede zahájením práce s modely dokončování chatu. Nejlepších výsledků dosáhnete pomocí zde popsaných technik. Nepokoušejte se pracovat s modely stejným způsobem jako se starší řadou modelů, protože modely jsou často podrobné a poskytují méně užitečné odpovědi.
Práce s modely dokončování chatu
Následující fragment kódu ukazuje nejzásadnější způsob interakce s modely, které používají rozhraní API pro dokončování chatu. Pokud tyto modely používáte programově poprvé, doporučujeme začít s rychlým průvodcem dokončením chatu.
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-10-21",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
response = client.chat.completions.create(
model="gpt-4o", # model = "deployment_name".
messages=[
{"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
{"role": "user", "content": "Who were the founders of Microsoft?"}
]
)
#print(response)
print(response.model_dump_json(indent=2))
print(response.choices[0].message.content)
{
"id": "chatcmpl-8GHoQAJ3zN2DJYqOFiVysrMQJfe1P",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Microsoft was founded by Bill Gates and Paul Allen. They established the company on April 4, 1975. Bill Gates served as the CEO of Microsoft until 2000 and later as Chairman and Chief Software Architect until his retirement in 2008, while Paul Allen left the company in 1983 but remained on the board of directors until 2000.",
"role": "assistant",
"function_call": null
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"created": 1698892410,
"model": "gpt-4o",
"object": "chat.completion",
"usage": {
"completion_tokens": 73,
"prompt_tokens": 29,
"total_tokens": 102
},
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
]
}
Microsoft was founded by Bill Gates and Paul Allen. They established the company on April 4, 1975. Bill Gates served as the CEO of Microsoft until 2000 and later as Chairman and Chief Software Architect until his retirement in 2008, while Paul Allen left the company in 1983 but remained on the board of directors until 2000.
Každá odpověď zahrnuje finish_reason
. Možné hodnoty pro finish_reason
jsou:
- stop: Rozhraní API vrátilo úplný výstup modelu.
-
délka: Neúplný výstup modelu z důvodu parametru
max_tokens
nebo limitu tokenu. - content_filter: Vynechaný obsah kvůli označení od našich filtrů obsahu.
- null: Odpověď rozhraní API stále probíhá nebo je neúplná.
Zvažte nastavení max_tokens
na mírně vyšší hodnotu než normální hodnotu. Vyšší hodnota zajistí, že model nezastaví generování textu, než dosáhne konce zprávy.
Práce s rozhraním API pro dokončování chatu
Modely pro dokončování konverzací OpenAI trénovala k přijímání vstupu, který je formátován jako konverzace. Parametr messages přebírá pole objektů zpráv s konverzací uspořádanou podle role. Pokud používáte rozhraní PYTHON API, použije se seznam slovníků.
Formát základního dokončování chatu je:
{"role": "system", "content": "Provide some context and/or instructions to the model"},
{"role": "user", "content": "The users messages goes here"}
Konverzace s jednou ukázkovou odpovědí následovanou otázkou by vypadala takto:
{"role": "system", "content": "Provide some context and/or instructions to the model."},
{"role": "user", "content": "Example question goes here."},
{"role": "assistant", "content": "Example answer goes here."},
{"role": "user", "content": "First question/message for the model to actually respond to."}
Systémová role
Role systému, označovaná také jako systémová zpráva, je zahrnuta na začátku pole. Tato zpráva obsahuje počáteční pokyny k modelu. V systémové roli můžete zadat různé informace, například:
- Stručný popis asistenta.
- Osobnostní vlastnosti asistenta.
- Pokyny nebo pravidla, podle kterého má asistent postupovat.
- Data nebo informace potřebné pro model, jako jsou relevantní otázky z nejčastějších dotazů.
Roli systému můžete přizpůsobit pro případ použití nebo zahrnout základní pokyny. Systémová role nebo zpráva je nepovinná, ale doporučujeme, abyste alespoň zahrnuli základní, abyste získali nejlepší výsledky.
Zprávy
Po roli systému můžete zahrnout řadu zpráv mezi user
a assistant
.
{"role": "user", "content": "What is thermodynamics?"}
Chcete-li vyvolat odpověď modelu, ukončete uživatelskou zprávu tak, aby označila, že je na řadě asistent se svou odpovědí. Můžete také zahrnout řadu ukázkových zpráv mezi uživatelem a asistentem jako způsob, jak provést učení s malým počtem příkladů.
Příklady zprávových výzev
Následující část ukazuje příklady různých stylů výzev, které můžete použít s modely dokončování chatu. Tyto příklady představují pouze výchozí bod. 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 model dokončování chatu choval podobně jako chatgpt.com, můžete použít základní systémovou zprávu, například Assistant is a large language model trained by OpenAI.
{"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
{"role": "user", "content": "Who were the founders of Microsoft?"}
Příklad s pokyny
V některých scénářích můžete chtít modelu poskytnout další pokyny, abyste definovali mantinely pro to, co model dokáže udělat.
{"role": "system", "content": "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. "},
{"role": "user", "content": "When are my taxes due?"}
Použití dat jako základ
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.
{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI in Azure AI Foundry Models. 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 provides REST API access to OpenAI's powerful language models including the GPT-3, Codex and Embeddings model series.
- Azure OpenAI 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."
},
{"role": "user", "content": "What is Azure OpenAI?"}
Učení s minimem příkladů s dokončováním konverzací
Modelu můžete také poskytnout příklady s několika ukázkami. Přístup pro učení s několika snímky se mírně změnil kvůli novému formátu výzvy. Do výzvy teď můžete zahrnout řadu zpráv mezi uživatelem a asistentem, a to v několika příkladech. Pomocí těchto příkladů můžete předložit odpovědi na běžné otázky k připravení modelu nebo naučit model konkrétnímu chování.
Tento příklad ukazuje, jak můžete použít few-shot učení s GPT-35-Turbo a GPT-4. Můžete experimentovat s různými přístupy a zjistit, co je pro váš případ použití nejvhodnější.
{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions. "},
{"role": "user", "content": "When do I need to file my taxes by?"},
{"role": "assistant", "content": "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."},
{"role": "user", "content": "How can I check the status of my tax refund?"},
{"role": "assistant", "content": "You can check the status of your tax refund by visiting https://www.irs.gov/refunds"}
Použití funkce dokončování chatu pro scénáře mimo chat
Rozhraní API pro dokončování chatu je navrženo tak, aby fungovalo pro rozhovory na více kol, ale funguje dobře i pro nehovorové scénáře.
Například pro scénář extrakce entit můžete použít následující výzvu:
{"role": "system", "content": "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": ""
}"},
{"role": "user", "content": "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?"}
Vytvořte základní smyčku konverzace
Zatím se v příkladech zobrazuje základní mechanika interakce s rozhraním API pro dokončování chatu. Tento příklad ukazuje, jak vytvořit smyčku konverzace, která provádí následující akce:
- Nepřetržitě přebírá vstup konzoly a správně ho formátuje jako součást seznamu zpráv jako obsah role uživatele.
- Odpovědi jsou vytištěny do konzole, naformátovány a přidány do seznamu zpráv jako obsah role asistenta.
Pokaždé, když se položí nová otázka, se spolu s nejnovější otázkou odešle průběžný přepis konverzace. Vzhledem k tomu, že model nemá paměť, musíte odeslat aktualizovaný přepis s každou novou otázkou nebo model ztratí kontext předchozích otázek a odpovědí.
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-10-21",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") # Your Azure OpenAI resource's endpoint value.
)
conversation=[{"role": "system", "content": "You are a helpful assistant."}]
while True:
user_input = input("Q:")
conversation.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-4o", # model = "deployment_name".
messages=conversation
)
conversation.append({"role": "assistant", "content": response.choices[0].message.content})
print("\n" + response.choices[0].message.content + "\n")
Když spustíte předchozí kód, zobrazí se prázdné okno konzoly. Do okna zadejte svou první otázku a pak klíč vyberte Enter
. Po vrácení odpovědi můžete proces zopakovat a pokládat otázky.
Správa konverzací
Předchozí příklad se spustí, dokud nedosáhnete limitu tokenu modelu. S každou otázkou a přijatou messages
odpovědí se seznam rozrůstá. Limit tokenů pro modely dokončování chatu se liší v různých modelech a verzích. Limity tokenů jsou gpt-4
gpt-4-32k
8 192 a 32 768. Mezi tato omezení patří počet tokenů ze seznamu zpráv odeslaných i odpovědí modelu. Počet tokenů v seznamu zpráv v kombinaci s hodnotou parametru max_tokens
musí zůstat pod těmito limity nebo se zobrazí chyba. Projděte si stránku modelů pro omezení a kontextová okna tokenů jednotlivých modelů.
Je vaší zodpovědností zajistit, aby výzva a dokončení spadají do limitu počtu tokenů. U delších konverzací je potřeba sledovat počet tokenů a modelu posílat pouze takové výzvy, které zůstávají v rámci limitu. Případně můžete použít rozhraní API pro odpovědi, které za vás zajistí zkrácení a správu historie konverzací.
Poznámka:
Důrazně doporučujeme zůstat v rámci zdokumentovaného vstupního limitu tokenu pro všechny modely, i když zjistíte, že tento limit můžete překročit.
Následující ukázka kódu ukazuje jednoduchý příklad smyčky chatu s technikou pro zpracování počtu 4 096 tokenů pomocí knihovny tiktoken openAI.
Tento kód používá tiktoken 0.5.1
. Pokud máte starší verzi, spusťte pip install tiktoken --upgrade
příkaz .
import tiktoken
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-10-21",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") # Your Azure OpenAI resource's endpoint value.
)
system_message = {"role": "system", "content": "You are a helpful assistant."}
max_response_tokens = 250
token_limit = 4096
conversation = []
conversation.append(system_message)
def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0613"):
"""Return the number of tokens used by a list of messages."""
try:
encoding = tiktoken.encoding_for_model(model)
except KeyError:
print("Warning: model not found. Using cl100k_base encoding.")
encoding = tiktoken.get_encoding("cl100k_base")
if model in {
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo-16k-0613",
"gpt-4-0314",
"gpt-4-32k-0314",
"gpt-4-0613",
"gpt-4-32k-0613",
}:
tokens_per_message = 3
tokens_per_name = 1
elif model == "gpt-3.5-turbo-0301":
tokens_per_message = 4 # every message follows <|start|>{role/name}\n{content}<|end|>\n
tokens_per_name = -1 # if there's a name, the role is omitted
elif "gpt-3.5-turbo" in model:
print("Warning: gpt-3.5-turbo may update over time. Returning num tokens assuming gpt-3.5-turbo-0613.")
return num_tokens_from_messages(messages, model="gpt-3.5-turbo-0613")
elif "gpt-4" in model:
print("Warning: gpt-4 may update over time. Returning num tokens assuming gpt-4-0613.")
return num_tokens_from_messages(messages, model="gpt-4-0613")
else:
raise NotImplementedError(
f"""num_tokens_from_messages() is not implemented for model {model}."""
)
num_tokens = 0
for message in messages:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == "name":
num_tokens += tokens_per_name
num_tokens += 3 # every reply is primed with <|start|>assistant<|message|>
return num_tokens
while True:
user_input = input("Q:")
conversation.append({"role": "user", "content": user_input})
conv_history_tokens = num_tokens_from_messages(conversation)
while conv_history_tokens + max_response_tokens >= token_limit:
del conversation[1]
conv_history_tokens = num_tokens_from_messages(conversation)
response = client.chat.completions.create(
model="gpt-35-turbo", # model = "deployment_name".
messages=conversation,
temperature=0.7,
max_tokens=max_response_tokens
)
conversation.append({"role": "assistant", "content": response.choices[0].message.content})
print("\n" + response.choices[0].message.content + "\n")
V tomto příkladu se po dosažení počtu tokenů odeberou nejstarší zprávy v přepisu konverzace. Kvůli efektivitě se používá del
místo pop()
. Začneme indexem 1, abychom vždy zachovali systémovou zprávu a odebrali pouze zprávy uživatele nebo asistenta. V průběhu času může tato metoda správy konverzace způsobit snížení kvality konverzace, protože model postupně ztratí kontext dřívějších částí konverzace.
Alternativním přístupem je omezit dobu trvání konverzace na maximální délku tokenu nebo určitý počet otočení. Po dosažení maximálního limitu tokenu by model ztratil kontext, pokud byste konverzaci umožnili pokračovat. Můžete vyzvat uživatele, aby zahájil novou konverzaci a vymazat seznam zpráv, aby zahájil novou konverzaci s dostupným limitem úplného tokenu.
Část kódu pro počítání tokenů, která byla ukázaná dříve, je zjednodušená verze jednoho z ukázkových příkladů kuchařky OpenAI.
Řešení problémů
Nepoužívejte syntaxi ChatML ani speciální tokeny s koncovým bodem dokončení chatu.
Někteří zákazníci se pokusí použít starší syntaxi ChatML s koncovými body dokončení chatu a novějšími modely. ChatML byla náhledová funkce, která fungovala pouze se starým rozhraním pro dokončování pomocí modelu gpt-35-turbo
verze 0301. Tento model je určený k vyřazení. Pokud se pokusíte použít syntaxi ChatML s novějšími modely a koncovým bodem dokončení chatu, může to vést k chybám a neočekávanému chování odpovědi modelu. Toto použití nedoporučujeme. K tomuto problému může dojít při použití běžných speciálních tokenů.
Kód chyby | Zpráva o chybě | Řešení |
---|---|---|
400 | 400 – Nepodařilo se vygenerovat výstup kvůli speciálním tokenům ve vstupu. | Výzva obsahuje speciální tokeny nebo starší tokeny ChatML, které model nebo koncový bod nerozpoznal nebo nepodporuje. Ujistěte se, že pole výzvy nebo zprávy neobsahuje žádné starší tokeny Nebo speciální tokeny ChatML. Pokud upgradujete ze starší verze modelu, před odesláním požadavku rozhraní API do modelu vyloučíte všechny speciální tokeny. |
Nepodařilo se vytvořit dokončení, protože model vygeneroval neplatný výstup unicode.
Kód chyby | Zpráva o chybě | Řešení problému |
---|---|---|
500 | 500 – InternalServerError: Kód chyby: 500 – {'error': {'message': 'Nepodařilo se dokončit vytvoření, protože model vygeneroval neplatný výstup Unicode'}}. | Výskyt těchto chyb můžete minimalizovat snížením teploty výzev na méně než 1 a zajištěním, že používáte klienta s logikou opakování. Opětovné nahrazování požadavku často vede k úspěšné odpovědi. |
Další kroky
- Další informace o Azure OpenAI.
- Začněte s modely pro dokončení chatu pomocí průvodce rychlým startem.
- Další příklady najdete v úložišti GitHub ukázek Azure OpenAI.