🗂

DAGワークフローエンジンを使ってノーコードで ChatGPT を自動化する手順(ゴールシークプロンプトの回答をメール送信)

2023/03/20に公開約5,300字

はじめに

この記事では、ChatGPT を無料で使えるワークフローエンジンである Dagu を用いて自動化する方法を紹介します。具体的には、YAML 定義を使用して ChatGPT の API を実行し、結果を自動的にメール送信する方法を紹介します。

DAG ワークフローエンジンとは

ワークフローエンジンとは、簡単に言えば、コンピュータで行うタスクを自動的に実行するためのツールです。単にタスクを単純に順番に実行するだけではなく、タスク同士の依存関係を指定し、同時並列でタスクを実行することができます。以下のようなグラフが DAG (Directed acyclic graph) です。

DAG

Dagu とは

Dagu は無料で使えるオープンソースの DAG ワークフローエンジンです。

特徴

  • DAG をノーコード(プログラミング不要)で作成できる
  • ブラウザ上から DAG の作成や実行など全ての操作ができる
  • コマンドを Mac にインストールするだけで使える

ChatGPT API を呼び出して、メールで回答を送る例

以下は ChatGPT の API を呼び出して、結果をメール送信する例です。

example

それぞれのステップが行うことは単純です。

  1. ChatGPT API を指定された質問文で呼び出す
  2. API のレスポンスから回答を抜き出す
  3. 回答を HTML メールで送信できるように変換する
  4. メールを送信する

結果として、以下のようなメールを受け取ることができます。

mail

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 のインストール

  1. Homebrew を使ってインストールできます。
brew install yohamta/tap/dagu
  1. インストールできたかどうかは、次のコマンドで確認できます。
dagu version

Dagu の起動

  1. Dagu は次のコマンドで起動できます。
dagu server
  1. ブラウザで http://localhost:8080 にアクセスしてみましょう。以下のような画面が表示されるはずです。
    top

ChatGPT ワークフローの作成

  1. 左側の三本線のメニューをクリックしましょう。以下は私の環境で表示される内容です。
    list
  2. 右上の「NEW」ボタンを押して、新しい DAG の名前 chatgpt_goalseek_example を入力しましょう。
  3. 右下の「EDIT」ボタンを押します。
    Edit
  4. 以下の内容を編集画面に貼り付けて保存します(「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キーとメール送信サーバの設定

  1. ChatGPT の APIキーを設定する
    以下のChatGPTのAPIキーのところを ChatGPT の API キーで書き換えます。
env:
  - OPENAI_API_KEY="ChatGPTのAPIキー"
  1. メール送信サーバを設定する
    Mailgun に登録すれば、無料でメールを送信することができます。以下のMailgun のユーザ名Mailgun のパスワードのところを Mailgun のユーザ名とパスワードで書き換えます。他のメールサービスでも大丈夫です。
smtp:
  host: "smtp.mailgun.org"
  port: "587"
  username: "Mailgun のユーザ名"
  password: "Mailgun のパスワード"
  1. 送り先の E メールアドレスを設定する
    以下のM送り先のメールアドレスのところを ChatGPT の回答を送りたいメールアドレスに書き換えます。
env:
  - MY_EMAIL="送り先のメールアドレス"

試しに実行してみる

右上の「START」のボタンを押すと、DAG を実行できます。テキストボックスに、ゴールシークのプロンプトで求めたいことを入れます。たとえば、「最高に面白いローグライクゲームのアイデア」を入れてみましょう。
dialog

実行状況がブラウザに表示されます。

status

エラーになったら、右上の「RETRY」ボタンを押してください。ChatGPT の API が重いときは、エラーになることがあります。

成功すると、以下のような画面になります。
success

そして次のようなメールが届きます。
result

まとめ

このように、ワークフローエンジンを使えば、ノーコードで ChatGPT の API 呼び出しを自動化することができます。

いつも似たようなプロンプトを実行している場合は、DAG を定義しておくと便利かもしれません。

ChatGPT の API の入力と出力を複数くみあわせれば、もっと面白いことができると思います。たとえば、ChatGPT の回答を、さらに API に渡して、改善したり、結果を変換させたりできます。DAG として定義すれば、並行処理で API を呼び出せるので、複数の ロールの ChatGPT を組み合わせるのにも便利です。

どんなことができるか、夢が広がりますね!

なお、Dagu は私が Go 言語を使って開発しているオープンソースのソフトウェアです。
よかったら開発に参加いただけるとうれしいです。

https://github.com/yohamta/dagu

Discussion

ログインするとコメントできます