0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Context Ontology Accelerator (COA) を使ってみる #2: RDS内データの参照

0
Posted at

1. はじめに

  • 前回の記事「Context Ontology Accelerator (COA) を使ってみる #1: デプロイと動作確認」では、COAのデプロイを行い、Playgroundで簡単なQ&Aが行えるところまでを確認した。
  • まだCOAの概念や、マッチするユースケースがつかめておらず、試行錯誤が必要な状態のため、気になった機能を試してみて、理解を深めている状態。
  • 「Serve - Playground」の機能(ユーザからの質問に回答する機能)にて、回答を生成する際、Tier1~3というステップの表示があるが、前回の検証ではTier3のみが用いられており、Tier1、Tier2が何なのか気になったため、今回はTier 1, Tier 2を使わせるにはどうすればよいかを確認する。

2. やったこと

  • COAと同じVPCにRDS(Postgres)を作成し、テスト用のテーブル、レコードを作成する。
  • COAからRDSに対しJDBC接続し、データソースとして登録し、RDS内のデータをもとにオントロジーを作成する。
  • PlaygroundのStandardモードで、どのような質問に対してどのTierでの処理が行われるのかを確認し、質問の内容に応じてTier 1,Tier 2が使用されることを確認する。

3. 構成図

image.png

  • COAのコンポーネント(VPC LambdaやECSなど)が存在しているVPC内にRDS(Postgres)を追加し、COAの設定でRDSへのJDBC接続を行う。

4. 事前学習(仕様に関する自分の理解)

  • Playgroundでは、データソースに対するQ&Aを行うことができる。

  • PlaygroundではStandardモードとDeep Reasoningモードが選択できる。

    • Standard: Tier1,2,3の順に一度ずつ処理するモード。Tier1で完了した場合はTier2,3の処理は行われない。
    • Deep Reasoning: AIが自律的にLoop処理などを行うモード。Standardより精度が上がる可能性があるが、処理時間も増える。
  • Tier 毎の概要は以下の通り。

Tier 対象 仕組み 例
Tier 1 構造化(よく使われる指標) 登録済みのSQLをそのまま実行 総売上、注文数
Tier 2 構造化(任意の集計) ユーザの質問に応じてSQLを生成 カテゴリ別売上、条件付き検索
Tier 3 非構造化・関係性 グラフ探索+ベクトル検索で情報を集めLLMが合成 文書の内容、エンティティ間の関係
  • Tier1,2 の処理は問い合わせ内容の自然言語をSPARQL/SQLに変換してデータソースを検索するものなので、Tier1,2の処理をさせようとする場合は構造化された(SQLで検索できる)データソースがあるとやりやすい。

5. 手順

5.1 COAのデプロイと初期設定

  • オレゴンリージョンに、COA v0.3.2(2026/9/21時点の最新)をデプロイする。
  • ユーザとネームスペースを作成する。

5.2 RDSインスタンス、テーブル、レコードの作成

  • COAと同じVPCにRDS(Postgres 18.3)を作成する。

  • COAからの接続仕様に合わせるため、RDSに接続するためのID/パスワードは、Secret Managerに登録する。また、Secret Managerの該当のシークレットには、Key: 「coa:namespace」、Value: 「COAのネームスペースのID(UUID)」を設定する。

  • 以下のテーブルとレコードを作成する。

ER 図

テーブルとカラムの説明

customers(顧客)

カラム 型 説明
customer_id int 顧客ID(主キー)
name varchar 氏名
loyalty_tier varchar 会員ランク(Gold / Silver / Bronze)
signup_date date 登録日

orders(注文)

カラム 型 説明
order_id int 注文ID(主キー)
customer_id int 顧客ID(→ customers)
total_amount decimal 注文合計金額
order_date date 注文日
status varchar 状態(completed / cancelled / pending)

order_items(注文明細)

カラム 型 説明
order_item_id int 明細ID(主キー)
order_id int 注文ID(→ orders)
product_id int 商品ID(→ products)
quantity int 数量
unit_price decimal 購入時単価

