12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

今回は、Oracle Autonomous AI Database の Select AI Agentを使って、データベースの中でAI Agentを動かしながらRDBMS内のデータ+非構造化の文書データを組み合わせたデータ取得を日本語で試してみます。

ポイントは、表の構造だけでは足りない補助データを RAG で与え、その情報を使って目的のデータを取得するところです。
サンプルで実施する例は人事が社員情報(構造化データ)と社内ルール(非構造化の文章データ)をもとにアクションを起こすべき対象を検索するようなシナリオです。
今回の例では、社員テーブルには月単位の評価データしか入っていないため、例えば2026年度上期 と検索した場合に実際にどの月を指すのか、どの社員を「要フォロー」とみなすのか、どの研修を推奨するのか、などの情報はテーブル構造だけでは分からないようになっています。

そこで、

  • 評価期間の定義
  • 要フォロー判定ルール
  • 等級別の推奨研修方針

を RAG 側のテキスト文書に持たせ、Agent がその補助情報を読んでから SQL を実行する流れを作ってみました。

事前準備

OCI上のADB 26aiに検証用のスキーマ(AGENT_TEST)を作成し、Select AIやSelect AI with RAGなどの事前設定を行います。
詳細は折りたたむため必要に応じて参照下さい。
テストデータは生成AIに作成させたサンプルデータであり、特定の対象を意図したものではありません。

事前準備内容

前提

  • Autonomous Database 26ai を利用できること
  • オブジェクトストレージに RAG 用文書を配置できること

検証そのものは管理者スキーマの ADMIN ではなく AGENT_TEST スキーマ で行いました。
ADMIN はユーザー作成だけに使い、その後のテーブル作成、資格証明作成、プロファイル作成、RAG、Agent 実行はすべて AGENT_TEST で実施しています。

スキーマ作成 (ADMINユーザで実行)

CREATE USER AGENT_TEST IDENTIFIED BY "<password>";
GRANT DWROLE TO AGENT_TEST;
ALTER USER AGENT_TEST QUOTA UNLIMITED ON DATA;

資格証明の作成 (AGENT_TESTユーザで実行)

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OCI_GENAI_CRED',
    user_ocid       => '<user_ocid>',
    tenancy_ocid    => '<tenancy_ocid>',
    private_key     => '<private_key>',
    fingerprint     => '<fingerprint>'
  );
END;
/

SELECT credential_name FROM user_credentials;

構造化データ

今回使う表は次の 2 つです。

  • EMPLOYEE_STATUS
  • TRAINING_HISTORY

EMPLOYEE_STATUS には、社員名、部門、等級、評価月、残業時間、エンゲージメントスコアなどを入れます。
TRAINING_HISTORY には受講済み研修を入れます。

テーブル作成とサンプルデータを開く
CREATE TABLE employee_status (
  employee_id        NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  employee_name      VARCHAR2(80) NOT NULL,
  department         VARCHAR2(40) NOT NULL,
  grade              VARCHAR2(10) NOT NULL,
  location           VARCHAR2(20) NOT NULL,
  evaluation_month   VARCHAR2(7) NOT NULL,
  overtime_hours     NUMBER(5,1) NOT NULL,
  engagement_score   NUMBER(3) NOT NULL,
  manager_name       VARCHAR2(50) NOT NULL,
  notes              VARCHAR2(200)
);

COMMENT ON TABLE employee_status IS '社員ごとの月次評価状況を保持する表';
COMMENT ON COLUMN employee_status.employee_id IS '社員評価レコードの識別子';
COMMENT ON COLUMN employee_status.employee_name IS '社員名';
COMMENT ON COLUMN employee_status.department IS '所属部門';
COMMENT ON COLUMN employee_status.grade IS '等級';
COMMENT ON COLUMN employee_status.location IS '勤務地';
COMMENT ON COLUMN employee_status.evaluation_month IS '評価対象月(YYYY-MM)';
COMMENT ON COLUMN employee_status.overtime_hours IS '当月の残業時間';
COMMENT ON COLUMN employee_status.engagement_score IS '当月のエンゲージメントスコア';
COMMENT ON COLUMN employee_status.manager_name IS '直属上長名';
COMMENT ON COLUMN employee_status.notes IS '補足メモ';

