Difyでredmineのチケットを読み込んでLLMで集計したり、チケットを登録・更新してみる

AI

Redmineの状態とAPIキーの取得

Redmineの状態

RedmineのAPIアクセスキーの取得

curlでのAPI操作

RedmineとのAPIのやり取りのイメージを掴むために、まずはじめに、コマンドラインを使ってやり取りをしてみます。

コマンドは、curlやwgetというHTTPクライアントツールを用います。これらコマンドでAPIにアクセスして欲しい情報を取得したり、チケットを登録や更新、削除をしたりすることができます。

DifyでもHTTPリクエストのツールを用いることで、cURL(=curl)でアクセスした値を取ってきたり、UIをそのまま活用してアクセスするなどもできますが、それは後ほどサンプルを上げるとしてひとまずcurlによるアクセスのサンプルを以下にご紹介します。

redmineが、localhostで、ポート番号 8004、URLパスが/redmineで設定された想定です。

チケットの一覧取得

curl -X GET \
-H "X-Redmine-API-Key: APIアクセスキー" \
http://localhost:8004/redmine/issues?staus_id=5

※ 上記はstatus_id=5 (終了)でフィルタしたものの一覧が出力されます

チケットのコメントを全部取得する

curl -X GET \
-H "X-Redmine-API-Key: APIアクセスキー" \
http://localhost:8004/redmine/issues/1.json?include=children,journals

※ include=journalsでコメントが出力されます。チケット番号の後ろに .json をつけるとJSONでの出力、.xml とつけるとXMLで出力されます。上記例はJSONとなります。

コメント文の追加

コメントを追加する際には、issue番号を指定されているURI指定出ないとだめなので、以下のような感じになります。PUTメソッドを使いますのでご注意。

curl -X PUT \
-H "Content-Type: application/json" \
-H "X-Redmine-API-Key: APIアクセスキー" \
-d '{"issue": {"notes": "追加したいコメント文"}}' \
http://localhost:8004/redmine/issues/1.json

アクセス例

ご参考まで。(簡便のため、URLの部分をURLと略させていただいております。)

機能コマンド
プロジェクト一覧表示curl -X GET \
-H "X-Redmine-API-Key: APIアクセスキー" \
http://URL/projects.json
プロジェクト詳細表示curl -X GET \
-H "X-Redmine-API-Key: APIアクセスキー" \
http://URL/projects/プロジェクトのID.json
プロジェクトの作成curl -X POST \
-H "Content-Type: application/json" \
-H "X-Redmine-API-Key: APIアクセスキー" \
-d '{"project":{"name":"プロジェクトID","identifier":"プロジェクトの識別子"}}' \
http://URL/projects.json
プロジェクトの更新curl -X PUT \
-H "Content-Type: application/json" \
-H "X-Redmine-API-Key: APIアクセスキー" \
-d '{"project":{"description":"説明の内容"}}" \
http://URL/projects/プロジェクトのID.json
プロジェクトの削除curl -X DELETE \
-H "Content-Type: application/json" \
-H "X-Redmine-API-Key: APIアクセスキー" \
http://URL/projects/プロジェクトのID.json

DifyのHTTPリクエストで操作する(DifyのRedmineツールを使わない方法)

issue一覧を取得

まずは、issue一覧を取得するHTTPリクエストブロックを追加してみます。

先程のcurlで指定していたAPIアクセスキーのヘッダの部分は「認証APIキー」から右のような「認証」のダイアログが出るので必要な情報を入力します。フィルタにしていたstatus_idはパラメータ欄に入力します。出力された値は、次のブロックへ、sys.queryとして引き継がれます。
※HTTPリクエストでは、Difyからアクセスすることになるので、URL指定はDockerなどを使ってRedmineとDifyを別々に起動している場合は、localhostではまずいかもしれない。

  • 認証タイプ  : APIキー
  • API認証タイプ :カスタム
  • ヘッダー   : X-Redmine-API-Key
  • APIキー    : redmineのアクセスキー

取得した一覧を順番に処理する

例えば、issueで取得したチケット一覧のコメントを順番に取得したいとします。上記で作成したissue取得の「HTTPリクエスト」で得たsys.queryの値を、「パラメータ抽出」でissueのidをArrayに放り込んで、イテレーションで順に回すという感じになります。

上記の画像ではGETのURLがIPアドレスがlocalhostではなくなっていますが、これは私の環境がRedmineサーバとDifyサーバがdockerで別々に起動しているためなので同じサーバで直接起動させている場合はlocalhostのままで大丈夫です

このような処理は毎回全件に対して行うのはLLMをローカルで立ち上げているなら良いですが、有料のAPIを使っていると大変なトークン数になり課金がやばいことになるので、例えば、チケットが終了になったことを受けてそのチケットのみLLMに要約させるなどといった処理にしたほうが良いと思います。

ちなみに、「ループ」ブロックでも処理でもできるのですが、ループでは100ループの上限設定があるため、チケットを一括処理するようなケースでは使いづらいと思います。

DifyのRedmineツールの導入

と、HTTPリクエストでAPIを操作すれば色々できなくもないのですが、そこは折角ツールがあるので、楽をしましょう!ということで、以下よりRedmineツールを使った方法を試してみました!

DifyのRedmineツール

Difyの上部にある以下の「ツール」を選択し、Redmineを検索します

以下の「レッドマイン」のツールが出てきますのでインストールしてください。

DifyのRedmineツールにRedmineのAPIとURLを登録

チケットの一覧表示

開始フィールドの入力値をchat変数に代入

Redmineツールの「チケット一覧取得」ブロックを追加

RedmineのAPIを利用して一覧が取得されtext変数に代入される

LLMブロックにより一覧表示を指示する

SYSTEMではLLMに渡す指示の内、共通的な内容のプロンプトを記載し、USERには個別に変化するようなものを指定したプロンプトにするイメージです。ここでは、Redmineから抽出されたtextの変数の値をchatの変数でどのように修正するのかをUSER欄に書くのが良いかもしれません。

LLMで加工された変数textを出力する

この一覧取得は、デフォルト25件、最大100件と一回ですべてのチケットを処理するには少ない。が、オフセットが設定できるため全件取得するには取得件数ステップごとのチケットの終わりに達するまでループさせ集計しつつ変数に代入するという処理を入れる必要がありそう。

どんな値をどのように集計したいかで処理が変わるため、折を見て具体例を作ってみようと思います。

チケットの削除

このツールではチケットの削除機能はないようです。

チケットの登録

マップ全体

「IF/ELSE」ブロックの設定

「パラメータ抽出」ブロックの設定

Redmineツールの「チケットを作成」ブロック

タイトルとURLをコピーしました