作業手順
例:CIにDifyを組み込む
- Difyでワークフローを作成する
a. 入力の受け付け方 - DifyにてAPI-Keyを発行する
- CI中にDifyのAPIに対してPOSTを送信する
- responseを解析する
作業手順の詳細
-
Difyでワークフローを作成する
内容は問いませんが、ひとまずDifyにて任意のワークフローを完成させます。
a. 入力の受け付け方
[開始]ステップにて通常通り、入力フィールドを追加すれば後述するPOSTにて任意の値をDifyに送信できます。
-
DifyにてAPI-Keyを発行する
画面左側のサイドバーにある[APIアクセス]を押下
APIアクセスの画面右上にある[🔑APlキー]を押下
[+新しいシークレットキーを作成]を押下
この値を後続の作業で使用するのでコピーしておく
-
以下のように、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\": \"このクエリはやばい\"}"
},
(中略)
}
}