FilesystemAdapter、SQLiteAdapter、ActivereCordadapterなどのストレージアダプターを使用して、生成AI(別名ChatGpt、Openai、 et.al )で使用されるパラメーター化プロンプト(テキスト)を管理します。
バージョン0.3.0の破壊変更- キーワードのパラメーターハッシュの値は、単一の値ではなく配列になりました。配列の最後の値は、常に指定されたキーワードに使用される最新の値です。これは、AIA CLIツールでreadline :: historyオブジェクト編集の使用をサポートするために行われました
宝石をインストールし、実行してアプリケーションのGemfileに追加します。
bundle add prompt_manager
バンドラーが依存関係の管理に使用されていない場合は、実行して宝石をインストールします。
gem install prompt_manager
例/simple.rbを参照してください
例を参照してください
prompt_manager GEMは、生成AIプロセスで使用するキーワードとディレクティブを持つプロンプトを管理する機能を提供します。
Gen-AIは、OpenAIから入手可能なものなどの大手言語モデル(LLM)として知られているものを使用して、人間の自然言語テキスト(「プロンプト」)の変換(「プロンプト」)の別のものを扱っています。パラメーター化されたプロンプトは、他のテキストがプロンプトに挿入される場所の所有者である埋め込みキーワード(パラメーター)があるものです。
Prompt_managerは、正規表現を使用して、プロンプト内のこれらのキーワードを識別します。キーワードをparametersハッシュのキーとして使用します。これは、jsonとして、シリアル化された形式のプロンプトテキストで保存されています。
デフォルトでは、正方形の括弧で囲まれた[UPPERCASE_TEXT]を一致させるテキストは、キーワードとして扱われます。 [キーワードにもスペースを持つことができます]とアンダースコア文字。
別の正規表現を設定して、キーワードパターンをカスタマイズできます。
# Use {{param}} style instead of [PARAM]
PromptManager :: Prompt . parameter_regex = /( { { [A-Za-z_]+ } } )/正規表現には、キーワードを抽出するには、括弧()のキャプチャを含める必要があります。デフォルトの正規表現は/([[AZ _|]+])/です。
ディレクティブとは、IBM JCLの昔と同じように、2人のキャラクター「//」 - スラッシュスラッシュから始まるプロンプトテキストの行です - ジョブコントロール言語。プロンプトには、ゼロ以上のディレクティブがあります。ディレクティブにはパラメーターがあり、キーワードを使用できます。
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メソッドによって返される配列内のエントリは、指令がプロンプト内で定義された順にあります。各エントリには2つの要素があります。
プロンプトのキーワードがその値に置き換えられた後に直接が収集されるため、プロンプトの一部として動的に生成されたディレクティブを持つことができます。例えば:
//[COMMAND] [OPTIONS]
# or
[SOMETHING]
... [コマンド]がいくつかのディレクティブ名に置き換えられます。 [何か]は「//ディレクティブオプション」に置き換えることができます
prompt_manager GEMはディレクティブのみを収集します。これらのディレクティブを実行することは、いくつかのダウンストリームプロセスまでのままになります。迅速なダウンストリームプロセスで指令をどのように使用できるかについてのアイデアを次に示します。
modsユーティリティに設定できます。それはあなたのアプリケーションがどのようにディレクティブをサポートしたいかどうかに至ります。
prompt_manager Gemはコメントを無視します。 「#」 - ポンド(別名ハッシュ)文字から始まる行は、行のコメントです。 「ファイルの終わりに終了する」行に続く行は、コメントと見なされます。基本的にファイルの終わりを「終了」します。そのラインに従うプロセスはありません。
宝石は空白の線も無視します。
ストレージアダプターはPromptManager::Promptクラスを実際のプロンプトを保持するストレージ機能に結び付けるクラスインスタンスです。現在、実装のために3つのストレージアダプターが計画されています。
PromptManager::Prompt 。ストレージアダプターは、プロンプトクラスで使用できる「追加」クラスまたはインスタンスメソッドを提供できます。新しいストレージアダプターの作成に関するガイダンスについてはtest/prompt_manager/prompt_test.rbを参照してください。
これは、開発された最初のストレージアダプターです。 ~/.promptsなどの指定されたprompts_dir (ディレクトリ)内のファイルシステム内のテキストファイルとしてプロンプトを保存します。別の例は、他の人が同じプロンプトを使用できるように、共有ファイルシステムにディレクトリを置くことです。
prompt IDは、テキストファイルのベースネームです。たとえば、 todo.txtプロンプトID todoのファイルです(例ディレクトリを参照してください。)
todoプロンプトIDのパラメーターは、 todo.jsonという名前のJSONファイルのtodo.txtと同じディレクトリに保存されます(Examples Directoryでも)。
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を提供すると、変換されます。相対パスは絶対パスに変換されます。
prompts_dirが存在しない場合、またはディレクトリではない場合、 ArgumentErrorは提起されます。
search_procのデフォルトはnilです。つまり、検索は基本的にすべてのプロンプトファイルを読み取り、検索用語を含むものを確認するデフォルトsearch方法によって事前に形成されます。検索用語が含まれていることが見つかった各プロンプトファイルのプロンプトIDの配列を返します。使用するプロンプトIDを返したアプリケーションを選択します。
ファイルを検索して選択する方法が高速です。たとえば、コマンドラインで使用できる専門の検索および選択ユーティリティがあります。 examples Directoryには、 rg ( ripgrep )を使用して検索を行い、 fzf選択して選択を行うrgfzfという名前のbashスクリプトが含まれています。
例を参照してください
これらの2つの構成オプションは、期間から始まる必要がある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クラスで使用する2つの新しい方法を追加します。
Pathnameオブジェクトをプロンプトファイルに返しますPromptクラスに対してpath(prompt_id)フォームを使用してくださいPromptのインスタンスがある場合は、 prompt.pathを使用します。
ActiveRecordAdapterは、プロンプトコンテンツを含むモデルを備えたprompt_managerを要求するアプリケーションプログラムによって既に設定されたデータベースが既にあることを前提としています。このモデルには、以下のコンテンツを含む少なくとも3つの列が必要です。
これらの3つの要素のモデルと列には、任意の名前を付けることができます。これらの名前は、構成ブロックのActiveRecordAdapterに提供されます。
configブロックを使用して、クラスの構成を確立します。
PromptManager::Promptクラスは、ストレージアダプタークラスのインスタンスを期待しています。 Convention Storage Adapter Class Configメソッドは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には、「プロンプトID」コンテンツを含む列の名前が含まれています。 StringまたはSymbol値のいずれかにすることができます。
text_columnには、プロンプトの実際の生のテキストが含まれる列の名前が含まれています。この生のテキストには、パラメーターハッシュの値に置き換えるキーワードを含めることができます。列名はStringまたはSymbolのいずれかです。
parameters_columnは、プロンプトテキストのキーワードを置き換えるために使用されるパラメーターを含む列の名前が含まれています。データベースモデルのこの列はシリアル化されると予想されます。 ActiveRecordAdapterには現在、シリアル化がJSONで行われると仮定するKludgeのコードがあります。パラメーター_Columnの値は、 StringまたはSymbolのいずれかです。
TODO:クラッジを修正して、シリアル化を使用できるようにします。
ストレージアダプターのこのプラグインの概念を例にとるには、多くの可能性があります。ここに考慮すべきいくつかがあります:
Prompt_managerの機能を強化するためのフィードバックと貢献者を探しています。
バグレポートとプルリクエストは、https://github.com/madbomber/prompt_managerのGithubで大歓迎です。
GEMは、MITライセンスの条件の下でオープンソースとして利用できます。