はじめに
社内データをAIに使いたいけど専門家がいないということや、開発リソースがない、という話をよく耳にします。
Oracle AI Database Private Agent Factory(以下、Agent Factory)は、まさにそれを解決する製品になります。
Dify のように、ノーコードでAIエージェントを作る事ができ、デプロイするところまでUIで完結します。
Agent Factory については、弊社の記事ではありませんが、Qiita に詳しく説明されている記事がありますので、こちらをご確認下さい。
- Oracle AI Database Private Agent Factory を調べてみた
- Oracleのノーコード・エージェントビルダー『Agent Factory』がリリース!触ってみた
- Oracle製ノーコードAgent BuilderのPrivate Agent Factoryを構築&試してみた
本記事では、Agent Factoryの機能 となるAgent Builderを使ったカスタム・フローの作成について、ノーコードでどのように作成するかを掘り下げて記載しようと思います。
構築方法については、OCI上に簡単に作成できるMarketplace版での構築手順を詳細に以下の記事で説明されているので、参考にして頂くとよいと思います。
Marketplace版でなく、インストーラを用いて自前でインストールしたい方は、以下のユーザーガイドをご確認下さい。
- Agent Factory User’s Guide / Download Installation Kit
- Agent Factory User’s Guide / Deployment Overview
事前準備(モデルの設定)
Marketplace版及びインストーラでの、どちらの方法で構築した場合でも、構築段階でデフォルトのモデルの設定が必要となります。
デフォルトに設定したモデル以外を使用したい方は、モデルの設定を別途行いましょう。
モデルの設定は、サイドメニューの「LLM management」から行います。

Agent Factory では、以下のLLMが設定可能となっています。
-
生成モデル
- OCI GenAI
- Open AI
- vLLM
- Ollama
-
埋め込みモデル
- Local Models
- OCI GenAI
- vLLM
- Ollama
※ 生成モデルでOCI GenAIのモデルを使用する際の推奨は以下となり、 google.gemini-* モデルはツールの使用をサポートしていないため非推奨となります。
- xai.grok-4
- xai.grok-4-fast-reasoning
- xai.grok-4-fast-non-reasoning
- llama3.3
モデルの設定についての詳細は 、以下のユーザーガイドをご確認下さい。
Agent Builderを使ったカスタム・ワークフローの作成
実際に、どのような作業で作成していくかを見ていきます。
使用できるコンポーネントの一覧は、以下のユーザーガイドに記載がありますので、この中からいくつかのコンポーネントを使って作業を進めます。
LLMを利用したチャット
まずは、LLMを使用してチャットが行えるものを作成してみます。
カスタム・ワークフローの作成を行うには、サイドメニューの「Agent builder」を押下します。

以下のような画面が表示されます。
この画面でコンポーネントを配置していく流れとなります。

以下のコンポーネントを順に選択し、左から右へと並べます。
① Chat input
② LLM
③ Chat output

その後、以下を行います。
①Chat inputの「Message」横の青丸とLLMの「Prompt」横の青丸をドラッグして線を繋げます。
②LLMの「Select LLM to use」でLLMを選択します。
③LLMの「Message」横の青丸とChat output横の「Message」の青丸をドラッグして線を繋げます。
④画面上の「Save」ボタンをクリックして保存します。
⑤画面上の「Playground」ボタンをクリックして動作確認します。

これだけの手順で完成し、以下のチャット画面が表示されます。

実際にプロンプトを入力してみると、結果が返ってきていることが分かります。

このレベルのものだと、本当に1分程度でできてしまいますね。
また、Agent Builderで作成したワークフローはURLとして公開でき、REST API 経由で外部アプリケーションから呼び出すことも可能です。
ただし、現時点ではAPIの利用に必要な情報がリファレンスに十分記載されておらず、リファレンスの充実に期待したいところです。
MCPの利用
カスタム・ワークフローでは、Agentのツールとして、MCPサーバとREST APIを利用することが可能です。
次は、DeepWikiのMCPサーバ を使用して、MySQLに関する質問に、DeepWikiを使って回答するということをやってみます。
まずは、以下のコンポーネントを配置します。
①Chat input
②Prompt
③MCP server
④Agent
⑤Chat output