CREATE TABLE training_history (
  training_id       NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  employee_id       NUMBER NOT NULL,
  course_name       VARCHAR2(80) NOT NULL,
  completed_month   VARCHAR2(7) NOT NULL,
  score             NUMBER(3),
  CONSTRAINT fk_training_employee
    FOREIGN KEY (employee_id) REFERENCES employee_status(employee_id)
);

COMMENT ON TABLE training_history IS '社員ごとの受講済み研修履歴を保持する表';
COMMENT ON COLUMN training_history.training_id IS '研修履歴レコードの識別子';
COMMENT ON COLUMN training_history.employee_id IS '対象社員の識別子';
COMMENT ON COLUMN training_history.course_name IS '受講した研修名';
COMMENT ON COLUMN training_history.completed_month IS '受講完了月(YYYY-MM)';
COMMENT ON COLUMN training_history.score IS '受講時の評価スコア';

INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('田中 花子', '営業部', 'G4', '東京', '2026-04', 38, 74, '佐藤 部長', '主要顧客対応を担当。');
INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('鈴木 一郎', '営業部', 'G3', '東京', '2026-05', 52, 66, '佐藤 部長', '繁忙期対応が続いている。');
INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('佐々木 美咲', '営業部', 'G5', '大阪', '2026-06', 29, 81, '高橋 部長', '新任メンバーの育成を兼務。');
INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('山田 翔太', '営業部', 'G4', '東京', '2026-07', 47, 69, '佐藤 部長', '案件増加で残業が増えている。');
INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('中村 綾', '営業部', 'G2', '名古屋', '2026-08', 18, 88, '高橋 部長', '安定して成果を出している。');
INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('小林 大輔', '開発部', 'G4', '東京', '2026-05', 44, 72, '井上 部長', '上期後半にプロジェクト集中。');
INSERT INTO employee_status (employee_name, department, grade, location, evaluation_month, overtime_hours, engagement_score, manager_name, notes)
VALUES ('伊藤 真央', '人事部', 'G3', '東京', '2026-06', 21, 85, '加藤 部長', '制度改定プロジェクトを担当。');

INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (1, '営業基礎研修', '2025-10', 86);
INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (2, '営業基礎研修', '2025-09', 78);
INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (3, 'リーダー候補研修', '2026-02', 91);
INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (4, '提案力強化研修', '2025-12', 80);
INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (5, '営業基礎研修', '2026-01', 88);
INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (6, 'プロジェクト管理研修', '2025-11', 84);
INSERT INTO training_history (employee_id, course_name, completed_month, score)
VALUES (7, '人事評価者研修', '2026-03', 90);

COMMIT;

RAG 用文書

オブジェクトストレージには、次の 3 ファイルを配置します。

  • evaluation_period_guide.txt
  • hr_followup_policy.txt
  • training_recommendation_guide.txt

配置先 URL は自分の環境に合わせてください。

https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket_name>/o/
文書サンプルを開く
evaluation_period_guide.txt
人事評価期間の定義

- 本資料における上期評価対象期間は 4 月, 5 月, 6 月, 7 月, 8 月, 9 月を指す。
- 本資料における下期評価対象期間は 10 月, 11 月, 12 月, 1 月, 2 月, 3 月を指す。
hr_followup_policy.txt
人事フォロー方針

要フォロー判定の基本ルール:
- 残業時間が 45 時間超の社員は、業務負荷の観点からフォロー候補とする。
- エンゲージメントスコアが 70 未満の社員は、面談優先候補とする。
- 残業時間が 45 時間超かつエンゲージメントスコアが 70 未満の社員は、最優先で上長面談を設定する。
training_recommendation_guide.txt
等級別の推奨研修方針

- G2 の社員には業務基礎研修やコミュニケーション研修を推奨する。
- G3 の社員には提案力強化研修や関係者調整研修を推奨する。
- G4 の社員にはプロジェクト管理研修やデータ活用研修を推奨する。
- G5 以上の社員にはリーダー候補研修や評価者研修を推奨する。

Agent の前に: Select AI で SQL 単体を確認する

