はじめに
こんにちは、今日は皆さんにとっても興味深いテクノロジー、オープンインタープリターについてお話しします。このツールを使って、プロンプトデータベースを作成しました。それだけでなく、アイアンマンのような開発体験もできたので、その楽しさを共有したいと思います。
オープンインタープリターとは?
オープンインタープリターは、自然言語でプログラムやデータベースを操作できるツールです。
プロンプトデータベースの仕様
- Google Chromeの拡張機能「プロンプトツクール」でプロンプトをエクスポート
- フォルダスクリプトを実行してファイルを分析し、データベースに登録
- プロンプトを分析して、タグを3つ生成
- 目的や行動を短い説明文で表現し、データベースに登録
開発手順
- SQLライトのスキーマをオープンインタプリタで作成
- ファイル情報を受け取り、Pythonプログラムで分析してデータベースに登録するソースをinterpreterに依頼
- 「テストしてください」と指示すると、テスト用のファイルを用意し、データベースに登録
4.フォルダアクション用のアップルスクリプト生成を依頼
5.フォルダアクションにスクリプトを設定
アイアンマン体験
このツールを使っていると、まるでアイアンマンのように「ジャービス、これを作って」と指示するだけで、必要なものが作成されます。特に、テストについては「テストしてみてください」と言うだけで、テスト用のファイルが生成され、テストが実行されました。
まとめ
オープンインタープリターを使うと、プログラミングがより直感的で楽しいものになります。プロンプトデータベースの作成も簡単で、アイアンマンのような開発体験ができました。是非、このツールを使って、新しい開発の形を体験してみてください。
注意事項
デバッグしながら手作業はありますが、最初のコードを生成してくれるだけでかなり簡単に作成できます。
オープンインタープリターはAPIの課金がかなりかかります。
履歴を毎回全部送信しているためと思われます。
テストでいろんな生成をやっていると数時間で15$ほど行ってしまいました。
一つのアクションがおわったら起動しなおして、履歴0から始めるとよいと思います。
参考リンク
promptDB.py
import os
import sys
import sqlite3
import openai
from datetime import datetime
# Set your OpenAI API key here
openai.api_key = 'your-key'
# Check if a file path is passed as an argument
if len(sys.argv) > 1:
file_path = sys.argv[1]
# Read the content of the file
with open(file_path, 'r') as file:
file_content = file.read()
# Use ChatGPT to analyze the file content
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=[
{'role': 'system', 'content': 'Prerequisite: You are a good analyst of AI prompts. No explanation or summary will be output. Lets consider it step by step. Goal: Output three tags that are important to users as analysis results. Process: Analyze the entire prompt included in the content and deeply understand the meaning of the written instructions. We deeply determine the purpose, meaning, and function of the tag, and extract simple tags as a result. Choose only the three tags that are most important to user value. Output the three tags as text separated by commas. One tag is either a word or a short structure (up to 100 characters) such as "to do ~", and one of each tag must be used. The tag or character string "~条件" is a fixed title and is not unique, so it will not be output. There is no need for summaries, summaries, or explanations. Tag evaluation criteria: Indicate the users purpose, indicate the nature of the function, indicate the reason for the action. Deliverables: Output only three comma-separated tags. '},
{'role': 'user', 'content': file_content}
]
)
# Get the analysis result
analysis_result = response.choices[0].message['content']
prompt = \
'前提条件:あなたはAIプロンプトの優秀な分析者です。深呼吸をしてステップバイステップで検討します。指示のない限り補足説明やまとめや指示の復唱は行いません'\
'#ゴール:ユーザーにとって重要なこのプロンプトの説明を出力します。'\
'#プロセス:'\
'・最初のAIプロンプトを抽出します。'\
'・プロンプトの全体を俯瞰して分析し書かれている指示の項目の意味を深く読み解いてください。'\
'・実行する目的と意味と機能を深く割り出してこのプロンプトの目的、意味、機能、効果をまとめて1文で出力します。'\
'#成果物:プロンプトの分析結果を300文字以下で出力します'
# Use ChatGPT to analyze the file content
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=[
{'role': 'system', 'content': prompt},
{'role': 'user', 'content': file_content}
]
)
# Get the analysis result
analysis_result2 = response.choices[0].message['content']
# Connect to the SQLite database
conn = sqlite3.connect('/Users/hayashieiichi/Desktop/prompt_database.sqlite')
# Create a cursor object
cur = conn.cursor()
# Get the current date and time in ISO 8601 format
current_date = datetime.now().isoformat()
# Execute a query to insert data into the table
cur.execute(
'INSERT INTO prompt_table (title, tag, prompt, registration_date, update_date, memo) VALUES (?, ?, ?, ?, ?, ?);',
(os.path.basename(file_path), analysis_result, file_content, current_date, current_date, analysis_result2)
)
# Commit the changes
conn.commit()
# Close the connection
conn.close()
else:
print('No file path provided.')
pythonRun.scpt
property pythonScriptPath : "/Users/hayashieiichi/Desktop/PromptDBProject/promptDB.py"
property pythonPath : "/Users/hayashieiichi/.pyenv/shims/python "
on adding folder items to this_folder after receiving addedItems
try
repeat with i from 1 to number of items in addedItems
set thisItem to item i of addedItems
set thisItemPath to quoted form of POSIX path of thisItem
set pythonCommand to pythonPath & pythonScriptPath & " " & thisItemPath
do shell script pythonCommand
end repeat
on error error_message number error_number
if the error_number is not -128 then
tell application "Finder"
activate
display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
end tell
end if
end try
end adding folder items to
SQL Lightスキーマ
CREATE TABLE prompt_table (
primary_key INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
tag TEXT,
prompt TEXT,
registration_date TEXT,
update_date TEXT,
memo TEXT
)