Un lenguaje de marcado simple pero elegante para definir mensajes de IA como código (APaC). Creado para ser utilizado por agentes de IA para solicitar automáticamente otros sistemas de IA.
PromptML está diseñado para proporcionar una forma para que los ingenieros de mensajes definan los mensajes de IA de forma determinista. Este es un lenguaje específico de dominio (DSL) que define las características de un mensaje, incluido el contexto, el objetivo, las instrucciones y sus metadatos. Un mensaje regular es una fusión de todos estos aspectos en una sola entidad. PromptML lo divide en varias secciones y hace que la información sea explícita.
La gramática del idioma se puede encontrar aquí: grammar.lark
Instale promptml-cli
desde aquí: https://github.com/narenaryan/promptml-cli para ejecutar programas PromptML con modelos OpenAI y Google.
El lenguaje es simple. Comienzas los bloques con la anotación de sección @
. Una sección termina con el marcador @end
. Los comentarios comienzan con la tecla #
. Los archivos de aviso terminan con la extensión .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 la sintaxis completa.
Las indicaciones de texto habituales son de naturaleza muy abstracta. Los lenguajes naturales son muy flexibles pero proporcionan menor confiabilidad. ¿Cómo proporcionar contexto a un sistema de IA y preguntar algo? ¿No deberíamos especificar eso explícitamente? PromptML es un intento de hacer explícito el contenido de un mensaje con un lenguaje simple.
A continuación se detallan las cualidades que PromptML aporta al dominio de la ingeniería rápida:
Primero, XML, JSON y YAML no son lenguajes DSL. Son formatos de datos que pueden representar cualquier forma de datos. En segundo lugar, la IA generativa necesita un lenguaje de datos estricto pero flexible con restricciones fijas que evolucionen junto con el dominio.
PromptML está diseñado exactamente para resolver esos dos problemas.
La gramática del lenguaje está influenciada por XML y Ruby, por lo que si conoce alguno de ellos, se sentirá muy cómodo escribiendo indicaciones en 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'}
# }
Puede definir variables en el archivo PromptML y utilizarlas en el context
y objective
del mensaje. Las variables se definen en la sección @vars
y se hace referencia a ellas mediante la sintaxis $var
en las secciones context
o 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
El documento PromptML se puede serializar en múltiples formatos como:
Los LLM entienden muy bien los mensajes XML y el código PromptML se puede utilizar para generar un mensaje XML como este:
Del ejemplo anterior en este archivo README, podemos llamar a un método to_xml()
en un objeto prompt
para generar una solicitud XML.
# XML
serialized = prompt . to_xml ()
print ( serialized )
De manera similar, puedes generar un mensaje YAML o JSON respectivamente desde el mismo objeto:
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
Actualmente estamos trabajando en:
VSCode