Un langage de balisage simple mais élégant pour définir les invites AI en tant que code (APaC). Conçu pour être utilisé par les agents IA pour demander automatiquement d'autres systèmes IA.
PromptML est conçu pour permettre aux ingénieurs d'invites de définir les invites de l'IA de manière déterministe. Il s'agit d'un langage spécifique au domaine (DSL) qui définit les caractéristiques d'une invite, notamment le contexte, l'objectif, les instructions et ses métadonnées. Une invite régulière est une fusion de tous ces aspects en une seule entité. PromptML le divise en plusieurs sections et rend les informations explicites.
La grammaire de la langue peut être trouvée ici : grammar.lark
Installez promptml-cli
à partir d'ici : https://github.com/narenaryan/promptml-cli pour exécuter des programmes PromptML avec les modèles OpenAI et Google.
Le langage est simple. Vous démarrez les blocs avec l'annotation @
section. Une section se termine par le marqueur @end
. Les commentaires commencent par la touche #
. Les fichiers d'invite se terminent par l'extension .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
Voir prompt.pml pour connaître la syntaxe complète.
Les invites textuelles classiques sont de nature très abstraite. Les langages naturels sont très flexibles mais offrent le moins de fiabilité. Comment fournir du contexte à un système d'IA et demander quelque chose ? Ne devrions-nous pas le préciser explicitement. PromptML est une tentative de rendre explicite le contenu d'une invite avec un langage simple.
Vous trouverez ci-dessous les qualités que PromptML apporte au domaine de l'ingénierie des invites :
Premièrement, XML, JSON et YAML ne sont pas des langages DSL. Ce sont des formats de données qui peuvent représenter n'importe quelle forme de données. Deuxièmement, l’IA générative a besoin d’un langage de données strict mais flexible, avec des contraintes fixes qui évoluent avec le domaine.
PromptML est conçu exactement pour résoudre ces deux problèmes.
La grammaire du langage est influencée par XML et Ruby, donc si vous connaissez l'un d'entre eux, vous vous sentirez très à l'aise pour écrire des invites dans PromptML.
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'}
# }
Vous pouvez définir des variables dans le fichier promptML et les utiliser dans le context
et objective
de l'invite. Les variables sont définies dans la section @vars
et référencées à l'aide de la syntaxe $var
dans les sections context
ou objective
.
@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
Le document PromptML peut être sérialisé dans plusieurs formats tels que :
Les invites XML sont très bien comprises par les LLM et le code promptML peut être utilisé pour générer une invite XML comme celle-ci :
À partir de l'exemple précédent de ce fichier README, nous pouvons appeler une méthode to_xml()
sur un objet prompt
pour générer une invite XML.
# XML
serialized = prompt . to_xml ()
print ( serialized )
De même, vous pouvez générer respectivement une invite YAML ou JSON à partir du même objet :
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
Nous travaillons actuellement sur :
VSCode