続いて、以下の手順で編集していきます。
①Promptの「Template」に以下を設定します。
あなたはMySQLの専門家です。
MySQLの質問をされた場合、DeepWikiツールを使用してMySQL(mysql/mysql-server)を調査してください。
調査結果を分かりやすい日本語で回答してください。
ユーザーからの質問:
{{user_input}}
②Promptの「Save prompt」ボタンをクリックします。
③Chat inputの「Message」横の青丸とPromptの「user_input」横の青丸をドラッグして線を繋げます。
④Promptの「Prompt message」横の青丸とAgentの「Prompt」横の青丸をドラッグして線を繋げます。
⑤MCP serverの「URL」に https://mcp.deepwiki.com/mcp を設定します。
⑥MCP serverの「Tools」横の緑丸とAgentの「Tools」横の緑丸をドラッグして線を繋げます。
⑦Agentの「Select LLM to use」でLLMを選択します。
⑧Agentの「Message」横の青丸とChat output横の「Message」の青丸をドラッグして線を繋げます。
⑨画面上の「Save」ボタンをクリックして保存します。
⑩画面上の「Playground」ボタンをクリックして動作確認します。

以上で完了です。
では実際にチャットしてみます。

実際にMySQL Serverのリポジトリを参照して回答している様子が伺えます。
この手順内容でも、ノーコードで5分もあれば作成できてしまいますね。
但し注意点として、DeepWikiのMCPサーバはパブリックリポジトリであれば認証なしで使用できるので問題ないですが、Agent Factoryでは、 Basic Auth と Bearer Token のみがサポートされている為、これら以外の認証が必要なMCPサーバがサポートされていないことに加えて、SSE形式でレスポンスを返すMCPサーバである必要があります。
詳細については、以下をご確認下さい。
自然言語でデータベースとの会話
次は、 Select AI のように自然言語で、データベース内のデータを元にチャットをするようにしてみます。
先に対象データが保存されているデータベースの登録が必要になります。
以下のユーザーガイドには、Integrate with enterprise databases like Oracle AI Database と書かれており、詳細が記載されておりませんが、
設定画面を見る限り、Oracle系のデータベースである必要がありそうです。

