1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubActionsを使い、pull requestの内容に従ってDifyでいろいろする

Posted at

作業手順

例:CIにDifyを組み込む

  1. Difyでワークフローを作成する
    a. 入力の受け付け方
  2. DifyにてAPI-Keyを発行する
  3. CI中にDifyのAPIに対してPOSTを送信する
  4. responseを解析する

作業手順の詳細

  1. Difyでワークフローを作成する

    内容は問いませんが、ひとまずDifyにて任意のワークフローを完成させます。

    image.png

    a. 入力の受け付け方

    [開始]ステップにて通常通り、入力フィールドを追加すれば後述するPOSTにて任意の値をDifyに送信できます。

    image.png

  2. DifyにてAPI-Keyを発行する

    画面左側のサイドバーにある[APIアクセス]を押下

    image.png

    APIアクセスの画面右上にある[🔑APlキー]を押下

    image.png

    [+新しいシークレットキーを作成]を押下

    image.png

    この値を後続の作業で使用するのでコピーしておく

  3. 以下のように、curlを使用して、Difyへリクエストを送信し、レスポンスを受け取るようなステップを書く

    - id: analyze-sql-files
      if: 'is_pull_request && changed_files > 0'
      do:
        run: |
          # 変更されたSQLファイルを取得
          FILES=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files[].path' | grep '\.sql$')
          if [ -n "$FILES" ]; then
            for file in $FILES; do
              CONTENT=$(cat $file)
              # Dify APIにリクエストを送信
              RESPONSE=$(curl -s "${DIFY_API_ENDPOINT}/workflows/run" \
                -H "Content-Type: application/json" \
                -H "Authorization: Bearer ${DIFY_API_KEY}" \
                -d '{
                  "inputs": {"mode":"1", "file_changed":"'"$CONTENT"'"},
                  "response_mode": "blocking",
                  "user": "{ユーザー名}"
                }')
    

    ※公式ドキュメントを参考に調整してください。

説明
inputs Difyの入力フィールドに従い、値を設定
response_mode blocking:実行完了後に一括で結果を返す。streaming:タイプライターのように逐次結果を返す
user Difyを実行するDifyユーザー名

4 . responseを解析する

よくある困ったこと

Difyからの返答が文字化けしている

curlで日本語を出力しようとすると、unicodeが日本語に変換されずに出力されてしまう

\u64cd\u4f5c\u5185\u5bb9…

解決法

以下のように jq をパイプ(|)で繋いであげると、日本語にしてくれる

user_dai ~ % curl -X POST 'https://dify.xxx/v1/workflows/run' \
(中略)
  "user": "dai"
}' | jq                                                   
{
(中略)
  "outputs": {
   "text": "json{\"is_warning\": \"false\", \"reason\": \"このクエリはやばい\"}"
  },
(中略)
 }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?