Простой, но элегантный язык разметки для определения подсказок AI как кода (APaC). Создан для использования агентами ИИ для автоматического запроса других систем ИИ.
PromptML создан, чтобы предоставить инженерам подсказок возможность определять подсказки ИИ детерминированным способом. Это доменно-ориентированный язык (DSL), который определяет характеристики подсказки, включая контекст, цель, инструкции и их метаданные. Обычная подсказка — это объединение всех этих аспектов в одно целое. PromptML разбивает его на несколько разделов и делает информацию явной.
Грамматику языка можно найти здесь: grammar.lark.
Установите promptml-cli
отсюда: https://github.com/narenaryan/promptml-cli, чтобы запускать программы PromptML с моделями OpenAI и Google.
Язык простой. Вы начинаете блоки с аннотации раздела @
. Раздел заканчивается маркером @end
. Комментарии начинаются с клавиши #
. Файлы подсказок заканчиваются расширением .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
Полный синтаксис см. в файле Prompt.pml.
Обычные текстовые подсказки очень абстрактны по своей природе. Естественные языки очень гибки, но обеспечивают наименьшую надежность. Как обеспечить контекст для системы искусственного интеллекта и что-то спросить? Разве мы не должны указать это явно? PromptML — это попытка выразить содержимое приглашения простым языком.
Ниже приведены качества, которые PromptML привносит в область оперативного проектирования:
Во-первых, XML, JSON и YAML не являются языками DSL. Это форматы данных, которые могут представлять любую форму данных. Во-вторых, генеративному ИИ нужен строгий, но гибкий язык данных с фиксированными ограничениями, которые развиваются вместе с предметной областью.
PromptML создан именно для решения этих двух проблем.
На языковую грамматику влияют XML и Ruby, поэтому, если вы знаете какой-либо из них, вам будет очень удобно писать подсказки в 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'}
# }
Вы можете определить переменные в файле PromptML и использовать их в context
и objective
приглашения. Переменные определяются в разделе @vars
и упоминаются с использованием синтаксиса $var
либо в разделах context
, либо в разделах 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
Документ PromptML можно сериализовать в несколько форматов, например:
Подсказки XML очень хорошо понимаются LLM, и код PromptML можно использовать для создания подсказок XML следующим образом:
В предыдущем примере в этом файле README мы можем вызвать метод to_xml()
для объекта prompt
, чтобы сгенерировать приглашение XML.
# XML
serialized = prompt . to_xml ()
print ( serialized )
Аналогичным образом вы можете создать приглашение YAML или JSON соответственно из одного и того же объекта:
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
В настоящее время мы работаем над:
VSCode