まずは構造化データだけを使って、自然言語で SQL が実行できることを見ます。

SQL_PROFILE の作成

SQL_PROFILE 作成 SQL を開く
BEGIN
  BEGIN
    DBMS_CLOUD_AI.drop_profile('SQL_PROFILE', force => TRUE);
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  DBMS_CLOUD_AI.create_profile(
    profile_name => 'SQL_PROFILE',
    attributes   => '{
      "provider": "oci",
      "credential_name": "OCI_GENAI_CRED",
      "model": "xai.grok-code-fast-1",
      "object_list": [
        {"owner": "AGENT_TEST", "name": "EMPLOYEE_STATUS"},
        {"owner": "AGENT_TEST", "name": "TRAINING_HISTORY"}
      ]
    }'
  );
END;
/

BEGIN
  DBMS_CLOUD_AI.set_profile(profile_name => 'SQL_PROFILE');
END;
/

試したクエリ

select ai showsql 20264月から20268月までの営業部社員の平均残業時間を教えて;
select ai runsql 20264月から20268月までの営業部社員の平均残業時間を教えて;

select ai showsql 20264月から20268月までの営業部社員のうち、残業時間が45時間を超える社員は何人ですか;
select ai runsql 20264月から20268月までの営業部社員のうち、残業時間が45時間を超える社員は何人ですか;

結果

select ai runsqlでは次の結果を確認できました。

-- 平均残業時間
36.8

-- 残業45時間超の社員数
2

showsqlで生成された SQL も、DEPARTMENTEVALUATION_MONTHOVERTIME_HOURS のような実在列を正しく使っていました。

Agent の前に: Select AI with RAG で補助データを確認する

次に、評価期間や要フォロー判定ルールのような、表の構造には持っていない補助データを文書から取得します。

RAG_PROFILE の作成

RAG_PROFILE 作成 SQL を開く
BEGIN
  BEGIN
    DBMS_CLOUD_AI.drop_vector_index('RAG_VECTOR_INDEX', force => TRUE);
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  BEGIN
    DBMS_CLOUD_AI.drop_profile('RAG_PROFILE', force => TRUE);
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  DBMS_CLOUD_AI.create_profile(
    profile_name => 'RAG_PROFILE',
    attributes   => '{
      "provider": "oci",
      "credential_name": "OCI_GENAI_CRED",
      "vector_index_name": "RAG_VECTOR_INDEX",
      "embedding_model": "cohere.embed-v4.0",
      "model": "xai.grok-code-fast-1"
    }'
  );
END;
/

BEGIN
  DBMS_CLOUD_AI.create_vector_index(
    index_name  => 'RAG_VECTOR_INDEX',
    attributes  => '{
      "vector_db_provider": "oracle",
      "location": "https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket_name>/o/",
      "object_storage_credential_name": "OCI_GENAI_CRED",
      "profile_name": "RAG_PROFILE",
      "vector_dimension": 1536,
      "vector_distance_metric": "cosine",
      "chunk_overlap": 128,
      "chunk_size": 400,
      "refresh_rate": 60
    }'
  );
END;
/

BEGIN
  DBMS_CLOUD_AI.set_profile(profile_name => 'RAG_PROFILE');
END;
/

試したクエリ

select ai narrate 2026年度上期の評価対象月を教えてください;
select ai narrate 要フォロー判定のルールを要約してください;
select ai narrate G4社員に推奨される研修候補を教えてください;

結果

今回の検証では次の応答となりました。

2026年度上期の評価対象期間は4月、5月、6月、7月、8月、9月を指す。

Sources:
  - evaluation_period_guide.txt

要フォロー判定の基本ルール:
- 残業時間が 45 時間超の社員は、業務負荷の観点からフォロー候補とする。
- エンゲージメントスコアが 70 未満の社員は、面談優先候補とする。
- 残業時間が 45 時間超かつエンゲージメントスコアが 70 未満の社員は、最優先で上長面談を設定する。

Sources:
  - hr_followup_policy.txt

G4 の社員には、プロジェクト管理研修やデータ活用研修を推奨する。

Sources:
  - training_recommendation_guide.txt

Select AI Agent で RAG と SQL をつなげる

