DAGワークフローエンジンを使ってノーコードで ChatGPT を自動化する手順(ゴールシークプロンプトの回答をメール送信)
はじめに
この記事では、ChatGPT を無料で使えるワークフローエンジンである Dagu を用いて自動化する方法を紹介します。具体的には、YAML 定義を使用して ChatGPT の API を実行し、結果を自動的にメール送信する方法を紹介します。
DAG ワークフローエンジンとは
ワークフローエンジンとは、簡単に言えば、コンピュータで行うタスクを自動的に実行するためのツールです。単にタスクを単純に順番に実行するだけではなく、タスク同士の依存関係を指定し、同時並列でタスクを実行することができます。以下のようなグラフが DAG (Directed acyclic graph) です。
Dagu とは
Dagu は無料で使えるオープンソースの DAG ワークフローエンジンです。
特徴
- DAG をノーコード(プログラミング不要)で作成できる
- ブラウザ上から DAG の作成や実行など全ての操作ができる
- コマンドを Mac にインストールするだけで使える
ChatGPT API を呼び出して、メールで回答を送る例
以下は ChatGPT の API を呼び出して、結果をメール送信する例です。
それぞれのステップが行うことは単純です。
- ChatGPT API を指定された質問文で呼び出す
- API のレスポンスから回答を抜き出す
- 回答を HTML メールで送信できるように変換する
- メールを送信する
結果として、以下のようなメールを受け取ることができます。
ChatGPT をゴールシークの質問を自動化する手順
ここではゴールシークを自動化するためにゴールシークのプロンプトを使います。なお DAG の内容を書き換えれば、どんなプロンプトでも同じように自動化できます。
利用するプロンプト
[Goal] ゴール
a[0,0]=[Goal]
a[i,1-5]=a[i,0]を達成するためのアイデアを5つ出したものです。
a[i+1,0]=a[i,1-5]の中で最も良いと思われるアイデアです。これを用いi=0-5まで計算した上、結果をHTMLの5行5列合計25マスの表にしてください。
Dagu のインストール
- Homebrew を使ってインストールできます。
brew install yohamta/tap/dagu
- インストールできたかどうかは、次のコマンドで確認できます。
dagu version
Dagu の起動
- Dagu は次のコマンドで起動できます。
dagu server
- ブラウザで http://localhost:8080 にアクセスしてみましょう。以下のような画面が表示されるはずです。
ChatGPT ワークフローの作成
- 左側の三本線のメニューをクリックしましょう。以下は私の環境で表示される内容です。
- 右上の「NEW」ボタンを押して、新しい DAG の名前
chatgpt_goalseek_example
を入力しましょう。 - 右下の「EDIT」ボタンを押します。
- 以下の内容を編集画面に貼り付けて保存します(「SAVE」ボタン)。
params: GOAL="Unique and interesting bullet-hell game."
env:
- OPENAI_API_KEY="ChatGPTのAPIキー"
- MY_EMAIL="送り先のメールアドレス"
- FORMAT: >-
a[0,0]=[Goal]\n
a[i,1-5]=a[i,0]を達成するためのアイデアを5つ出したものです。\n
a[i+1,0]=a[i,1-5]の中で最も良いと思われるアイデアです。\n
\n
これを用いi=0-5まで計算した上、結果をHTMLの5行5列合計25マスの表にしてください。\n
smtp:
host: "smtp.mailgun.org"
port: "587"
username: "Mailgun のユーザ名"
password: "Mailgun のパスワード"
steps:
- name: ask chatgpt
executor:
type: http
config:
timeout: 1200
headers:
Authorization: "Bearer $OPENAI_API_KEY"
Content-Type: "application/json"
silent: true
body: |
{ "model": "gpt-3.5-turbo", "messages": [
{"role": "system", "content": "Act as a state-of-art chat AI. Please output the result in a table format with 5 rows and 5 columns. Format your reply in HTML code styled with beautiful CSS. Use Japanese."},
{"role": "user", "content": "[Goal]${GOAL}\n${FORMAT}"}
]
}
command: POST https://api.openai.com/v1/chat/completions
output: API_RESPONSE
- name: get result
executor:
type: jq
config:
raw: true
command: ".choices[0].message.content"
script: "$API_RESPONSE"
output: MESSAGE_CONTENT
depends:
- ask chatgpt
- name: convert escaped unicode to plain HTML
command: "sh"
script: |
input="${MESSAGE_CONTENT}"
unescaped=$(echo -e "$input" | sed 's/\\u003c/</g' | sed 's/\\u003e/>/g')
echo "$unescaped"
output: MESSAGE_CONTENT
depends:
- get result
- name: send mail
executor:
type: mail
config:
to: "$MY_EMAIL"
from: "$MY_EMAIL"
subject: "goal seek result"
message: "$MESSAGE_CONTENT"
depends:
- convert escaped unicode to plain HTML
ChatGPT APIキーとメール送信サーバの設定
- ChatGPT の APIキーを設定する
以下のChatGPTのAPIキー
のところを ChatGPT の API キーで書き換えます。
env:
- OPENAI_API_KEY="ChatGPTのAPIキー"
- メール送信サーバを設定する
Mailgun に登録すれば、無料でメールを送信することができます。以下のMailgun のユーザ名
とMailgun のパスワード
のところを Mailgun のユーザ名とパスワードで書き換えます。他のメールサービスでも大丈夫です。
smtp:
host: "smtp.mailgun.org"
port: "587"
username: "Mailgun のユーザ名"
password: "Mailgun のパスワード"
- 送り先の E メールアドレスを設定する
以下のM送り先のメールアドレス
のところを ChatGPT の回答を送りたいメールアドレスに書き換えます。
env:
- MY_EMAIL="送り先のメールアドレス"
試しに実行してみる
右上の「START」のボタンを押すと、DAG を実行できます。テキストボックスに、ゴールシークのプロンプトで求めたいことを入れます。たとえば、「最高に面白いローグライクゲームのアイデア」を入れてみましょう。
実行状況がブラウザに表示されます。
エラーになったら、右上の「RETRY」ボタンを押してください。ChatGPT の API が重いときは、エラーになることがあります。
成功すると、以下のような画面になります。
そして次のようなメールが届きます。
まとめ
このように、ワークフローエンジンを使えば、ノーコードで ChatGPT の API 呼び出しを自動化することができます。
いつも似たようなプロンプトを実行している場合は、DAG を定義しておくと便利かもしれません。
ChatGPT の API の入力と出力を複数くみあわせれば、もっと面白いことができると思います。たとえば、ChatGPT の回答を、さらに API に渡して、改善したり、結果を変換させたりできます。DAG として定義すれば、並行処理で API を呼び出せるので、複数の ロールの ChatGPT を組み合わせるのにも便利です。
どんなことができるか、夢が広がりますね!
なお、Dagu は私が Go 言語を使って開発しているオープンソースのソフトウェアです。
よかったら開発に参加いただけるとうれしいです。
Discussion