Управляйте параметризованными подсказками (текстом), используемыми в генеративном AI (AKA CHATGPT, OPENAI, ET.AL. ) Используя адаптеры хранилища, такие как файловый стиль, SQLiteAdapter и ActivereCordAdapter.
Разрыв изменения в версии 0.3.0 - значение хэша параметров для ключевого слова теперь является массивом вместо одного значения. Последнее значение в массиве всегда является самым последним значением, используемым для данного ключевого слова. Это было сделано для поддержки использования редактирования объекта в истории в инструменте AIA CLI
Установите драгоценный камень и добавьте в Gemfile приложения, выполнив:
bundle add prompt_manager
Если Bundler не используется для управления зависимостями, установите GEM, выполнив:
gem install prompt_manager
Смотрите примеры/simple.rb
См. Также примеры/Использование_SEARCH_PROC.RB
Gem Gem prompt_manager предоставляет функциональность для управления подсказками, которые имеют ключевые слова и директивы для использования с генеративными процессами ИИ.
Gen-AI имеет дело с конверсией (некоторые сказали бы исполнение) текста естественного языка человека («подсказка»), чтобы немного других, используя так называемые модели крупных языков (LLM), такие как те, которые доступны от OpenAI. Параметризованная подсказка - это та, в котором существуют встроенные ключевые слова (параметры), которые являются держателями места для другого текста, который должен быть вставлен в приглашение.
Rasfor_manager использует регулярное выражение для определения этих ключевых слов в рамках приглашения. Он использует ключевые слова в качестве ключей в хэш parameters , который хранится с приглашенным текстом в сериализованной форме - например, в качестве JSON.
По умолчанию любое сопоставление текста [UPPERCASE_TEXT] , заключенное в квадратные скобки, рассматривается как ключевое слово. [Ключевые слова также могут иметь пробелы], а также подчеркивающий символ.
Вы можете настроить шаблон ключевого слова, установив другое регулярное выражение:
# Use {{param}} style instead of [PARAM]
PromptManager :: Prompt . parameter_regex = /( { { [A-Za-z_]+ } } )/ Рекомендация должна включать захват скобки () для извлечения ключевого слова. Регусная эксплуатация по умолчанию составляет /([[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
Получить директивы от подсказки так же просто, как и «Получить Kewyords»:
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]
... где [команда] заменяется каким -то директивой именем. [Что -то] можно заменить на «Параметры директивы» //
prompt_manager Gem собирает только директивы. Выполнение этих директив остается до некоторого потока. Вот несколько идей о том, как директивы можно использовать в быстрого процесса вниз по течению:
mods .Все зависит от того, как ваше приложение хочет поддерживать директивы или нет.
prompt_manager Gem игнорирует комментарии. Линия, которая начинается с символа '#' - pound (aka hash) - это линейный комментарий. Любые строки, которые следуют за строкой, которая является окончанием в конце файла, рассматриваются комментарии. В основном « конец » конец файла. Ничто не является процессом, следуя этой линии.
Драгоценный камень также игнорирует пустые линии.
Адаптер хранения - это экземпляр класса, который связывает PromptManager::Prompt class с хранилищем, который имеет фактические подсказки. В настоящее время для реализации запланировано 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 - это NIL, что означает, что поиск будет предварительно сформирован методом search по умолчанию, который в основном читает все файлы подсказок, чтобы увидеть, какие из них содержат термин поиска. Он вернет массив идентификаторов запросов для каждого найденного файла приглашения, который содержит термин поиска. Приложение, чтобы выбрать, какое возвращение идентификатор подсказки для использования.
Есть более быстрые способы поиска и выбора файлов. Например, есть специализированные утилиты поиска и выбора, которые доступны для командной строки. Справочник examples содержит сценарий bash с именем rgfzf , который использует rg (AKA ripgrep ) для выполнения поиска и fzf для выбора.
См. Примеры/Использование_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. Его цель состоит в том, чтобы предоставить историю значений, из которых пользователь может выбрать, чтобы повторить предыдущее значение или выбрать предыдущее значение TA и отредактировать его во что -то новое.
FileSystemAdapter добавляет два новых метода для использования в классе Prompt :
Pathname в файл приглашения Используйте форму path(prompt_id) по сравнению Prompt Prompt классом prompt.path
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 есть код Kludge, который предполагает, что сериализация выполняется с JSON. Значение параметров_колона может быть либо String , либо Symbol .
TODO: Исправьте Kludge, чтобы можно было использовать любую сериализацию.
Есть много возможностей для примера этой концепции плагина адаптера хранения. Вот некоторые для рассмотрения:
В поисках обратной связи и участников для повышения возможностей rescment_manager.
Отчеты об ошибках и запросы на тягу приветствуются на GitHub по адресу https://github.com/madbomber/prompt_manager.
Драгоценный камень доступен в качестве открытого исходного кода в соответствии с условиями лицензии MIT.