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. 構成図
- 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を選択する。
- Configure connectionで、RDSのホスト名やSecret ARNを指定する。
- Configure enrichment は、デフォルトのままとする。
- 接続に成功すると、テーブルの情報がスキャンされてソースとして提案される。
- 「Approve」すると、テーブルがソースとして登録される。
5.4 オントロジーの作成
前項で登録したソース(RDSのテーブル)を元にオントロジーを作成する。
- COA > Ontology > Induction の Start induction を選択する。
- Data sourcesに、前項で登録したRDSを選択する。
- オントロジー案として読み込まれるので、Accept proposalを選択して承認する。
5.5 Playgroundでの Tier 2 動作確認
自然言語での問い合わせからSQLが生成され、実行されたSQLの結果をもとに回答を行うTier 2の動作を確認する。
- 「list up all name of customers」を問い合わせる。3名の名前が回答される(正解)。
- 「> Show trace」を見て、詳細を確認する。Tier 1 で処理できず、Tier 2 でSQLが生成され、クエリ結果を元に回答が作成されていることが確認できる。
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文)
- 「Metrics」で登録したキーワードを用いた質問「tell me the number of total customers」を投げると、正しく回答される。
- 「> Show trace」で詳細を確認すると、今回はTier 1で処理できたことが確認できる。
6. 所感
- 今回はTier 1,2 はどうやったら使われるの?という点を検証することができた。
- そもそもInduceしたオントロジーがどのように活用できるのかなどがよく分からないため、引き続きひも解いていきたい。