それぞれの処理をエージェントで繋げて一連の処理を組み合わせ、複合的な回答が出来るかを確認してみます。
見たいのは、RAG が補った補助データをもとに SQL が動き、最終回答までつながるかです。

Agent の考え方

今回は次の役割分担で team を作ります。

  1. RAG
    上期の月対応、要フォロー判定ルール、等級別の推奨研修を取得する
  2. SQL
    RAG で得た月一覧と判定ルールを使って対象社員を抽出する
  3. Synthesis
    要フォロー理由と推奨研修をまとめる

Team の定義例

各エージェントに与えているプロンプトは試行錯誤しながら与えたものになります。
もっとスマートなやりかたがあるかもしれませんので、あくまで参考情報としてください。

Agent team の定義例を開く
BEGIN
  DBMS_CLOUD_AI_AGENT.drop_team('HR_REVIEW_TEAM', force => TRUE);
EXCEPTION
  WHEN OTHERS THEN
    IF SQLCODE != -4043 THEN RAISE; END IF;
END;
/
BEGIN
  DBMS_CLOUD_AI_AGENT.drop_task('HR_SYNTH_TASK', force => TRUE);
  DBMS_CLOUD_AI_AGENT.drop_task('HR_SQL_TASK', force => TRUE);
  DBMS_CLOUD_AI_AGENT.drop_task('HR_RAG_TASK', force => TRUE);
EXCEPTION
  WHEN OTHERS THEN
    IF SQLCODE != -4043 THEN RAISE; END IF;
END;
/
BEGIN
  DBMS_CLOUD_AI_AGENT.drop_agent('HR_SYNTH_AGENT', force => TRUE);
  DBMS_CLOUD_AI_AGENT.drop_agent('HR_SQL_AGENT', force => TRUE);
  DBMS_CLOUD_AI_AGENT.drop_agent('HR_RAG_AGENT', force => TRUE);
EXCEPTION
  WHEN OTHERS THEN
    IF SQLCODE != -4043 THEN RAISE; END IF;
END;
/
BEGIN
  DBMS_CLOUD_AI_AGENT.drop_tool('HR_RAG_TOOL', force => TRUE);
  DBMS_CLOUD_AI_AGENT.drop_tool('HR_SQL_TOOL', force => TRUE);
EXCEPTION
  WHEN OTHERS THEN
    IF SQLCODE != -4043 THEN RAISE; END IF;
END;
/

BEGIN
  DBMS_CLOUD_AI_AGENT.create_tool(
    tool_name  => 'HR_SQL_TOOL',
    attributes => '{
      "tool_type": "SQL",
      "instruction": "評価期間の定義は SQL から推測せず、入力で渡された月一覧だけを使ってください。社員を識別するときは employee_id ではなく employee_name を優先してください。回答は日本語で、数値はそのまま示してください。",
      "tool_params": {
        "profile_name": "SQL_PROFILE"
      }
    }'
  );

  DBMS_CLOUD_AI_AGENT.create_tool(
    tool_name  => 'HR_RAG_TOOL',
    attributes => '{
      "tool_type": "RAG",
      "tool_params": {
        "profile_name": "RAG_PROFILE",
        "match_limit": 4
      }
    }'
  );
END;
/

BEGIN
  DBMS_CLOUD_AI_AGENT.create_agent(
    agent_name => 'HR_RAG_AGENT',
    attributes => '{
      "profile_name": "RAG_PROFILE",
      "role": "人事評価制度の定義、判定ルール、等級別研修方針など、文書側にある補助情報を扱う担当です。文書から確認できる内容だけを返し、社員名、件数、数値結果などの構造化データ由来の事実は作らないでください。"
    }'
  );

  DBMS_CLOUD_AI_AGENT.create_agent(
    agent_name => 'HR_SQL_AGENT',
    attributes => '{
      "profile_name": "SQL_PROFILE",
      "role": "EMPLOYEE_STATUS と TRAINING_HISTORY などの構造化データを確認し、事実ベースの結果を返す担当です。データから確認できる内容だけを返し、文書の要約や制度説明は行わないでください。"
    }'
  );

  DBMS_CLOUD_AI_AGENT.create_agent(
    agent_name => 'HR_SYNTH_AGENT',
    attributes => '{
      "profile_name": "SQL_PROFILE",
      "role": "RAG の補助情報と SQL の事実データを統合して、日本語の最終回答を作成する担当です。各ステップの結果に基づいて回答をまとめ、入力にない新しい事実や不要な説明は足さないでください。"
    }'
  );
