[英語| 简体中文]
promptc-goは、 promptcのGO実装です。 promptc仕様を使用して、 promptcファイルを生成、分析、ビルド、コンパイル、および実行し、プロンプトエンジニアリングの方法を一般化することを目指しています。
promptc 、プロンプトエンジニアリング用のOpenAPIのような仕様です。
上記のプロンプトファイルは、gplv3の下でライセンスされているzinccat/zkitから採用されています
# As simple as it should be
$ promptc $prompt $input
チャット機能
$ promptc chatProsptC-Cliの詳細については、docs/cli.mdを参照してください。
構造化されたプロンプトファイル:
// [Optional] meta info
project: test
author: KevinZonda
license: MIT
version: 0.0 .1
// [Optional] define configs
conf: {
provider: openai
model: gpt - 3.5 - turbo
temperature: 0.5
stop: [ 'Hello' , '4.0' ]
}
// [Optional] define variable constraint
vars: {
x: int
// var x with int type
y: int { min : 0 , max : 10 }
z: int { min : 0 , max : 10 , default : '5' }
}
// [Optional] Birmingham-style define var
a: int { min : 0 , max : 10 }
// [Required] define prompts
prompts: [
// role: 'user' is meta info for ChatGPT
// to make it empty, use {}
'' 'role: ' user '
You Entered : { x }
Prompt Compiled : { %
if ( x == "1" ) {
result = "Hello" ;
} else {
result = "Word!" ;
}
% }
{ % Q % }
'' '
]シングルラインプロンプトファイル実験:
You Entered : { x }注記
シングルラインプロンプトファイルは現在、実験機能です。
生産環境で使用することはお勧めしません。
構造化されていないシングルラインプロンプトファイルを記述できます。
現在のpromptc-go 、 string 、 int 、 floatタイプをサポートしています。
// declare a variable
myName : string { minLen : 3 , maxLen : 10 , default : "John" }
// a var named `myName` of type `string`
// with default value "John"
// min length 3, max length 10
myAge : int { min : 18 , max : 100 , default : '18' }
// a var named `myAge` of type `int`
// with default value 18
// min value 18, max value 100
thisPrice : float { min : 0.01 , default : '0.01' }
// a var named `thisPrice` of type `float`
// with default value 0.01
// min value 0.01, and unlimited max value stringminLen :intmaxLen :intintmin :int64max :INT64floatmin :float64max :float64default :文字列{ role : 'user' }
xx { x } {{ x }} { %
if ( x > 12 ) {
result = "good" ;
} else {
result = "bad" ;
}
% }前の例では、 {}のすべてが可変になります{x}
{%%}のすべてはJSスクリプトになります{または}を表示したい場合は、代わりに{{または}}を使用します
プロンプトの最初の行は特別であり、このプロンプトの追加情報を提供します。
IE ChatGptのロール情報。例えば
role: 'user'
Show me more about {x}
空の追加情報を提供したい場合は、最初の行が非常に推奨されるので{}を使用してください。必要ではありませんが、HJSON Parseが失敗すると、 promptcプロンプトに最初の行を準備しますが、未定義の動作を十分に引き起こす可能性があります。
'''に{%Q%}を予約しました。これは、HJSONのマルチラインテキスト構文で簡単に行うことはできません。
例えば
This is reserved { % Q % } {{ % Q % }}にコンパイルされます
This is reserved ''' { % Q % }注記
プロンプトでJavaScriptを使用することは、実験機能です。
promptc-goJavaScriptランタイムとしてOTTOを使用します
警告
プロンプトでJavaScriptを使用すると、プロンプトが脆弱になり、潜在的なセキュリティ侵害を引き起こす可能性があります。
promptc-goそれについて一切責任を負いません。
promptc {%%}構文を使用して、JavaScriptスクリプトをプロンプトに埋め込むことをサポートしています。そして、それは2つのモードをサポートします:
標準モードでは、JSスクリプトを実行した後、PROMPTCはresult変数から結果を取得します。
You Entered : { x }
Prompt Compiled : { %
if ( x == "1" ) {
result = "Hello" ;
} else {
result = "Word!" ;
}
% } x = 1を入力すると、結果は次のとおりです。
You Entered: 1
Prompt Compiled: Hello
簡単なモードでは、PROMPTCはJSスクリプトの返された値から結果を取得します。そして、プロンプトの先頭にEを追加します。 ( {%E /*script here*/ %} )
You Entered : { x }
Prompt Compiled : { % E
if ( x == "1" ) {
return "Hello" ;
} else {
return "Word!" ;
}
% } x = 1を入力すると、結果は次のとおりです。
You Entered: 1
Prompt Compiled: Hello
簡単なモードでは、 returnステートメントを有効にするために、スクリプトが関数に巻き付けられます。
例:前の例で実行される実際のスクリプト:
result = ( function ( ) {
if ( x == "1" ) {
return "Hello"
} else {
return "Word!" ;
}
} ( )メタ情報は、特別なワイルドウェイ定義された変数として機能します(ただし、変数として扱われません)。
現在のサポートされているメタ情報:
project: test
author: KevinZonda
license: MIT
version: 0.0 .1必要に応じて、 varsセクションで同じ名前を定義できます。
// prompt1.promptc
project: test
author: KevinZonda
license: MIT
version: 0.0 .1
vars: {
x : int
}
// VarList:
// - x: string // prompt2.promptc
project: test
author: KevinZonda
license: MIT
version: 0.0 .1
vars: {
x: int
project: string
license: string { minLen : 12 }
}
// VarList:
// - x: string
// - project: string
// - license: string // prompt3.promptc
project: test
author: KevinZonda
license: MIT
version: 0.0 .1
prompts: [
'' '{}
{ %
console . log ( project ) ; // will print nothing
% }
'' '
]
// VarList:
// - project: string