Dify作る自分AI その2

第5回ワークショップの1回目は見ていただけましたか?
自分だけのAIが、簡単に作成でき公開までできました。

OpenAI社のGPTsを使えば同じようなものが公開できますが、GPTsの場合にはChatGPTに固定され、Difyのように自由にAIモデルを組み合わせることができません。

今回は、更に使いやすくし最終的には自動化も狙います(今回のワークショップでは自動化までは含まれていません)。

作りたいモノ

今回作りたいモノは、以下のものです。

  • Googleスプレッドシートのセルにキーワード、コンテキストを入力
  • ボタンをクリックするとDifyのブログライターから記事を取得
  • Difyは記事作成をGoogle Gemini Pro1.5にお願いする。

そんなメンドウなことをしないでも、「Difyで公開したアプリを使えば良いのでは?」

と思われるかもしれませんが、

  • 作成した記事をWordPressへワンクリック投稿
  • Difyで画像作成アプリを作り記事へ追加
  • Googleのトリガーを使用しての自動化

などの拡張を考えると、アプリをGoogleスプレッドシートにまとめるのは一番簡単で効果的な方法と考えます。

手順

では最終形に向かう手順です。

  • DifyアプリをAPIで使ってみる。
  • Googleスプレッドシート上で実行できるプログラムにする。

DifyアプリをAPIで使ってみる

前回の作業でブログライターを公開しました。公開方法は、以下の3つです。

  • Webアプリとして公開
  • サイトへ埋め込み
  • APIでの公開

まずは、PC(コンソール–黒い画面)からアプリを使ってみます。プログラム化は、手作業を行い、その作業をコードにしていくことです。

APIキーの取得

誰でも自由にアクセスできるのではなく、APIでのアクセスにはAPIキーと呼ばれるカギが必要です。

作成したアプリにアクセスし、左側メニューから「APIアクセス」をクリックします。

APIの解説ページの右上に「APIキー」ボタンがありますのでクリックします。

ダイアログが開きます。「新しいシークレットキーを作成」ボタンをクリックします。

別なダイアログが開き、APIシークレットキーが表示されます。右の「コピー」アイコンでコピーします。

閉じると、作成したAPIシークレットキーが表示します。

APIの使い方

APIアクセスページに使い方は書いてあるのですが、正直分かりません。
取りあえずコンソールを起動して、書いてあるコマンドを入力します。

送るデータは、”inputs”に入れるようですが、何を入れて良いのか分からないので、適当に「title」、「languate」、「context」として送信しました。

「curl」はコマンドからサーバーへデータを送信するプログラムです。

Mac、Windowsとも別途インストールが必要ですが、今回は記事を読むだけでインストールの必要はありません。

送信結果は、すぐに返ってきました。

  • bad_request 不正な要求
  • このサーバーが理解出来ないものを送って来た。

と、言われました。

❯ curl --location --request POST 'https://api.dify.ai/v1/completion-messages' \
--header 'Authorization: Bearer app-取得したAPIシークレットキー' \
--header 'Content-Type: application/json' \
--data-raw '{
    "inputs": {title:"Google spreadsheetの優れている点", language: "Japanese, context:"Google spreadsheetの便利な点を初 心者にもわかりやすく解説してください。"},
    "response_mode": "streaming",
    "user": "abc-123"
}'
{"code": "bad_request", "message": "The browser (or proxy) sent a request that this server could not understand.", "status": 400}
送信するデータを調べる

APIアクセスページを読むと、パラメータの取得方法がありました。

このアプリのパラメータを取得します。

❯ curl -X GET 'https://api.dify.ai/v1/parameters' \
--header 'Authorization: Bearer app-取得したAPIシークレットキー' \
--header 'Content-Type: application/json'

返信は、以下のデータです。
「user_input_form」がアプリでの入力項目になります。