今回は、こちらの設定画面で Oracle AI Database 26ai のデータベース情報を設定しました。
また、テスト用データとして以下のテーブルとデータを用意しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
-- ------------------------------------------------------------ -- 1. 顧客テーブル -- ------------------------------------------------------------ CREATE TABLE customers ( customer_id NUMBER PRIMARY KEY, customer_name VARCHAR2(100) NOT NULL, email VARCHAR2(200), region VARCHAR2(50), created_at DATE DEFAULT SYSDATE ); -- ------------------------------------------------------------ -- 2. 商品テーブル -- ------------------------------------------------------------ CREATE TABLE products ( product_id NUMBER PRIMARY KEY, product_name VARCHAR2(200) NOT NULL, category VARCHAR2(100), price NUMBER(10, 2) NOT NULL, stock NUMBER DEFAULT 0 ); -- ------------------------------------------------------------ -- 3. 注文テーブル -- ------------------------------------------------------------ CREATE TABLE orders ( order_id NUMBER PRIMARY KEY, customer_id NUMBER REFERENCES customers(customer_id), product_id NUMBER REFERENCES products(product_id), quantity NUMBER NOT NULL, amount NUMBER(12, 2) NOT NULL, status VARCHAR2(50) DEFAULT 'COMPLETED', order_date DATE NOT NULL ); -- ============================================================ -- INSERT データ -- ============================================================ -- ------------------------------------------------------------ -- 顧客データ(10件) -- ------------------------------------------------------------ INSERT INTO customers VALUES (1, '山田 太郎', 'yamada@example.com', '東京', TO_DATE('2023-01-15', 'YYYY-MM-DD')); INSERT INTO customers VALUES (2, '鈴木 花子', 'suzuki@example.com', '大阪', TO_DATE('2023-03-22', 'YYYY-MM-DD')); INSERT INTO customers VALUES (3, '田中 一郎', 'tanaka@example.com', '名古屋',TO_DATE('2023-05-10', 'YYYY-MM-DD')); INSERT INTO customers VALUES (4, '佐藤 美咲', 'sato@example.com', '福岡', TO_DATE('2023-07-01', 'YYYY-MM-DD')); INSERT INTO customers VALUES (5, '伊藤 健二', 'ito@example.com', '東京', TO_DATE('2023-08-19', 'YYYY-MM-DD')); INSERT INTO customers VALUES (6, '渡辺 さくら', 'watanabe@example.com', '札幌', TO_DATE('2023-09-05', 'YYYY-MM-DD')); INSERT INTO customers VALUES (7, '中村 拓也', 'nakamura@example.com', '大阪', TO_DATE('2023-10-14', 'YYYY-MM-DD')); INSERT INTO customers VALUES (8, '小林 奈々', 'kobayashi@example.com','仙台', TO_DATE('2023-11-20', 'YYYY-MM-DD')); INSERT INTO customers VALUES (9, '加藤 浩二', 'kato@example.com', '東京', TO_DATE('2024-01-08', 'YYYY-MM-DD')); INSERT INTO customers VALUES (10, '吉田 優子', 'yoshida@example.com', '名古屋',TO_DATE('2024-02-14', 'YYYY-MM-DD')); -- ------------------------------------------------------------ -- 商品データ(10件) -- ------------------------------------------------------------ INSERT INTO products VALUES (1, 'ノートPC Pro 15', 'パソコン', 148000, 25); INSERT INTO products VALUES (2, 'ワイヤレスマウス', 'アクセサリ', 3800, 150); INSERT INTO products VALUES (3, 'メカニカルキーボード', 'アクセサリ', 12800, 60); INSERT INTO products VALUES (4, '4K モニター 27インチ', 'モニター', 58000, 30); INSERT INTO products VALUES (5, 'USBハブ 7ポート', 'アクセサリ', 4200, 5); INSERT INTO products VALUES (6, 'タブレット 10インチ', 'タブレット', 68000, 40); INSERT INTO products VALUES (7, 'Webカメラ HD', 'アクセサリ', 9800, 80); INSERT INTO products VALUES (8, 'ポータブルSSD 1TB', 'ストレージ', 15800, 55); INSERT INTO products VALUES (9, 'ヘッドセット ノイキャン','オーディオ', 32000, 45); INSERT INTO products VALUES (10, 'スマートフォン X12', 'スマートフォン',98000, 3); -- ------------------------------------------------------------ -- 注文データ(30件 / 2024年〜2025年) -- ------------------------------------------------------------ INSERT INTO orders VALUES (1, 3, 1, 1, 148000, 'COMPLETED', TO_DATE('2024-01-05', 'YYYY-MM-DD')); INSERT INTO orders VALUES (2, 1, 4, 1, 58000, 'COMPLETED', TO_DATE('2024-01-18', 'YYYY-MM-DD')); INSERT INTO orders VALUES (3, 5, 2, 3, 11400, 'COMPLETED', TO_DATE('2024-02-02', 'YYYY-MM-DD')); INSERT INTO orders VALUES (4, 2, 9, 1, 32000, 'COMPLETED', TO_DATE('2024-02-14', 'YYYY-MM-DD')); INSERT INTO orders VALUES (5, 7, 10, 1, 98000, 'COMPLETED', TO_DATE('2024-02-28', 'YYYY-MM-DD')); INSERT INTO orders VALUES (6, 4, 6, 2, 136000, 'COMPLETED', TO_DATE('2024-03-10', 'YYYY-MM-DD')); INSERT INTO orders VALUES (7, 9, 3, 1, 12800, 'COMPLETED', TO_DATE('2024-03-22', 'YYYY-MM-DD')); INSERT INTO orders VALUES (8, 1, 8, 2, 31600, 'COMPLETED', TO_DATE('2024-04-05', 'YYYY-MM-DD')); INSERT INTO orders VALUES (9, 6, 7, 1, 9800, 'COMPLETED', TO_DATE('2024-04-19', 'YYYY-MM-DD')); INSERT INTO orders VALUES (10, 10, 1, 1, 148000, 'COMPLETED', TO_DATE('2024-05-01', 'YYYY-MM-DD')); INSERT INTO orders VALUES (11, 2, 5, 2, 8400, 'COMPLETED', TO_DATE('2024-05-15', 'YYYY-MM-DD')); INSERT INTO orders VALUES (12, 8, 4, 1, 58000, 'COMPLETED', TO_DATE('2024-06-03', 'YYYY-MM-DD')); INSERT INTO orders VALUES (13, 3, 2, 5, 19000, 'COMPLETED', TO_DATE('2024-06-20', 'YYYY-MM-DD')); INSERT INTO orders VALUES (14, 5, 9, 1, 32000, 'COMPLETED', TO_DATE('2024-07-08', 'YYYY-MM-DD')); INSERT INTO orders VALUES (15, 1, 10, 1, 98000, 'COMPLETED', TO_DATE('2024-07-25', 'YYYY-MM-DD')); INSERT INTO orders VALUES (16, 7, 3, 2, 25600, 'COMPLETED', TO_DATE('2024-08-10', 'YYYY-MM-DD')); INSERT INTO orders VALUES (17, 4, 8, 1, 15800, 'COMPLETED', TO_DATE('2024-08-28', 'YYYY-MM-DD')); INSERT INTO orders VALUES (18, 9, 6, 1, 68000, 'COMPLETED', TO_DATE('2024-09-12', 'YYYY-MM-DD')); INSERT INTO orders VALUES (19, 6, 1, 1, 148000, 'COMPLETED', TO_DATE('2024-09-30', 'YYYY-MM-DD')); INSERT INTO orders VALUES (20, 10, 7, 3, 29400, 'COMPLETED', TO_DATE('2024-10-14', 'YYYY-MM-DD')); INSERT INTO orders VALUES (21, 2, 4, 1, 58000, 'COMPLETED', TO_DATE('2024-10-28', 'YYYY-MM-DD')); INSERT INTO orders VALUES (22, 8, 2, 4, 15200, 'COMPLETED', TO_DATE('2024-11-05', 'YYYY-MM-DD')); INSERT INTO orders VALUES (23, 3, 9, 2, 64000, 'COMPLETED', TO_DATE('2024-11-19', 'YYYY-MM-DD')); INSERT INTO orders VALUES (24, 5, 5, 3, 12600, 'PENDING', TO_DATE('2024-12-03', 'YYYY-MM-DD')); INSERT INTO orders VALUES (25, 1, 3, 1, 12800, 'COMPLETED', TO_DATE('2024-12-17', 'YYYY-MM-DD')); INSERT INTO orders VALUES (26, 7, 8, 2, 31600, 'COMPLETED', TO_DATE('2025-01-08', 'YYYY-MM-DD')); INSERT INTO orders VALUES (27, 4, 10, 1, 98000, 'PENDING', TO_DATE('2025-01-22', 'YYYY-MM-DD')); INSERT INTO orders VALUES (28, 9, 4, 2, 116000, 'COMPLETED', TO_DATE('2025-02-05', 'YYYY-MM-DD')); INSERT INTO orders VALUES (29, 6, 6, 1, 68000, 'COMPLETED', TO_DATE('2025-02-19', 'YYYY-MM-DD')); INSERT INTO orders VALUES (30, 10, 9, 1, 32000, 'PENDING', TO_DATE('2025-03-01', 'YYYY-MM-DD')); |
それでは、カスタム・ワークフローを作成していきます。
以下のコンポーネントを配置します。
①Chat input
②Prompt ※2つ
③LLM ※2つ
④SQL query
⑤Chat output

