Pokud pracujete s obsahem, který vyžaduje specifické vstupy, nebo pokud poskytujete příklady jako v předchozí části, může být velmi užitečné jasně označit konkrétní části výzvy. Mějte na paměti, že vše, co napíšete, přichází do LLM jako jediná výzva – dlouhá sekvence tokenů.
Výstup můžete zlepšit použitím oddělovačů k ohraničení a označení konkrétních částí výzvy.
# ...
2
3def _assemble_chat_messages(content: str) -> list[dict]:
4 """Combine all messages into a well-formatted list of dicts."""
5 messages = [
6 {"role": "system", "content": SETTINGS["prompts"]["role_prompt"]},
7 {"role": "user", "content": SETTINGS["prompts"]["negative_example"]},
8 {"role": "system", "content": SETTINGS["prompts"]["negative_reasoning"]},
9 {"role": "assistant", "content": SETTINGS["prompts"]["negative_output"]},
10 {"role": "user", "content": SETTINGS["prompts"]["positive_example"]},
11 {"role": "system", "content": SETTINGS["prompts"]["positive_reasoning"]},
12 {"role": "assistant", "content": SETTINGS["prompts"]["positive_output"]},
13 {"role": "user", "content": f">>>>>\n{content}\n<<<<<"},
14 {"role": "user", "content": SETTINGS["prompts"]["instruction_prompt"]},
15 ]
16 return messages
Na řádku 13 zalomíte obsah chatu mezi >>>>>
a <<<<<
oddělovače. Označení částí výzvy pomocí oddělovačů může modelu pomoci sledovat, které tokeny by měl považovat za jednu významovou jednotku.
V předchozí části jste viděli, že chybějící oddělovače mohou vést k neočekávaným výsledkům. Můžete obdržet méně výstupu, než se očekávalo, jako v předchozím příkladu, nebo prázdnou odpověď. Ale můžete také obdržet výstup, který je zcela odlišný od toho, co chcete! Představte si například, že obsah chatu, který přeformátujete, obsahuje na konci otázku, například:
Můžete mi dát číslo vaší objednávky?
Pokud je tato otázka posledním řádkem vaší výzvy bez oddělovačů, pak LLM může pokračovat v imaginární konverzaci chatu tím, že na otázku odpoví imaginárním číslem objednávky. Zkuste to přidáním takové věty na konec aktuální výzvy!
Oddělovače mohou pomoci oddělit obsah a příklady od popisu úkolu. Mohou také umožnit odkazovat na konkrétní části vaší výzvy v pozdějším bodě výzvy.
Oddělovač může být libovolná posloupnost znaků , které by se obvykle neobjevily společně, například:
>>>>>
====
####
Na počtu znaků, které použijete, příliš nezáleží, pokud se ujistíte, že sekvence je relativně jedinečná. Kromě toho můžete přidat štítky těsně před nebo těsně za oddělovače:
START CONTENT>>>>>
obsah<<<<<END CONTENT
==== START
obsahEND ====
#### START EXAMPLES
příklady#### END EXAMPLES
Na přesném formátování také tolik nezáleží. Pokud označíte sekce tak, aby příležitostný čtenář mohl pochopit, kde začíná a končí významová jednotka, pak jste správně použili oddělovače.
Upravte výzvu tak, settings.toml
abyste přidali jasný odkaz na obsah s oddělovači a také oddělovač pro příklady, které jste přidali:
instruction_prompt = """Remove personally identifiable information
from >>>>>CONTENT<<<<<, only show the date,
and replace all swear words with "😤"
#### START EXAMPLES
------ Example Inputs ------
[support_tom] 2023-07-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2023-07-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
[support_tom] 2023-07-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2023-07-24T10:04:03+00:00 : Blast! You're right!
[support_amy] 2023-06-15T14:45:35+00:00 : Hello! How can I assist you today?
[greg_stone] 2023-06-15T14:46:20+00:00 : I can't seem to find the download link for my purchased software.
[support_amy] 2023-06-15T14:47:01+00:00 : No problem, Greg. Let me find that for you. Can you please provide your order number?
[greg_stone] 2023-06-15T14:47:38+00:00 : It's 1245789. Thanks for helping me out!
------ Example Outputs ------
[Agent] 2023-07-24 : What can I help you with?
[Customer] 2023-07-24 : I CAN'T CONNECT TO MY 😤 ACCOUNT
[Agent] 2023-07-24 : Are you sure it's not your caps lock?
[Customer] 2023-07-24 : 😤! You're right!
[Agent] 2023-06-15 : Hello! How can I assist you today?
[Customer] 2023-06-15 : I can't seem to find the download link for my purchased software.
[Agent] 2023-06-15 : No problem, ****. Let me find that for you. Can you please provide your order number?
[Customer] 2023-06-15 : It's ****. Thanks for helping me out!
#### END EXAMPLES
"""
S těmito úpravami vašeho instruction_prompt
, nyní konkrétně odkazujete na obsah jako >>>>>CONTENT<<<<<
v popisu vašeho úkolu. Tyto oddělovače odpovídají oddělovačům, které kód app.py
přidává při sestavování výzvy.
Také jste oddělili příklady, které poskytujete, pomocí #### START EXAMPLES
a #### END EXAMPLES
a rozlišujete mezi vstupy a očekávanými výstupy pomocí více pomlček ( ------
) jako oddělovačů.
Zatímco oddělovače vám mohou pomoci dosáhnout lepších výsledků, v tomto případě je váš výstup docela podobný tomu předchozímu:
[Agent] 2023-07-24 : What can I help you with?
[Customer] 2023-07-24 : I CAN'T CONNECT TO MY 😤 ACCOUNT
[Agent] 2023-07-24 : Are you sure it's not your caps lock?
[Customer] 2023-07-24 : 😤! You're right!
[Agent] 2023-06-15 : Hello! How can I assist you today?
[Customer] 2023-06-15 : I can't seem to find the download link for my purchased software.
[Agent] 2023-06-15 : No problem, ****. Let me find that for you. Can you please provide your order number?
[Customer] 2023-06-15 : It's ****. Thanks for helping me out!
Je patrné, že model zobrazuje pouze dvě ukázková data, která jste uvedli jako příklady. Je možné, že vaše výzva vede k něčemu podobnému, například k nadměrnému vybavení ? Používat skutečná data, která chcete sanitizovat, jako tréninková data stejně není dobrý nápad, takže to určitě v další části změníte.
V této části jste se dozvěděli, jak můžete pomocí oddělovačů objasnit různé části výzvy. Uvedli jste, která část výzvy je popis úlohy a která část obsahuje konverzace na chatu zákaznické podpory, a také příklady původního vstupu a očekávaného výstupu.