{
   "opening_statement":null,
   "suggested_questions":[
      
   ],
   "suggested_questions_after_answer":{
      "enabled":false
   },
   "speech_to_text":{
      "enabled":false
   },
   "text_to_speech":{
      "enabled":false,
      "language":"",
      "voice":""
   },
   "retriever_resource":{
      "enabled":false
   },
   "annotation_reply":{
      "enabled":false
   },
   "more_like_this":{
      "enabled":false
   },
   "user_input_form":[
      {
         "text-input":{
            "label":"Keywords",
            "variable":"prompt",
            "required":true,
            "default":""
         }
      },
      {
         "select":{
            "label":"Target Language",
            "variable":"target_language",
            "required":true,
            "options":[
               "\u4e2d\u6587",
               "English",
               "Portugu\u00eas",
               "\u65e5\u672c\u8a9e"
            ],
            "default":""
         }
      },
      {
         "paragraph":{
            "label":"Context",
            "variable":"context",
            "required":true,
            "default":""
         }
      }
   ],
   "sensitive_word_avoidance":{
      "configs":[
         
      ],
      "enabled":false,
      "type":""
   },
   "file_upload":{
      "image":{
         "enabled":true,
         "number_limits":3,
         "detail":"high",
         "transfer_methods":[
            "remote_url",
            "local_file"
         ]
      }
   },
   "system_parameters":{
      "image_file_size_limit":"10"
   }
}
パラメータを送る

コンソール上で入力するのはメンドウなので、テキスト・エディタ上で編集してコピペを送信します。

❯ curl --location --request POST 'https://api.dify.ai/v1/completion-messages' \
--header 'Authorization: Bearer app-取得したAPIシークレットキー' \
--header 'Content-Type: application/json' \
--data-raw '{
    "inputs": {
        "Keywords": "円安",
    "Target Language": "\u65e5\u672c\u8a9e",
    "Context": "円安を利用して資産を増やす方法"
    },
    "response_mode": "streaming",
    "user": "abc-123"
}'

すると、呪文のような回答が送られてきました。どうやら、小さなデータで日本語はUTF8のコードで送ってきているようです。

data: {"event": "message", "message_id": "1b9d9937-fb2a-4659-8335-c76667e63117", "created_at": 1719167141, "task_id": "f0e9891c-dc07-4876-b0b4-aa83437f2f5c", "id": "1b9d9937-fb2a-4659-8335-c76667e63117", "answer": "##"}

data: {"event": "message", "message_id": "1b9d9937-fb2a-4659-8335-c76667e63117", "created_at": 1719167141, "task_id": "f0e9891c-dc07-4876-b0b4-aa83437f2f5c", "id": "1b9d9937-fb2a-4659-8335-c76667e63117", "answer": "  Step 1: Article Outline \n\n| Heading | Subheading |\n"}

data: {"event": "message", "message_id": "1b9d9937-fb2a-4659-8335-c76667e63117", "created_at": 1719167141, "task_id": "f0e9891c-dc07-4876-b0b4-aa83437f2f5c", "id": "1b9d9937-fb2a-4659-8335-c76667e63117", "answer": "|---|---|\n| **\u5186\u5b89\u6642\u4ee3\u306e\u5230\u6765\uff1a\u8cc7\u7523\u904b\u7528\u6226\u7565\u3092\u518d\u8003"}

ChatGPTに変換してもらう

正しい結果を受け取れたのか確認するために、ChatGPTに変換してもらいました。

ChatGPTとの会話は、こちらが全文です。

正しい結果を得られたようです。

プログラムにしてもらう

毎回ChatGPTにコピペするワケにもいかないので、ChatGPTにプログラムにしてもらいます。

javascriptにしているのは、Googleスプレッドシートで使うためです。エクセルでのマクロ・VBAにあたります。

まとめ

Difyで作成したアプリをAPI経由で使う準備ができました。

行ったことは、

  • APIシークレットキーの取得
  • APIの使い方を探る
  • 回答が読めないので読めるようにプログラム化

を行いました。

次回

次回は、Googleスプレッドシートへプログラムを書き込みます。

  • セルから、キーワード、コンテキストを読み込みAPI送信
  • 受信したデータを日本語に変換してセルへ格納

を行います。

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