Uma linguagem de marcação simples, mas elegante, para definir prompts de IA como código (APaC). Criado para ser usado por agentes de IA para solicitar automaticamente outros sistemas de IA.
PromptML foi desenvolvido para fornecer uma maneira para os engenheiros de prompt definirem os prompts de IA de maneira determinística. Esta é uma linguagem específica de domínio (DSL) que define as características de um prompt incluindo contexto, objetivo, instruções e seus metadados. Um prompt regular é um amálgama de todos esses aspectos em uma entidade. PromptML o divide em várias seções e torna as informações explícitas.
A gramática do idioma pode ser encontrada aqui: gramática.lark
Instale promptml-cli
aqui: https://github.com/narenaryan/promptml-cli para executar programas PromptML com modelos OpenAI e Google.
A linguagem é simples. Você inicia os blocos com a anotação @
. Uma seção termina com o marcador @end
. Os comentários são iniciados com a tecla #
. Os arquivos de prompt terminam com extensão .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
Consulte prompt.pml para ver a sintaxe completa.
Os prompts de texto regulares são de natureza muito abstrata. As linguagens naturais são muito flexíveis, mas oferecem menos confiabilidade. Como fornecer contexto para um sistema de IA e perguntar algo? Não deveríamos especificar isso explicitamente. PromptML é uma tentativa de tornar explícito o conteúdo de um prompt com uma linguagem simples.
Abaixo estão as qualidades que o PromptML traz para o domínio da engenharia imediata:
Primeiro, XML, JSON e YAML não são linguagens DSL. São formatos de dados que podem representar qualquer forma de dados. Em segundo lugar, a IA generativa precisa de uma linguagem de dados rigorosa, mas flexível, com restrições fixas que evoluem junto com o domínio.
PromptML foi criado exatamente para resolver esses dois problemas.
A gramática da linguagem é influenciada por XML e Ruby, portanto, se você conhece algum deles, se sentirá muito confortável escrevendo prompts no 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'}
# }
Você pode definir variáveis no arquivo promptML e usá-las no context
e objective
do prompt. As variáveis são definidas na seção @vars
e referenciadas usando a sintaxe $var
nas seções 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
O documento PromptML pode ser serializado em vários formatos, como:
Os prompts XML são muito bem compreendidos pelos LLMs e o código promptML pode ser usado para gerar um prompt XML como este:
Do exemplo anterior neste arquivo README, podemos chamar um método to_xml()
no objeto prompt
para gerar um prompt XML.
# XML
serialized = prompt . to_xml ()
print ( serialized )
Da mesma forma, você pode gerar um prompt YAML ou JSON, respectivamente, a partir do mesmo objeto:
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
Atualmente estamos trabalhando em:
VSCode