このブログは?
ノーコードで業務自動化のワークフローやAIエージェントを開発できる n8n(エヌエイトエヌ) で、AIサービスプロバイダーとして OCI Generative AI サービス を活用する手順をご紹介します。この記事では、n8n から OCI Generative AI サービスのLLMへのアクセスには、n8n の Community Nodes "n8n-nodes-oracle-cloud" の OCI Generative AI Chat Modelを使用します。なお、この記事では詳細をご紹介していませんが "n8n-nodes-oracle-cloud"には、"Embeddings OCI Generative AI" や "Oracle Database Vector Store" もありますので、RAG の構築なども簡単に実現できそうです。
このブログの内容(+α)は、Oracle Code Night - Oracle AI Jam Session #28 「これからの生成AI ~ゼロからはじめるAIエージェント」 でデモを交えてご紹介させていただきました。下記にアーカイブもありますので、ぜひお立ち寄りください。
n8n(エヌエイトエヌ)とは?
n8nは、ワークフロー自動化とインテグレーションのためのオープンソースプラットフォーム(正確にはフェアコード)です。プログラミングの知識がなくても、ビジュアルエディタを使用して複雑な業務プロセスを自動化できる、とても便利なノーコード・ローコードツールです。海外ではとても人気があるようで、YouTube でも頻繁に見かけるようになりましたね。
読み方は、「エヌエイトエヌ」です。僕のように「エヌハチエヌ」と読まないように気を付けましょう!
(AKB48を「エーケービーヨンジュウハチ」と言って笑われたことがある人より)
主な特徴は?
ビジュアルワークフローエディタ
ビジュアルに直感的にワークフローを構築できます。各ノードを線でつなぐだけで、複雑なデータフローや条件分岐を視覚的に設計可能です。そして、もちろんワークフロー型のAIエージェントも簡単に構成することができます。
多数のサービス連携
Google、Microsoft、Slack、GitHub、Salesforce、MySQLなど、ビジネスで使われる主要なサービスとの統合が可能です。REST APIやWebhookにも対応しているため、独自システムとの連携も簡単に実現できます。
セルフホスティング対応
自社のサーバーやプライベートクラウドで完全に管理・運用できるため、データのプライバシーとセキュリティを確保できます。機密データを外部に送信したくないような場合に重宝しますね。OCIの場合だと、n8n を自社テナンシ内の Compute かコンテナでホストして、LLM は、OCI Generative AI サービスといった構成にすれば大切なデータがインターネットを流れる心配もありません。
活用例
- マーケティング自動化 - リード情報をCRMに自動登録し、メールキャンペーンをトリガー
- データ同期 - 複数のデータベース間でデータを定期的に同期
- アラート通知 - 特定の条件を満たしたときにSlackやメールで自動通知
- レポート生成 - 定期的にデータを収集・加工してレポートを自動作成
-
AIワークフロー - OCI Generative AI サービスの LLM やその他のAIサービスと連携した高度な自動化
などなど、ワークフローの自動化ならどこにでも使えそうです。
OCI Generative AI とは?
OCI(Oracle Cloud Infrastructure)Generative AI サービスは、Oracle が提供するマネージド生成 AI サービスです。このサービスでは、Meta の Llama モデルや Cohere のモデル、そして最新では xAI の Grok 4 モデルなど、さまざまな先進的な生成 AI モデルを API 経由で利用できます。Google の Gemini がやって来るという発表もありました!(わくわく)。 REST API や SDK を通じてアクセスでき、テキスト生成、VQA(Visual Question Answering)、要約、分類、埋め込み生成などの AI タスクを実行できます。
n8n を使ってみる
早速、n8n を使ってみましょう。
n8n のインストール
ここでは手軽にインストールできる npm を使った手順をご紹介します。
npm install -g n8n
n8n の起動
n8n start
n8n は起動するとデフォルトで 5678 番ポートをリッスンします。
n8n へアクセス
ブラウザで下記のアドレスへアクセスします。
http://localhost:5678/
メールアドレスなどの登録とアンケートがありますので、それらに答えるとダッシュボードが開きます。
"n8n-nodes-oracle-cloud" のインストール
OCI Generative AI の各種モデルにアクセスためには、 Community Noes の "n8n-nodes-oracle-cloud" を利用できますので、最初にこれをインストールします。
- ダッシュボードの左下の自分の名前の横にある「・・・」をクリックして、「Settings」を開きます
- 次に、左側のメニュの一番下にある「Community nodes」をクリックして、「Community nodes」のページを開きます
- 右上の「Install」をクリックすると「Install community nodes」といダイアログが表示されます
- 「npm Packege Name」の下の入力欄に「n8n-nodes-oracle-cloud」と入力して、直ぐ下のCommunity Nodes のインストールに関するリスクを理解したかどうかを尋ねるチェックボックスにチェックを入れます(リスクを理解して、許容する場合)
- 「Install」をクリックします。しばらくして、下図のように表示されればインストール完了です
- 左上の「←」をクリックしてダッシュボードに戻ります
シンプルなチャットを作ってみる
新規ワークフローを作成する
ダッシュボード右上の「Create Workflow」をクリックすると、グラフィカルなワークフローエディターが開きます。
トリガーノードを作る
トリガーノードとは、ワークフローのスタート地点です。「いつ、どのようなきっかけで」ワークフローを始めるかを定義するものです。例えば、「ある時刻になったら」とか「チャットメッセージが投稿されたら」とか「Webhookが呼び出されたら」といった特定のイベントやスケジュールに応じて自動的にワークフローを開始するものです。主なトリガーノードには以下のようなものがあります。
- Trigger Manually : n8n 上のボタンをクリックするとワークフローが開始されます
- On app event : SaaS アプリケーションなどのイベントをきっかけにワークフローが開始されます。例えば、「SharePoint にファイルがアップロードされたら」とか「Notion」のデータベースにページが追加されたら」などです
- On a schedule : 定義したスケジュールによってワークフローを起動します
- On webhook call : HTTP リクエストを受け取ったらワークフローを起動します
- On chat message : ユーザーがチャットメッセージを送信したらワークフローを起動します
シンプルチャットですので、「チャットメッセージが投稿されたら」メッセージをAIに送って返事をもらおうと思います。そこで、トリガーノードは、"On chat message" にします。
画面中央の「Add first step...」の"+" をクリックすると、トリガーノードの選択肢が表示されます。
右下の方に見える「On chat message」をクリックすると On chat message トリガーの設定画面が開きます。
左上の「Back to canvas」をクリックして、ワークフローエディターへ戻ります。
トリガーノードが追加されています。
右下の「Type a message」にメッセージを入力して送信ボタンを押してみます。
右下の「chatInput」に入力したメッセージが現れていることがわかります。
アクションノードを作る
アクションノードとは、ワークフロー内で具体的な処理や外部サービスとの連携を行うステップを担うノードのことです。APIへのリクエスト、データベース操作、ファイルやクラウドへの保存、通知送信といった多様な処理が可能です。例えば「Gmailノードでメールを送信」「Google Sheetsノードで取得したデータを記録」「Slackノードでメッセージ通知」などが代表的です。
-
画面中央の「When chat message received」
ノードの右側に表示されている「+」をクリックすると「What happens next?」にアクションの選択肢が表示されます
-
「AI Agent」をクリックすると、AI Agent の設定画面が表示されます
"Sourced for Prompt(User Meaage)"には、「Connected Chat Trigger Node」と表示されていて、先程定義したトリガーノード(On chat message)の入力が AI Agent のプロンプトとして渡されることがわかります。実際に、"Prompt(User Message)"の下の "fx" の下には、先程チャットエリアに入力した文字列「こんにちは」が表示されています -
左上の「←」をクリックして、ワークフローエディターへ戻ります
まだ、chat model(LLM)を接続していないため AI Agentは、エラーとなって赤い枠で囲まれています -
AI Agent の左下の「chat model」に接続された「+」をクリックします
右側に「Language Models」の選択肢が表示されますので、下へスクロールして「OCI Generative AI Chat Model」をクリックすると「Node details」という画面が表示されるので「Add to workflow」をクリックします
OCI Generative AI Chat Model の詳細設定画面が表示されます
-
「Create new credential」をクリックすると「Oracle Cloud Infrastructure account」画面が表示されます
以下の各項目を設定します。- User OCID
- Tenancy OCID
- Key Fingerprint
- Region
- Private Key(API Key の中身です)
- Private Key Passphrase(設定している場合)
-
右上の「Save」をクリックして、右上の「x」で閉じます
-
「Compartment ID」を入力します
-
「On Demand Model Name or ID」入力エリアの右下の左上を向いた矢印をクリックして表示される編集画面でモデル名を入力します
-
右上の「x」で閉じます
-
元のOCI Generative AI Chat Model の詳細設定画面で「On Demand Model Name or ID」にマウスを重ねると表示される「Expression」をクリックして、モデル名が表示されることを確認します
-
左上の矢印「←」をクリックして、ワークフローエディターに戻ります
AI Agent の赤枠が消えていることがわかると思います
-
左下の「Chat」エリアにメッセージを入力して送信ボタンを押します。表示された画面で中央下の「AI Agent」をクリックすると右側に OCI Generative AI の Llama 4 Maverick からの応答が表示されます
-
左下の「Chat」エリアに「東京ディズニーランドの天気を教えて」と入力して送信ボタンを押します
「残念ながら、私はリアルタイムの天気情報を提供する機能を持っていません。東京ディズニーランドの現在の天気を知りたい場合は...」のような応答が返ってくるかと思います。LLM は、LLMが作られたときに学習した情報を元に文章を生成するものですので、現在の情報を答えることはできません。
東京ディズニーランドの天気予報を答えられるチャットボットに育てる
AI Agent に天気情報を取得できる API をツールとして与えて、「 東京ディズニーランドの天気を答えられる」ようにします。
天気予報情報を取得できる API として無償で利用できる open-meteo の Free Weather API を使わせていただこうと思います。
- 上のサイトにアクセスしたら上の方に表示されている「API Docs」をクリックします
- 表示された画面の右の方に「Search」がありますのでクリックします。
- 天気を知りたい地域の名前を英語で入力します。
- ここでは、「Tokyo Disney Land」と入力します。すると入力エリアの直下に Tokyo Disney Land の緯度・経度が表示されますので、これをクリックします
- 表示された画面でタイムゾーンを設定します。中央よりやや右の方にある「Timezone」から「Asia/Tokyo」などを選択します
- どのような情報を取得したいかと選択します。例えば以下のように選択します
- Forecast Days: 1 day
- Temperature (2 m)
- Relative Humidity (2 m)
- Weather code
- Daily Weather Variables
- Weather code
- Maximum Temperature (2 m)
- Minimum Temperature (2 m)
- Sunrise
- Sunset
- Forecast Days: 1 day
- 画面をスクロールダウンして、「API Response」が見えるところまでいくとその直下に「API URL」がありますので、ここに表示されている
https://api.open-meteo.com/v1/.....
をコピーして控えておきます
https://api.open-meteo.com/v1/forecast?latitude=35.6331&longitude=139.8806&daily=weather_code,temperature_2m_max,temperature_2m_min,sunrise,sunset&hourly=temperature_2m,relative_humidity_2m,weather_code&timezone=Asia%2FTokyo&forecast_days=1
AI Agent に天気予報ツールを与える
- n8n のワークフローエディターに戻ります
- AI Agent の下に表示されている Tool の「+」をクリックします
画面右側に「Tools」の選択肢が表示されます
- 「HTTP Request Tool」をクリックすると「HTTP Request」の詳細設定画面が表示されますので、「Description」に"東京ディズニーランドの天気予報情報を取得するツール"と入力し、「URL」に先程取得した open-meteo の API URL を入力します。ここで入力した「Description」は、AI Agent がユーザーの質問に答えるために役立つツールを探す際に使用します。ここにでたらめな情報が入っていると AI Agent はツール(API)を活用することができません。
- 右上の「Execute step」をクリックすると API をテストすることができます
今回は、東京ディズニーランド決め打ちで天気予報情報を取得しているというかなり限定的なユーザー向けの仕様になっていますが、この画面には「Send Query Parameters」などを設定できるようになっていますので、もっと柔軟なAPI呼び出しが可能です - 左上の矢印「←」をクリックしてワークフローエディターに戻ります
東京ディズニーランドの天気を聞いてみる
今度は、答えてくれましたね。
東京ディズニーランドの今日の天気は、最高気温31.3°C、最低気温26.5°Cで、曇りがちのようです。湿度は比較的高い状態が続く予報です。ディズニーランドを訪れる際は、熱中症対策や適切な服装でお楽しみください。
ところで、「Weather Code」の意味をAI Agent には教えていないのですが大丈夫でしょうか?
AI Agent のプロンプトをカスタマイズする
- ワークフローエディターの AI Agent をダブルクリックします
- 「Source for Prompt (User Message)」の下の「Source for Prompt (User Message)」をクリックして「Define below」を選択します
- 「Prompt (User Message)」に例えば以下のように入力します
次の情報を踏まえてユーザーの質問に常に日本語で答えてください。質問に対する具体的な回答が不明な場合は情報がないので答えられないと正直に回答します。
天気予報ツールの Weather code の意味は以下のとおりです。天気予報に関するツールを使う場合はこの対応表を参照してください。
主なWeather code一覧
0: 快晴(Clear sky)
1: 主に晴れ(Mainly clear)
2: 曇り(Partly cloudy)
3: 曇天(Overcast)
45: 霧(Fog)
48: 霧(付帯する霧氷あり)
51: 弱い霧雨(Light drizzle)
53: 中程度の霧雨(Moderate drizzle)
55: 強い霧雨(Dense drizzle)
56: 弱い凍雨(Light freezing drizzle)
57: 強い凍雨(Dense freezing drizzle)
61: 弱い雨(Light rain)
63: 雨(Rain)
65: 強い雨(Heavy rain)
66: 弱い凍雨(Light freezing rain)
67: 強い凍雨(Heavy freezing rain)
71: 弱い雪(Light snow fall)
73: 雪(Snow fall)
75: 強い雪(Heavy snow fall)
77: 雪粒(Snow grains)
80: 弱いにわか雨(Light rain showers)
81: にわか雨(Rain showers)
82: 強いにわか雨(Violent rain showers)
85: 弱いにわか雪(Light snow showers)
86: 強いにわか雪(Heavy snow showers)
95: 雷雨(Thunderstorm)
96: 雹を伴う雷雨(Thunderstorm with slight hail)
99: 激しい雹を伴う雷雨(Thunderstorm with heavy hail)
ユーザーの質問:{{ $json.chatInput }}
今度は、「東京ディズニーランドの今日の天気は曇天です。最高気温は31.3°C、最低気温は26.5°Cです。」とプロンプトで指定した用語で返ってきました。
あとがき
この記事は、n8nで OCI Generative AI を活用するための手順をご紹介することが目的ですので、n8n の機能のさわりの部分だけご紹介しました。私は、Tool に slack チャンネルへのメッセージ送信機能を追加して、毎日定期的に起動して翌日の天気がレジャー日和だった場合には、チームのslack チャンネルに東京ディズニーランドへのお誘いを投稿するAIチームリーダー(!)機能を追加してみました。
完成形はこちらです。
n8n 側の設定はとても簡単でした。slack側の Access Token を取得する手順がやや煩雑でブログが長くなるので今回は詳細は割愛しています。
その他にもトリガーを定期的にスケジュール実行して、AI Agent が悪天候と判定したときだけ slack で送信したり、東京ディズニーランド決め打ちではなく、地名から緯度経度を調べるAPIを併用して任意の地域の天気予報を取得できるようにしたりといったことも簡単に実現できそうですね。
"n8n-nodes-oracle-cloud" には、Oracle Database の Vector Store もありますので、RAG も簡単に組めそうです。機会を改めて試してみたいです。↓こんな感じで実現できるようです。
また、今回は "n8n-nodes-oracle-cloud" を使った場合を試してみましたが OpenAI Chat Model を使って OpenAI互換APIで OCI Generative AI のモデルを使う方法もあります。この場合は、ノードを入れ替えずに OpenAI や OCI Generative AI のモデルを試してみることができます。そちらは下記のブログでご紹介しています。