続いて、以下の手順で編集していきます。
①Promptの「Template」に以下を設定します。
あなたはSQLの専門家です。
以下のテーブル定義を参考に、ユーザーの質問に対するSELECT文を1つだけ生成してください。
【厳守ルール】
- データベースはOracle DBである。必ずOracle SQL構文を使用すること
- MySQL・PostgreSQL・SQLite の構文は絶対に使わないこと
- SELECT文のSQLのみを出力すること
- セミコロン(;)を付けないこと
- sql などのコードブロック記号を付けないこと
- 説明文・コメント・改行を一切含めないこと
- 複数のSQL文を生成しないこと
テーブル定義:
- customers(customer_id, customer_name, email, region, created_at)
- products(product_id, product_name, category, price, stock)
- orders(order_id, customer_id, product_id, quantity, amount, status, order_date)
ユーザーの質問:{{user_input}}
②Promptの「Save prompt」ボタンをクリックします。
③Chat inputの「Message」横の青丸とPromptの「user_input」横の青丸をドラッグして線を繋げます。
④Promptの「Prompt message」横の青丸とLLMの「Prompt」横の青丸をドラッグして線を繋げます。
⑤LLMの「Select LLM to use」でLLMを選択します。
⑥LLMの「Message」横の青丸とSQL queryの「Query」横の青丸をドラッグして線を繋げます。
⑦Promptの「Template」に以下を設定します。
以下のJSON形式の検索結果を、日本語でわかりやすく整形して回答してください。
検索結果:{{sql_result}}
ユーザーの質問:{{user_input}}
⑧Promptの「Save prompt」ボタンをクリックします。
⑨Chat inputの「Message」横の青丸とPromptの「user_input」横の青丸をドラッグして線を繋げます。
⑩SQL queryの「Message」横の青丸とPromptの「sql_result」横の青丸をドラッグして線を繋げます。
⑪SQL queryの「Select Database」で事前に登録したデータベースを選択します。
⑫Promptの「Prompt message」横の青丸とLLMの「Prompt」横の青丸をドラッグして線を繋げます。
⑬LLMの「Select LLM to use」でLLMを選択します。
⑭LLMの「Message」横の青丸とChat output横の「Message」の青丸をドラッグして線を繋げます。
以上の編集後に、画面上の「Save」ボタンをクリックして保存し、「Playground」ボタンをクリックして動作確認します。

実際にチャットしてみると、登録したサンプルデータベースに対してクエリされていることが分かります。

今回は、テーブル名と項目名をプロンプトとして含めているので、テーブル数や項目数が多い場合には、この方法は現実的ではありません。
こういったケースでは、別途、 Data Analysis Agents が用意されていますので、こちらでVIEWを作成した上でAgentを作成した方が適してそうです。
まとめ
本記事では、Agent FactoryのAgent Builderを使って、3種類のカスタム・ワークフローをノーコードで作成する方法を紹介しました。
いずれも、コードを一切書かずにUIの操作だけで完結するのが Agent Factory の大きな魅力です。
特に、開発リソースが限られている現場でも、業務に直結したAIエージェントを素早く作って試せるという点は非常に有用だと感じました。
一方で、MCPサーバの認証方式の制約や、InputとOutputとして使用できるコンポーネントが少ないといったことは、実務で使う際には考慮が必要な点として挙げられます。
とはいえ、Agent Factory はまだ新しい製品なので、今後の機能拡張にも期待が持てます。
興味を持たれた方は、まずはMarketplace版などで手軽に試してみることをお勧めします。


