APaC(AI Prompts as Code)를 정의하기 위한 간단하면서도 우아한 마크업 언어입니다. AI 에이전트가 자동으로 다른 AI 시스템을 요청하는 데 사용하도록 제작되었습니다.
PromptML은 프롬프트 엔지니어가 결정론적인 방식으로 AI 프롬프트를 정의할 수 있는 방법을 제공하도록 구축되었습니다. 이는 컨텍스트, 목표, 지침 및 메타데이터를 포함하여 프롬프트의 특성을 정의하는 DSL(도메인 특정 언어)입니다. 일반 프롬프트는 이러한 모든 측면을 하나의 엔터티로 통합한 것입니다. PromptML은 이를 여러 섹션으로 분할하여 정보를 명시적으로 만듭니다.
언어 문법은 Grammar.lark에서 찾을 수 있습니다.
OpenAI 및 Google 모델로 PromptML 프로그램을 실행하려면 https://github.com/narenaryan/promptml-cli에서 promptml-cli
설치하세요.
언어는 간단합니다. @
섹션 주석으로 블록을 시작합니다. 섹션은 @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을 참조하세요.
일반 텍스트 프롬프트는 본질적으로 매우 추상적입니다. 자연어는 매우 유연하지만 안정성이 가장 낮습니다. AI 시스템에 대한 컨텍스트를 제공하고 질문하는 방법은 무엇입니까? 우리는 그것을 명시적으로 지정해서는 안 됩니다. PromptML은 프롬프트의 내용을 간단한 언어로 명시적으로 표현하려는 시도입니다.
PromptML이 프롬프트 엔지니어링 도메인에 제공하는 특성은 다음과 같습니다.
첫째, XML, JSON 및 YAML은 DSL 언어가 아닙니다. 이는 모든 형태의 데이터를 나타낼 수 있는 데이터 형식입니다. 둘째, 생성적 AI에는 도메인과 함께 발전하는 고정된 제약이 있는 엄격하면서도 유연한 데이터 언어가 필요합니다.
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
섹션에 정의되고 context
또는 objective
섹션에서 $var
구문을 사용하여 참조됩니다.
@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에서 매우 잘 이해되며, 프롬프트ML 코드를 사용하여 다음과 같은 XML 프롬프트를 생성할 수 있습니다.
이 README 파일의 이전 예제에서 prompt
객체에 대해 to_xml()
메서드를 호출하여 XML 프롬프트를 생성할 수 있습니다.
# XML
serialized = prompt . to_xml ()
print ( serialized )
마찬가지로 동일한 객체에서 각각 YAML 또는 JSON 프롬프트를 생성할 수 있습니다.
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
우리는 현재 다음을 위해 노력하고 있습니다:
VSCode
구문 강조 지원