إدارة المطالبات المعلمة (النص) المستخدمة في الذكاء الاصطناعي (AKA chatgpt ، Openai ، et.al. ) باستخدام محولات التخزين مثل ملفات fileystemadapter و sqliteadapter و activereCordAdapter.
كسر التغيير في الإصدار 0.3.0 - أصبحت قيمة تجزئة المعلمات للكلمة الرئيسية الآن صفيفًا بدلاً من قيمة واحدة. القيمة الأخيرة في الصفيف هي دائمًا أحدث قيمة تستخدم للكلمة الرئيسية المحددة. تم القيام بذلك لدعم استخدام خط القراءة :: تاريخ التحرير في أداة AIA CLI
قم بتثبيت الأحجار الكريمة وأضف إلى Gemfile للتطبيق من خلال التنفيذ:
bundle add prompt_manager
إذا لم يتم استخدام Bundler لإدارة التبعيات ، فقم بتثبيت الأحجار الكريمة عن طريق التنفيذ:
gem install prompt_manager
انظر أمثلة/simple.rb
انظر أيضًا أمثلة/use_search_proc.rb
توفر GEM prompt_manager وظائف لإدارة المطالبات التي لها كلمات رئيسية وتوجيهات للاستخدام مع عمليات الذكاء الاصطناعى التوليدي.
يتعامل Gen-AI مع التحويل (قد يقول البعض التنفيذ) لنص اللغة الطبيعية البشرية ("المطالبة") إلى شيء آخر باستخدام ما يُعرف باسم نماذج اللغة الكبيرة (LLM) مثل تلك المتاحة من Openai. المطالبة المعلمة هي تلك التي توجد فيها كلمات رئيسية مضمنة (المعلمات) والتي هي حاملي مكان لنص آخر يتم إدراجها في المطالبة.
يستخدم raster_manager تعبيرًا منتظمًا لتحديد هذه الكلمات الرئيسية داخل المطالبة. يستخدم الكلمات الرئيسية كمفاتيح في تجزئة parameters التي يتم تخزينها مع النص المطري في نموذج تسلسلي - على سبيل المثال مثل JSON.
بشكل افتراضي ، يتم التعامل مع أي نص مطابقة [UPPERCASE_TEXT] المرفق بين قوسين مربعة ككلمة رئيسية. [يمكن أن تحتوي الكلمات الرئيسية أيضًا على مساحات] بالإضافة إلى شخصية السفلية.
يمكنك تخصيص نمط الكلمة الرئيسية عن طريق تعيين تعبير منتظم مختلف:
# Use {{param}} style instead of [PARAM]
PromptManager :: Prompt . parameter_regex = /( { { [A-Za-z_]+ } } )/ يجب أن يتضمن regex التقاط قوسين () لاستخراج الكلمة الرئيسية. regex الافتراضي هو /([[AZ _|]+])/ .
التوجيه هو سطر في النص السريع الذي يبدأ بحرفتين "//" - Slash Slash - تمامًا كما في الأيام الخوالي من لغة التحكم في الوظائف IBM JCL. يمكن أن يكون للمطالبة توجيهات صفر أو أكثر. يمكن أن يكون للتوجيهات معلمات ويمكن أن تستخدم الكلمات الرئيسية.
يجمع prompt_manager التوجيهات فقط. إنه يستخرج الكلمات الرئيسية من خطوط التوجيه ويوفر استبدال تلك الكلمات الرئيسية بنص آخر تمامًا كما هو الحال بالنسبة للمطالبة.
فيما يلي مثال على ملف نصي موجه مع التعليقات والتوجيهات والكلمات الرئيسية:
# prompts/sing_a_song.txt
# Desc: Has the computer sing a song
//TextToSpeech [LANGUAGE] [VOICE NAME]
Say the lyrics to the song [SONG NAME]. Please provide only the lyrics without commentary.
__END__
Computers will never replace Frank Sinatra
من السهل الحصول على توجيهات من مطالبة
prompt = PromptManager :: Prompt . new ( ... )
prompt . keywords #=> an Array
prompt . directives #=> an Array of entries like: ['directive', 'parameters']
# to_s builds the prompt by substituting
# values for keywords amd removing comments.
# The resulting text contains directives and
# prompt text ready for the LLM process.
puts prompt . to_s الإدخالات الموجودة في الصفيف التي يتم إرجاعها بواسطة طريقة prompt.directives يتم تحديد طريقة تحديد التوجيهات داخل المطالبة. كل إدخال له عنصرين:
نظرًا لأن التوجيهات يتم جمعها بعد استبدال الكلمات الرئيسية في المطالبة لقيمها ، فمن الممكن أن يكون هناك توجيهات تم إنشاؤها ديناميكيًا كجزء من مطالبة. على سبيل المثال:
//[COMMAND] [OPTIONS]
# or
[SOMETHING]
... حيث يتم استبدال [Command] ببعض اسم التوجيه. [شيء] يمكن استبداله بـ "// خيارات التوجيه"
يجمع GEM prompt_manager التوجيهات فقط. يتم تنفيذ تلك التوجيهات حتى بعض عمليات دفق أسفل. فيما يلي بعض الأفكار حول كيفية استخدام التوجيهات في عملية المصب السريع:
mods .الأمر كله يتعلق بكيفية يريد طلبك دعم التوجيهات أم لا.
تتجاهل GEM prompt_manager التعليقات. الخط الذي يبدأ مع شخصية "#" - الجنيه (الملقب) - هو تعليق خط. أي خطوط تتبع سطرًا ينتهي في نهاية الملف يعتبر تعليقات. أساسا " نهاية " نهاية الملف. لا شيء هو عملية اتباع هذا الخط.
جوهرة تتجاهل أيضا خطوط فارغة.
محول التخزين هو مثيل فئة يربط فئة PromptManager::Prompt إلى منشأة تخزين تحمل المطالبات الفعلية. يوجد حاليًا 3 محولات تخزين مخططة للتنفيذ.
PromptManager::Prompt لدعم مجموعة صغيرة من الأساليب. يمكن أن يوفر محول التخزين فئة "إضافية" أو طرق مثيل يمكن استخدامها من خلال فئة المطالبة. راجع test/prompt_manager/prompt_test.rb للحصول على إرشادات حول إنشاء محول تخزين جديد.
هذا هو أول محول تخزين تم تطويره. إنه يحفظ المطالبات كملفات نصية داخل نظام الملفات داخل prompts_dir مخصصة (دليل) مثل ~/.prompts أو حيث يكون الأمر أكثر منطقية بالنسبة لك. مثال آخر هو أن يكون لديك دليلك على نظام ملفات مشترك حتى يتمكن الآخرون من استخدام المطالبات نفسها.
prompt ID هو الاسم الأساسي للملف النصي. على سبيل المثال todo.txt هو ملف todo المعرف الموجه (انظر دليل الأمثلة.)
يتم حفظ المعلمات الخاصة بمعرف موجه todo في نفس الدليل مثل todo.txt في ملف JSON يدعى todo.json (أيضًا في دليل الأمثلة.)
استخدم كتلة config لإنشاء التكوين للفئة.
PromptManager :: Storage :: FileSystemAdapter . config do | o |
o . prompts_dir = "path/to/prompts_directory"
o . search_proc = nil # default
o . prompt_extension = '.txt' # default
o . params_extension = '.json' # default
end تُرجع كتلة config self ، مما يعني أنه يمكنك القيام بذلك لإعداد محول التخزين باستخدام فئة المطالبة:
PromptManager :: Prompt
. storage_adapter =
PromptManager :: Storage :: FileSystemAdapter
. config do | config |
config . prompts_dir = 'path/to/prompts_dir'
end . new هذا إما String أو كائن Pathname . يتم الحفاظ على جميع مسارات الملفات في الفصل ككائنات Pathname . إذا قمت بتقديم String ، فسيتم تحويلها. سيتم تحويل المسارات النسبية إلى مسارات مطلقة.
سيتم رفع ArgumentError عندما لا يكون موجودات prompts_dir أو إذا لم يكن دليلًا.
الافتراضي لـ search_proc هو لا يعني أن البحث سيتم تشكيله بواسطة طريقة search الافتراضية التي تقرأ بشكل أساسي جميع الملفات المطالبة لمعرفة المصطلح الذي يحتوي على مصطلح البحث. سيعيد مجموعة من معرفات المطالبة لكل ملف موجه وجد يحتوي على مصطلح البحث. الأمر متروك للتطبيق لتحديد أي معرف موجه الذي تم إرجاعه لاستخدامه.
هناك طرق أسرع للبحث واختيار الملفات. على سبيل المثال ، هناك أدوات بحث واختيار متخصصة متاحة لخط الأوامر. يحتوي دليل examples على برنامج bash المسمى rgfzf يستخدم rg (ويعرف أيضًا باسم ripgrep ) للقيام بالبحث و fzf للقيام بالاختيار.
انظر أمثلة/use_search_proc.rb
خياران التكوين هما كائنات String يجب أن تبدأ بفترة ". utherwise سيتم رفع ArgumentError .
حاليًا ، يدعم FileSystemAdapter فقط جهاز تجزئة JSON لتجزئة المعلمات. سيؤدي استخدام أي قيم أخرى لهذه الامتدادات إلى حدوث مشاكل.
وهي موجودة بحيث يكون هناك منصة يمكن بناء محولات التخزين الأخرى إليها أو إضافة مسلسلات. هذا ليس حاليا على خريطة الطريق.
# ~/.prompts/joke.txt
# Desc: Tell some jokes
Tell me a few [KIND] jokes about [SUBJECT]
لاحظ خطوط الأوامر في الأعلى. هذه اتفاقية أستخدمها. إنه ليس جزءًا من البرنامج. أجد أنه من المفيد توثيق المطالبة.
{
"[KIND]" : [
" pun " ,
" family friendly "
],
"[SUBJECT]" : [
" parrot " ,
" garbage man " ,
" snowman " ,
" weather girl "
]
}القيمة الأخيرة في صفيف الكلمة الرئيسية هي أحدث قيمة تستخدم لهذه الكلمة الرئيسية. هذه وظيفة أنشئة منذ V0.3.0. الغرض منه هو توفير تاريخ من القيم التي يمكن للمستخدم تحديدها لتكرار قيمة سابقة أو تحديد القيمة السابقة وتعديلها إلى شيء جديد.
يضيف FileSystemAdapter طريقتين جديدتين للاستخدام بواسطة فئة Prompt :
Pathname إلى ملف المطالبة استخدم نموذج path(prompt_id) مقابل فئة Prompt ، استخدم prompt.path عندما يكون لديك مثيل Prompt
يفترض ActiveRecordAdapter أن هناك قاعدة بيانات تم تكوينها بالفعل من قبل برنامج التطبيق الذي يتطلب prompt_manager يحتوي على نموذج يحتوي على محتوى موجه. يجب أن يحتوي هذا النموذج على ثلاثة أعمدة على الأقل تحتوي على محتوى:
يمكن أن يكون للنموذج والأعمدة لهذه العناصر الثلاثة أي اسم. يتم توفير هذه الأسماء إلى ActiveRecordAdapter في كتلة التكوين الخاصة بها.
استخدم كتلة config لإنشاء التكوين للفئة.
تتوقع PromptManager::Prompt Class مثيلًا لفئة محول التخزين. بواسطة أساليب تكوين فئة تخزين المؤتمرات ، ستعود self بحيث يقوم new بسيطة بعد التهيئة بإنشاء المثيل.
PromptManager :: Prompt
. storage_adapter =
PromptManager :: Storage :: ActiveRecordAdapter . config do | config |
config . model = DbPromptModel # any ActiveRecord::Base model
config . id_column = :prompt_name
config . text_column = :prompt_text
config . parameters_column = :prompt_params
end . new # adapters an instances of the adapter class معلمة تكوين model هي اسم الفئة الفعلي لـ ActiveRecord::Base أو ApplicationRecord (إذا كنت تستخدم تطبيق Rails) يحتوي على المحتوى المستخدم للمطالبات.
يحتوي id_column على اسم العمود الذي يحتوي على محتوى "معرف المطالبة". يمكن أن تكون إما String أو قيمة Symbol .
يحتوي text_column على اسم العمود الذي يحتوي على النص الخام الفعلي للمطالبة. يمكن أن يتضمن هذا النص الخام الكلمات الرئيسية التي سيتم استبدالها بقيم من تجزئة المعلمات. يمكن أن تكون قيمة اسم العمود إما String أو Symbol .
يحتوي parameters_column على اسم العمود الذي يحتوي على المعلمات المستخدمة لاستبدال الكلمات الرئيسية في نص المطالبة. من المتوقع أن يتم تسلسل هذا العمود في نموذج قاعدة البيانات. يحتوي ActiveRecordAdapter حاليًا على جزء من الكود يفترض أن التسلسل يتم مع JSON. يمكن أن تكون قيمة Parameters_Column إما String أو Symbol .
TODO: إصلاح kludge بحيث يمكن استخدام أي تسلسل.
هناك العديد من الاحتمالات على سبيل المثال مفهوم البرنامج المساعد لمحول التخزين. إليك بعض للنظر فيها:
البحث عن ردود الفعل والمساهمين لتعزيز قدرة orgred_manager.
يتم الترحيب بتقارير الأخطاء وطلبات السحب على Github على https://github.com/madbomber/prompt_manager.
الجوهرة متوفرة كمصدر مفتوح بموجب شروط ترخيص معهد ماساتشوستس للتكنولوجيا.