FileSystemAdapter, SqliteAdapter 및 ActivereCordAdapter와 같은 저장 어댑터를 사용하여 생성 AI (일명 Chatgpt, OpenAi, et.Al. )에 사용되는 매개 변수화 된 프롬프트 (텍스트)를 관리합니다.
버전의 변경 사항 0.3.0- 키워드의 매개 변수 해시 값은 이제 단일 값 대신 배열입니다. 배열의 마지막 값은 항상 주어진 키워드에 사용 된 최신 값입니다. 이것은 AIA CLI 도구에서 읽기 라인 :: 히스토리 객체 편집의 사용을 지원하기 위해 수행되었습니다.
보석을 설치하고 다음을 수행하여 응용 프로그램의 보석에 추가하십시오.
bundle add prompt_manager
Bundler가 종속성을 관리하는 데 사용되지 않는 경우 다음을 수행하여 GEM을 설치하십시오.
gem install prompt_manager
예/simple.rb를 참조하십시오
예제/사용 _search_proc.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_]+ } } )/ REGEX에는 키워드를 추출하려면 괄호 () 캡처가 포함되어야합니다. 기본 regex는 /([[AZ _|]+])/ 입니다.
지침은 IBM JCL -JOB -CONTROL 언어의 예와 마찬가지로 두 문자 '/' - 슬래시 슬래시로 시작하는 프롬프트 텍스트의 줄입니다. 프롬프트는 지시 사항이 0 이상이 될 수 있습니다. 지시문에는 매개 변수가있을 수 있으며 키워드를 사용할 수 있습니다.
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 보석은 지시문 만 수집합니다. 이러한 지침을 실행하는 것은 일부 다운 스트림 프로세스까지 맡겨집니다. 다음은 신속한 다운 스트림 프로세스에서 지시문을 사용하는 방법에 대한 몇 가지 아이디어입니다.
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 와 동일한 디렉토리에 저장됩니다 (예제 디렉토리에서도).
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 디렉토리에는 rg (일명 ripgrep )를 사용하여 검색을 수행하고 선택을 fzf 하는 rgfzf 라는 bash 스크립트가 포함되어 있습니다.
예제/사용 _search_proc.rb를 참조하십시오
이 두 구성 옵션은 기간부터 시작 해야하는 String 객체입니다. " herlywise 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 객체를 프롬프트 파일로 반환합니다. Prompt 클래스 사용 프롬프트에 대해 path(prompt_id) 양식을 사용하십시오 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 Configuration 매개 변수는 프롬프트에 사용되는 컨텐츠를 포함하는 ActiveRecord::Base 또는 ApplicationRecord (Rails 응용 프로그램을 사용하는 경우)의 실제 클래스 이름입니다.
id_column 에는 "프롬프트 ID"내용이 포함 된 열의 이름이 포함되어 있습니다. String 또는 Symbol 값 일 수 있습니다.
text_column 에는 프롬프트의 실제 원시 텍스트가 포함 된 열의 이름이 포함되어 있습니다. 이 원시 텍스트에는 매개 변수 해시의 값으로 대체 될 키워드가 포함될 수 있습니다. 열 이름 값은 String 또는 Symbol 일 수 있습니다.
parameters_column 에는 프롬프트 텍스트에서 키워드를 대체하는 데 사용되는 매개 변수가 포함 된 열의 이름이 포함되어 있습니다. 데이터베이스 모델 의이 열은 직렬화 될 것으로 예상됩니다. ActiveRecordAdapter 에는 현재 직렬화가 JSON으로 수행된다고 가정하는 Kludge 비트의 코드가 있습니다. 매개 변수 _column의 값은 String 또는 Symbol 일 수 있습니다.
TODO : 직렬화를 사용할 수 있도록 Kludge를 수정하십시오.
스토리지 어댑터 의이 플러그인 개념을 예제 할 수있는 많은 가능성이 있습니다. 고려해야 할 사항은 다음과 같습니다.
Prompt_Manager의 기능을 향상시키기 위해 피드백 및 기고자를 찾고 있습니다.
https://github.com/madbomber/prompt_manager의 버그 보고서 및 풀 요청은 환영합니다.
보석은 MIT 라이센스의 조건에 따라 오픈 소스로 제공됩니다.