لغة ترميزية بسيطة ولكنها أنيقة لتعريف مطالبات الذكاء الاصطناعي كرمز (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
راجع موجه.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'}
# }
يمكنك تحديد المتغيرات في ملف موجه واستخدامها في 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 جيدًا بواسطة LLMs ويمكن استخدام كود موجه XML لإنشاء مطالبة XML مثل هذا:
من المثال السابق في ملف README هذا، يمكننا استدعاء أسلوب to_xml()
على كائن prompt
لإنشاء موجه XML.
# XML
serialized = prompt . to_xml ()
print ( serialized )
وبالمثل، يمكنك إنشاء مطالبة YAML أو JSON على التوالي من نفس الكائن:
# JSON
prompt . to_json ()
# YAML
prompt . to_yaml ()
نحن نعمل حاليا على:
VSCode