Eine einfache, aber elegante Auszeichnungssprache zum Definieren von AI Prompts as Code (APaC). Entwickelt für die Verwendung durch KI-Agenten, um automatisch nach anderen KI-Systemen zu fragen.
PromptML wurde entwickelt, um Prompt-Ingenieuren die Möglichkeit zu bieten, die KI-Prompts auf deterministische Weise zu definieren. Hierbei handelt es sich um eine domänenspezifische Sprache (DSL), die Merkmale einer Eingabeaufforderung definiert, einschließlich Kontext, Ziel, Anweisungen und deren Metadaten. Eine reguläre Eingabeaufforderung ist eine Verschmelzung all dieser Aspekte zu einer Einheit. PromptML unterteilt es in mehrere Abschnitte und macht die Informationen explizit.
Die Sprachgrammatik finden Sie hier: grammar.lark
Installieren Sie promptml-cli
von hier aus: https://github.com/narenaryan/promptml-cli, um PromptML-Programme mit OpenAI- und Google-Modellen auszuführen.
Die Sprache ist einfach. Sie beginnen Blöcke mit @
-Abschnittsanmerkung. Ein Abschnitt endet mit @end
-Markierung. Kommentare werden mit #
-Taste gestartet. Die Eingabeaufforderungsdateien enden mit der Erweiterung .pml
.
@prompt
# Add task context
@context
@end
# Add task objective
@objective
# This is the final question or ask
@end
# Add one or more instructions to execute the prompt
@instructions
@step
@end
@end
# Add one or more examples
@examples
@example
@input
# Add your example input
@end
@output
# Add your example output
@end
@end
@end
# Add task constraints
@constraints
@length min: 1 max: 10 @end
@end
# Add prompt category
@category
@end
# Add custom metadata
@metadata
@end
@end
Die vollständige Syntax finden Sie in prompt.pml.
Reguläre Textaufforderungen sind sehr abstrakter Natur. Natürliche Sprachen sind sehr flexibel, bieten jedoch die geringste Zuverlässigkeit. Wie kann man einem KI-System einen Kontext bereitstellen und etwas fragen? Sollten wir das nicht explizit angeben? PromptML ist ein Versuch, den Inhalt einer Eingabeaufforderung mit einer einfachen Sprache explizit zu machen.
Nachfolgend sind die Qualitäten aufgeführt, die PromptML in den Bereich Prompt Engineering bringt:
Erstens sind XML, JSON und YAML keine DSL-Sprachen. Dabei handelt es sich um Datenformate, die jede Form von Daten darstellen können. Zweitens benötigt generative KI eine strenge, aber dennoch flexible Datensprache mit festen Einschränkungen, die sich mit der Domäne weiterentwickeln.
PromptML wurde genau zur Lösung dieser beiden Probleme entwickelt.
Die Sprachgrammatik wird von XML und Ruby beeinflusst. Wenn Sie also eine davon kennen, werden Sie sich beim Schreiben von Eingabeaufforderungen in PromptML sehr wohl fühlen.
pip install -r requirements.txt
from promptml . parser import PromptParser
promptml_code = '''
@prompt
@context
This is the context section.
@end
@objective
This is the objective section.
@end
@instructions
@step
Step 1
@end
@end
@examples
@example
@input
Input example 1
@end
@output
Output example 1
@end
@end
@end
@category
Prompt Management
@end
@constraints
@length min: 1 max: 10 @end
@end
@metadata
top_p: 0.9
n: 1
team: promptml
@end
@end
'''
parser = PromptParser ( promptml_code )
prompt = parser . parse ()
print ( prompt )
# Output: {
# 'context': 'This is the context section.',
# 'objective': 'This is the objective section.',
# 'category': 'Prompt Management',
# 'instructions': ['Step 1'],
# 'examples': [
# {'input': 'Input example 1', 'output': 'Output example 1'}
# ],
# 'constraints': {'length': {'min': 1, 'max': 10}},
# 'metadata': {'top_p': 0.9, 'n': 1, 'team': 'promptml'}
# }
Sie können Variablen in der promptML-Datei definieren und sie im context
und objective
der Eingabeaufforderung verwenden. Die Variablen werden im @vars
-Abschnitt definiert und mithilfe $var
Syntax entweder im context
oder objective
referenziert.
@vars
name = "John Doe"
@end
@prompt
@context
You are a name changing expert.
@end
@objective
You have to change the name: $name to an ancient name.
@end
@end
PromptML-Dokumente können in mehrere Formate serialisiert werden, z. B.:
XML-Eingabeaufforderungen werden von LLMs sehr gut verstanden und promptML-Code kann verwendet werden, um eine XML-Eingabeaufforderung wie diese zu generieren:
Aus dem vorherigen Beispiel in dieser README-Datei können wir eine to_xml()
Methode für ein prompt
aufrufen, um eine XML-Eingabeaufforderung zu generieren.
# XML
serialized = prompt . to_xml ()
print ( serialized )
Ebenso können Sie aus demselben Objekt eine YAML- bzw. JSON-Eingabeaufforderung generieren:
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
Wir arbeiten derzeit an:
VSCode
Syntax