END;
/

BEGIN
  DBMS_CLOUD_AI_AGENT.create_task(
    task_name  => 'HR_RAG_TASK',
    attributes => '{
      "instruction": "ユーザー質問 [{query}] を読み、文書から補うべき情報がある場合だけ RAG ツールを使ってください。補う対象は、評価期間の月対応、判定ルール、制度説明、等級別の推奨研修方針などです。質問に上期、下期、年度、評価期間、要フォロー、フォロー候補、面談優先、推奨研修のいずれかが含まれる場合は、必ず RAG ツールを実行してください。上期や下期などの期間表現が含まれる場合は、必ず YYYY-MM の月一覧を返してください。要フォローや面談優先が含まれる場合は、必ず判定ルールを返してください。推奨研修が含まれる場合は、必ず等級別の研修方針を返してください。RAG が不要なのは、期間定義や制度ルールを使わない単純な件数確認や集計だけです。その場合のみ『RAG lookup was not needed.』の趣旨を日本語で簡潔に返してください。",
      "tools": ["HR_RAG_TOOL"],
      "enable_human_tool": false
    }'
  );

  DBMS_CLOUD_AI_AGENT.create_task(
    task_name  => 'HR_SQL_TASK',
    attributes => '{
      "instruction": "ユーザー質問 [{query}] と前段で渡された補助情報を見て、構造化データの確認が必要な場合だけ SQL ツールを使ってください。補助情報に期間、判定条件、分類ルール、候補一覧などが含まれていれば、それをそのまま検索条件や比較条件として使ってください。最初の検索結果が質問の意図に合わない場合は、補助情報を見直しながら条件を調整して SQL ツールを再実行してください。回答には、SQL で確認できた事実だけを日本語で簡潔に返してください。個別の対象を示す場合は識別しやすい名称を含め、補助情報にない新しい条件名や候補名は作らないでください。候補が複数ある場合は、妥当な候補を省略せずそのまま列挙してください。",
      "tools": ["HR_SQL_TOOL"],
      "input": "HR_RAG_TASK",
      "enable_human_tool": false
    }'
  );

  DBMS_CLOUD_AI_AGENT.create_task(
    task_name  => 'HR_SYNTH_TASK',
    attributes => '{
      "instruction": "ユーザー質問 [{query}]、RAG で得た補助情報、SQL で得た事実データを統合し、日本語で最終回答を作成してください。質問の範囲だけに答え、聞かれていない情報は追加しないでください。",
      "tools": [],
      "input": "HR_SQL_TASK",
      "enable_human_tool": false
    }'
  );
END;
/

BEGIN
  DBMS_CLOUD_AI_AGENT.create_team(
    team_name  => 'HR_REVIEW_TEAM',
    attributes => '{
      "process": "sequential",
      "agents": [
        {"name": "HR_RAG_AGENT", "task": "HR_RAG_TASK"},
        {"name": "HR_SQL_AGENT", "task": "HR_SQL_TASK"},
        {"name": "HR_SYNTH_AGENT", "task": "HR_SYNTH_TASK"}
      ]
    }',
    description => 'HR review workflow with RAG and SQL'
  );
END;
/

今回の team 定義では、役割を以下の形に意識して分けています。

  • HR_RAG_AGENT: 評価期間、判定ルール、研修方針のような補助情報だけを探す
  • HR_SQL_AGENT: 社員一覧、残業時間、エンゲージメント、受講履歴のような事実データだけを探す
  • HR_SYNTH_AGENT: 上の結果を、質問に必要な範囲だけまとめる

Team をセッションに設定する

EXEC DBMS_CLOUD_AI_AGENT.set_team(team_name => 'HR_REVIEW_TEAM');

set_team現在のセッションに対して有効化されます。
そのため、上の実行後は同じセッションのまま select ai agent ... を続けて実行します。

試した質問

今回は、次の 3 問を同じセッションで続けて実行しました。