products(商品)

カラム 型 説明
product_id int 商品ID(主キー)
name varchar 商品名
category varchar カテゴリ(Electronics / Books / Food)
price decimal 定価

サンプルデータ

INSERT INTO customers VALUES
(1, 'Tanaka', 'Gold',   '2025-01-15'),
(2, 'Suzuki', 'Silver', '2025-03-20'),
(3, 'Sato',   'Bronze', '2025-06-01');

INSERT INTO products VALUES
(101, 'Laptop',   'Electronics', 1200.00),
(102, 'Mouse',    'Electronics',   25.00),
(103, 'Notebook', 'Books',          8.00),
(104, 'Coffee',   'Food',          15.00);

INSERT INTO orders VALUES
(1001, 1, 1225.00, '2025-07-05', 'completed'),  -- Laptop 1200 + Mouse 25
(1002, 2,   25.00, '2025-07-10', 'completed'),  -- Mouse 25
(1003, 1,    8.00, '2025-08-01', 'cancelled'),  -- Notebook 8
(1004, 3,   15.00, '2025-08-15', 'completed');  -- Coffee 15

INSERT INTO order_items VALUES
(1, 1001, 101, 1, 1200.00),  -- 注文1001: Laptop x1
(2, 1001, 102, 1,   25.00),  -- 注文1001: Mouse x1
(3, 1002, 102, 1,   25.00),  -- 注文1002: Mouse x1
(4, 1003, 103, 1,    8.00),  -- 注文1003: Notebook x1
(5, 1004, 104, 1,   15.00);  -- 注文1004: Coffee x1

5.3 COAからRDSへ接続(データソース登録)

COA にて、RDS内のテーブルをデータソースとして登録する。

  • COA > Scan > Sources の Choose source typeで、JDBC databaseを選択する。

image.png

  • Configure connectionで、RDSのホスト名やSecret ARNを指定する。

image.png

  • Configure enrichment は、デフォルトのままとする。

image.png

  • 接続に成功すると、テーブルの情報がスキャンされてソースとして提案される。

image.png

  • 「Approve」すると、テーブルがソースとして登録される。

image.png

5.4 オントロジーの作成

前項で登録したソース(RDSのテーブル)を元にオントロジーを作成する。

  • COA > Ontology > Induction の Start induction を選択する。

image.png

  • Data sourcesに、前項で登録したRDSを選択する。

image.png

  • オントロジー案として読み込まれるので、Accept proposalを選択して承認する。

image.png

5.5 Playgroundでの Tier 2 動作確認

自然言語での問い合わせからSQLが生成され、実行されたSQLの結果をもとに回答を行うTier 2の動作を確認する。

  • 「list up all name of customers」を問い合わせる。3名の名前が回答される(正解)。

image.png

  • 「> Show trace」を見て、詳細を確認する。Tier 1 で処理できず、Tier 2 でSQLが生成され、クエリ結果を元に回答が作成されていることが確認できる。

image.png

5.6 Playgroundでの Tier 1 動作確認

Tier 1での回答を行うには、キーワードとSQLをあらかじめ「Metrics」に登録しておく必要がある。

  • Ontology > Metrics で、Create Metrics を選択し、以下の内容を入力する。
    • Name: total_customers (キーワード)
    • Data source/Source table: データソース(RDS)および対象のテーブル
    • SQL Expressions: キーワードに回答するためのSQL(SELECT文)

image.png

image.png

  • 「Metrics」で登録したキーワードを用いた質問「tell me the number of total customers」を投げると、正しく回答される。

image.png

  • 「> Show trace」で詳細を確認すると、今回はTier 1で処理できたことが確認できる。

image.png

image.png

6. 所感

  • 今回はTier 1,2 はどうやったら使われるの?という点を検証することができた。
  • そもそもInduceしたオントロジーがどのように活用できるのかなどがよく分からないため、引き続きひも解いていきたい。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?