select ai agent 2026年度上期に該当する要フォロー対象社員を列挙してください;
select ai agent 2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補を示してください;
select ai agent 部長別の平均残業時間と平均エンゲージメントを集計してください;

結果

今回の検証では次の結果となりました。

-- 1問目
2026年度上期に該当する要フォロー対象社員は以下の通りです。
- 鈴木 一郎(残業時間52時間、エンゲージメントスコア66
- 山田 翔太(残業時間47時間、エンゲージメントスコア69

-- 2問目
2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補は以下の通りです。
- 鈴木 一郎(G3):提案力強化研修、関係者調整研修
- 山田 翔太(G4):プロジェクト管理研修、データ活用研修

-- 3問目
部長別の平均残業時間と平均エンゲージメントは以下の通りです。
- 佐藤 部長:平均残業時間45.67時間、平均エンゲージメント69.67
- 高橋 部長:平均残業時間23.5時間、平均エンゲージメント84.5
- 井上 部長:平均残業時間44時間、平均エンゲージメント72
- 加藤 部長:平均残業時間21時間、平均エンゲージメント85

各エージェントが何をしたか確認する

select ai agent 実行後は、USER_AI_AGENT_TASK_HISTORY を見ると、各タスクの入出力を確認できます。

SELECT task_order,
       start_date,
       agent_name,
       task_name,
       state,
       dbms_lob.substr(input, 1000, 1)  AS input_text,
       dbms_lob.substr(result, 2000, 1) AS result_text
  FROM user_ai_agent_task_history
 ORDER BY start_date DESC;

たとえば 2 問目の
2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補を示してください
を実行したときは、次のように追えました。

TASK_ORDER  AGENT_NAME      TASK_NAME      STATE
----------  --------------  -------------  ---------
0           HR_RAG_AGENT    HR_RAG_TASK    SUCCEEDED
INPUT_TEXT:
2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補を示してください
RESULT_TEXT:
2026年度上期に該当する月は2026-04, 2026-05, 2026-06, 2026-07, 2026-08, 2026-09です。
要フォロー対象者の判定ルール:
- 残業時間が 45 時間超の社員は、業務負荷の観点からフォロー候補とする。
- エンゲージメントスコアが 70 未満の社員は、面談優先候補とする。
- 残業時間が 45 時間超かつエンゲージメントスコアが 70 未満の社員は、最優先で上長面談を設定する。
要フォロー対象者の等級別推奨研修方針:
- G3 の社員には、提案力強化研修や関係者調整研修を推奨する。
- G4 の社員には、プロジェクト管理研修やデータ活用研修を推奨する。

1           HR_SQL_AGENT    HR_SQL_TASK    SUCCEEDED
INPUT_TEXT:
2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補を示してください
RESULT_TEXT:
鈴木 一郎(G3)の推奨研修候補は提案力強化研修と関係者調整研修です。
山田 翔太(G4)の推奨研修候補はプロジェクト管理研修とデータ活用研修です。

2           HR_SYNTH_AGENT  HR_SYNTH_TASK  SUCCEEDED
INPUT_TEXT:
2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補を示してください
RESULT_TEXT:
2026年度上期の要フォロー対象者について、等級に沿った推奨研修候補は以下の通りです。
- 鈴木 一郎(G3):提案力強化研修、関係者調整研修
- 山田 翔太(G4):プロジェクト管理研修、データ活用研修

この確認を入れると、単に最終回答だけを見るのではなく、

  • RAG が先にどの補助データを返したか
  • SQL がその補助データを使って社員を抽出したか
  • 最後に Synthesis がどうまとめたか

を データベース内で履歴として追えるようになっています。

まとめ

Select AI Agentを活用することで従来のOracle内に蓄積された業務から生成される構造化データを、社内ルールなどの非構造化データと組み合わせてより柔軟かつ簡単に活用できそうに思えました。
Select AI Agentにはその他にもWeb検索やSlack、Mail連携による通知など様々な活用方法があります。
社内システムから蓄積されるその会社独自の業務データをSelect AI Agentを組み合わせることで、その会社固有のデータを活かしたAI活用をぜひご検討下さい!

12
3
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
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?