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?

[Oracle Cloud] Select AI の精度をあげる

0
Posted at

はじめに

この記事は、Oracle Cloud(OCI) で提供されている Autonomouse AI Database(ADB) の Select AI の回答精度を上げる方法についてまとめています.
まず、Select AI は、自然言語で DB に問い合わせると SQL を自動生成&実行し、結果を返してくれる技術です.
ただ、LLM を利用する技術なので、適切な質問文を投げないと精度の良い回答が得られないという問題が、あります。
質問文は、任意のユーザが、それぞれの判断で文書化するため、事前に想定するのは困難です. そこで、テーブルの内容や列の意味などを事前に定義しておくことで、 LLM が質問文に即した回答(SQL)を得られるようになります.
そこで、その方法のついてまとめています。
...

対象者

この記事は下記のような人を対象にしています.

  • Oracle DB は、オンプレミスで使っている.
  • Oracle Cloud の基本操作は、知っている.
  • Oracle DB を操作するときは、sqlplus を使いたい.
  • ADB とその上での Select AI を使ったことがある.
  • Select AI の回答精度を上げる方法を知りたい.

目次

  • 事前準備(ADBの作成から接続まで)
    • ADB の作成
    • PC(macbook) への Oracle Client の install
    • sqlplus からの ADB への接続
  • Select AI の復習
  • 精度向上の方法
  • 方法1. comment を使う方法
  • 方法2. annotation を使う方法
  • 余談
  • 参考記事・ドキュメント

事前準備(ADBの作成から接続まで)

以下の 4 つは、別の記事にまとめているのでそちらを参照ください。
[Oracle Cloud] ADB で Select AI を試してみる

  • ADB の作成
  • PC(macbook) への Oracle Client の install
  • sqlplus からの ADB への接続
  • Select AI を使用できるようにする

Select AI の復習

事前準備完了の状態では、以下のように Select AI が実行できます。

duke@mac ~ % selectAI % sqlplus ai_user/Welcome12345#@aidb1_high
SQL> 
SQL> select username from user_users;

USERNAME
--------------------------------------------------------------------------------
AI_USER

SQL> 
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('SELECT_AI_PROFILE');

PL/SQLプロシージャが正常に完了しました。

SQL>
SQL> desc highschools;
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 BOROUGH					    VARCHAR2(64)
 SCHOOL_NAME					    VARCHAR2(256)
 NEIGHBORHOOD					    VARCHAR2(64)
 INTEREST					    VARCHAR2(64)
 METHOD 					    VARCHAR2(64)
 TOTAL_STUDENTS 				    NUMBER
 GRADUATION_RATE				    NUMBER
 ATTENDANCE_RATE				    NUMBER
 COLLEGE_CAREER_RATE				    NUMBER
 SAFE						    NUMBER
 SEATS						    NUMBER
 APPLICANTS					    NUMBER
 DBN						    VARCHAR2(64)
 LATITUDE					    NUMBER
 LONGITUDE					    NUMBER
 LANGUAGE_CLASSES				    VARCHAR2(4000)
 ADVANCED_PLACEMENT_COURSES			    VARCHAR2(4000)
 SCHOOL_SPORTS					    VARCHAR2(4000)
 FAQ_URL					    VARCHAR2(64)
 OVERVIEW_PARAGRAPH				    VARCHAR2(4000)
 ACADEMIC_OPPORTUNITIES 			    VARCHAR2(4000)
 ADVANCEDPLACEMENT_COURSES			    VARCHAR2(4000)
 DIADETAILS					    VARCHAR2(4000)
 EXTRACURRICULAR_ACTIVITIES			    VARCHAR2(4000)
 PSAL_SPORTS_BOYS				    VARCHAR2(4000)
 PSAL_SPORTS_GIRLS				    VARCHAR2(4000)
 ADDTL_INFO1					    VARCHAR2(4000)

SQL> select count(*) from highschools;

  COUNT(*)
----------
       427

SQL> 
SQL> select ai 高校の総数は ;

Total_High_Schools
------------------
	       427

SQL> 

精度向上の方法

LLM は、テーブル内のデータの意味を知らないので、テーブル名や列名などから推測し判断しています。
そのため、質問文に対して適切な回答を得るには、テーブルや列の意味を詳しく明記しておく必要があります.
その方法として、OracleDB の Comment と Annotation があります.
Comment と Annotation の違いは、以下のようになります。

特徴 Comment Annotation
利用できるバージョン OracleDB 6~26ai 26ai
対象のオブジェクト 表、列 表、列、ビュー、索引、ドメイン
主な用途 プログラマのためにコードの説明を行う LLM のためにデータの意味やルールを指定する
記述形式 短いテキスト 名前と値のペア
メリット 従来のDBの機能のため設定が容易 LLM のためにより複雑なビジネスルールや計算式などを定義できる

方法1. Comment を使う場合

今回利用するテーブルは、highschools という名前ですが、comment が全くない状態から、以下のような質問文を投げてみます。

SQL> select ai クイーンズに高校は全部で何校ありますか;

TOTAL_SCHOOLS
-------------
	    0

SQL> 
SQL> SELECT AI showsql クイーンズに高校は全部で何校ありますか;

RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS total_schools
FROM "AI_USER"."HIGHSCHOOLS" h
WHERE UPPER(h."BOROUGH") = UPPER('Queens')


SQL> 

LLM が気を利かせて、Queens と英語に置き換えて検索してくれましたが、実際の
BOROUGH 列には、日本語で”クイーンズ"と入っているためヒットしませんでした。

そこで、BOROUGH 列は、日本語でデータが入っているということを comment に追加してあげます.
ただ、その前に、LLM に対して Select AI では、comment の情報も合わせて使って欲しいということを伝える必要があります。
そのためには、AI Profile に attribute として comments=true (デフォルトは false) をセットします。

SQL> select profile_name, attribute_name, attribute_value from user_cloud_ai_profile_ATTRIBUTES;

PROFILE_NAME				 ATTRIBUTE_NAME 			  ATTRIBUTE_VALUE
---------------------------- ---------------------------- ----------------------------------------
SELECT_AI_PROFILE			 target_language			  ja
SELECT_AI_PROFILE			 provider				      oci
SELECT_AI_PROFILE			 credential_name			  OCI_CRED
SELECT_AI_PROFILE			 model					      xai.grok-code-fast-1
SELECT_AI_PROFILE			 region 				      us-chicago-1
SELECT_AI_PROFILE			 object_list				 [{"owner":"ai_user","name":"highschools"}]

6行が選択されました。

SQL>
begin
    dbms_cloud_ai.set_attribute(
    profile_name => 'SELECT_AI_PROFILE' ,
    attribute_name => 'comments',
    attribute_value => 'true' );
    end;
SQL> /

PL/SQLプロシージャが正常に完了しました。

SQL> select profile_name, attribute_name, attribute_value from user_cloud_ai_profile_ATTRIBUTES;

PROFILE_NAME				 ATTRIBUTE_NAME 			  ATTRIBUTE_VALUE
---------------------------- ---------------------------- ---------------
SELECT_AI_PROFILE			 target_language			  ja
SELECT_AI_PROFILE			 comments				      true
SELECT_AI_PROFILE			 provider				      oci
SELECT_AI_PROFILE			 credential_name			  OCI_CRED
SELECT_AI_PROFILE			 model					      xai.grok-code-fast-1
SELECT_AI_PROFILE			 region 				      us-chicago-1
SELECT_AI_PROFILE			 object_list				  [{"owner":"ai_user","name":"highschools"}]

7行が選択されました。

SQL> 

AI Profile で comment を使う設定ができたので BOROUGH 列は、日本語でデータが入っているということを追加してあげます.

SQL> comment on column ai_user.highschools.BOROUGH IS '地区名が日本語で書かれている';

コメントが作成されました。

SQL> select * from user_col_comments where table_name='HIGHSCHOOLS';

TABLE_NAME		       COLUMN_NAME		      COMMENTS			     ORIGIN_CON_ID
---------------------- ---------------------- ------------------- --------
HIGHSCHOOLS		       EXTRACURRICULAR_ACTIVITIES					   144
HIGHSCHOOLS		       PSAL_SPORTS_BOYS 						       144
HIGHSCHOOLS		       PSAL_SPORTS_GIRLS						       144
HIGHSCHOOLS		       ADDTL_INFO1							           144
HIGHSCHOOLS            BOROUGH                 地区名が日本語で書かれている 144
HIGHSCHOOLS		       SCHOOL_NAME							           144
HIGHSCHOOLS		       NEIGHBORHOOD							           144
HIGHSCHOOLS		       INTEREST 							           144
HIGHSCHOOLS		       METHOD								           144
HIGHSCHOOLS		       TOTAL_STUDENTS							       144
HIGHSCHOOLS		       GRADUATION_RATE							       144

TABLE_NAME		       COLUMN_NAME		      COMMENTS			     ORIGIN_CON_ID
---------------------- ---------------------- ------------------- --------
HIGHSCHOOLS		       ATTENDANCE_RATE							       144
HIGHSCHOOLS		       COLLEGE_CAREER_RATE						       144
HIGHSCHOOLS		       SAFE								               144
HIGHSCHOOLS		       SEATS								           144
HIGHSCHOOLS		       APPLICANTS							           144
HIGHSCHOOLS		       DBN								               144
HIGHSCHOOLS		       LATITUDE 							           144
HIGHSCHOOLS		       LONGITUDE							           144
HIGHSCHOOLS		       LANGUAGE_CLASSES 						       144
HIGHSCHOOLS		       ADVANCED_PLACEMENT_COURSES					   144
HIGHSCHOOLS		       SCHOOL_SPORTS							       144

TABLE_NAME		       COLUMN_NAME		      COMMENTS			     ORIGIN_CON_ID
---------------------- ---------------------- ------------------- --------
HIGHSCHOOLS		       FAQ_URL								           144
HIGHSCHOOLS		       OVERVIEW_PARAGRAPH						       144
HIGHSCHOOLS		       ACADEMIC_OPPORTUNITIES						   144
HIGHSCHOOLS		       ADVANCEDPLACEMENT_COURSES					   144
HIGHSCHOOLS		       DIADETAILS							           144

27行が選択されました。

SQL> 

ここで改めて同じ質問を投げてみます。
すると無事に結果が返ってきました。

SQL> select ai クイーンズに高校は全部で何校ありますか;

NUM_HIGHSCHOOLS
---------------
	     80

SQL>
SQL> select ai showsql クイーンズに高校は全部で何校ありますか;

RESPONSE
-------------------------------------------------------------------------------------------------------
SELECT COUNT(*) AS num_highschools
FROM "AI_USER"."HIGHSCHOOLS" h
WHERE h."BOROUGH" = 'クイーンズ'


SQL> 
SQL> select ai showprompt クイーンズに高校は全部で何校ありますか;

RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[
  {
    "role" : "SYSTEM",
    "content" :
    [
      {
	"type" : "TEXT",
	"text" : "### Oracle SQL tables with their properties:\n # CREATE TABLE \"AI_USER\".\"HIGHSCHOOLS\" (\"EXTRACURRICULAR_ACTIVITIES\" VARCHAR2(4000), \"DIADETAILS\" VARCHAR2(4000), \"ADVANCEDPLA
CEMENT_COURSES\" VARCHAR2(4000), \"ACADEMIC_OPPORTUNITIES\" VARCHAR2(4000), \"OVERVIEW_PARAGRAPH\" VARCHAR2(4000), \"FAQ_URL\" VARCHAR2(64) 'よくある質問', \"SCHOOL_SPORTS\" VARCHAR2(4000), \"ADVANCED
_PLACEMENT_COURSES\" VARCHAR2(4000), \"LANGUAGE_CLASSES\" VARCHAR2(4000), \"LONGITUDE\" NUMBER, \"LATITUDE\" NUMBER, \"DBN\" VARCHAR2(64), \"APPLICANTS\" NUMBER, \"SEATS\" NUMBER, \"SAFE\" NUMBER, \"C
OLLEGE_CAREER_RATE\" NUMBER, \"ATTENDANCE_RATE\" NUMBER, \"GRADUATION_RATE\" NUMBER, \"TOTAL_STUDENTS\" NUMBER, \"METHOD\" VARCHAR2(64), \"INTEREST\" VARCHAR2(64), \"NEIGHBORHOOD\" VARCHAR2(64), \"SCH

RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OOL_NAME\" VARCHAR2(256), \"BOROUGH\" VARCHAR2(64) '地区名が日本語で書かれている', \"ADDTL_INFO1\" VARCHAR2(4000), \"PSAL_SPORTS_GIRLS\" VARCHAR2(4000), \"PSAL_SPORTS_BOYS\" VARCHAR2(4000))\n"
      }
    ]
  },
  {
    "role" : "USER",
    "content" :
    [
      {
	"type" : "TEXT",
	"text" : "\n\nGiven an input Question, create a syntactically correct Oracle SQL query to run. Pretty print the SQL query. \n - Pay attention to using only the column names that you can see in

RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 the schema description.\n - Be careful to not query for columns that do not exist. Also, pay attention to which column is in which table.\n - Please double check that the SQL query you generate is va
lid for Oracle Database.\n - Consider table name, schema name and column name to be case sensitive and enclose in double quotes.  - Only use the tables listed below. \n - If the table definition inclu
des the table owner, you should include both the owner name and user-qualified table name in the Oracle SQL. - DO NOT keep empty lines in the middle of the Oracle SQL.\n - DO NOT write anything else e
xcept the Oracle SQL.\n - Always use table alias and easy to read column aliases. \n\nFor string comparisons in WHERE clause, CAREFULLY check if any string in the question is in DOUBLE QUOTES, and fol
low the rules: \n - If a string is in DOUBLE QUOTES, use case SENSITIVE comparisons with NO UPPER() function.\n - If a string is not in DOUBLE QUOTES, use case INSENSITIVE comparisons by using UPPER()
 function around both operands of the string comparison.\nNote: These rules apply strictly to string comparisons in the WHERE clause and do not affect column names, table names, or other query compone
nts.\n\nUse the examples below in two ways: \n- If the question matches an user_prompt in examples, return the corresponding SQL query exactly as shown.\n- If the question is different, use the follow
ing examples as a reference. Learn their structure, aliasing, and casing rules when generating new queries. Here are examples of previous successful queries for similar questions that you can refer to
 and learn from: \n[{\"user_prompt\":\"クイーンズにある高校の数\",\"sql_query\":\"SELECT COUNT(*) AS num_highschools\\nFROM \\\"AI_USER\\\".\\\"HIGHSCHOOLS\\\" h\\nWHERE h.\\\"BOROUGH\\\" = 'クイーン
ズ'\"},{\"user_prompt\":\"高校の生徒の総数を教えて\",\"sql_query\":\"SELECT SUM(h.\\\"TOTAL_STUDENTS\\\") AS tal\\nFROM \\\"AI_USER\\\".\\\"HIGHSCHOOLS\\\" h\"},{\"user_prompt\":\"倍率が高い高校10校\"
,\"sql_query\":\"SELECT h.\\\"SCHOOL_NAME\\\", (h.\\\"APPLICANTS\\\" / h.\\\"SEATS\\\") AS ratio\\nFROM \\\"AI_USER\\\".\\\"HIGHSCHOOLS\\\" h\\nWHERE h.\\\"APPLICANTS\\\" IS NOT NULL\\n  AND h.\\\"SEA

RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TS\\\" IS NOT NULL\\n  AND h.\\\"SEATS\\\" > 0\\nORDER BY ratio DESC\\nFETCH FIRST 10 ROWS ONLY\"}]\n\nQuestion: クイーンズに高校は全部で何校ありますか"
      }
    ]
  }
]


SQL> 

上記の showprompt の結果から、LLM に渡される文字列を見てみると以下の記述が追加されていることがわかりました。

BOROUGH\" VARCHAR2(64) '地区名が日本語で書かれている',

このように列やテーブルなどに comment の形で、情報を追加してあげることで LLM が正しい構造を理解し、結果、回答精度が上がります.
ただ、comment が文章の場合は、文書解析を行う必要があるため、回答に時間がかかる可能性があります.

方法2. Annotation を使う方法

次は、Annotation を使った方法を試します。
そのためには、まず、AI Profile に attribute として annotations=true (デフォルトは false) をセットします。

SQL>  begin
  	 dbms_cloud_ai.set_attribute(
  	 profile_name => 'SELECT_AI_PROFILE' ,
  	 attribute_name => 'annotations',
  	 attribute_value => 'true' );
  	 end;
SQL> /

PL/SQLプロシージャが正常に完了しました。

SQL> select profile_name, attribute_name, attribute_value from user_cloud_ai_profile_ATTRIBUTES ;


PROFILE_NAME		       ATTRIBUTE_NAME	    ATTRIBUTE_VALUE
------------------------- -------------------- --------------------
SELECT_AI_PROFILE	       target_language	    ja
SELECT_AI_PROFILE	       annotations	        true
SELECT_AI_PROFILE	       comments 	        true
SELECT_AI_PROFILE	       provider 	        oci
SELECT_AI_PROFILE	       credential_name	    OCI_CRED
SELECT_AI_PROFILE	       model		        xai.grok-code-fast-1
SELECT_AI_PROFILE	       region	   	        us-chicago-1
SELECT_AI_PROFILE	       object_list	        [{"owner":"ai_user","name":"highschools"}]
                            
8行が選択されました。

SQL> 

Annotation は、(名前, 値)を指定します。
列名に使う単語は、質問文で使う単語と異なる可能性があるため、よく使われそうな単語を Annotation で指定してみます。

SQL> 
SQL> ALTER TABLE HIGHSCHOOLS
  MODIFY (BOROUGH
    ANNOTATIONS (
      DESCRIPTION '行政区',
      ALIASES '地区,地域,区,エリア'
    )
  );  2    3    4    5    6    7  

表が変更されました。

SQL> ALTER TABLE HIGHSCHOOLS
  MODIFY (SCHOOL_NAME
    ANNOTATIONS (
      DESCRIPTION '高校名',
      ALIASES '高校,高等学校,学校名,スクール'
    )
  );  2    3    4    5    6    7  

表が変更されました。

SQL> ALTER TABLE HIGHSCHOOLS
  MODIFY (NEIGHBORHOOD
    ANNOTATIONS (
      DESCRIPTION '学校所在地の地域名',
      ALIASES '地域,近隣地域,学区,エリア'
    )
  );
  2    3    4    5    6    7  
表が変更されました。

SQL> 
SQL> ALTER TABLE HIGHSCHOOLS
  MODIFY (INTEREST
    ANNOTATIONS (
      DESCRIPTION '学校の特色や興味分野',
      ALIASES '特色,専門分野,重点分野,興味分野'
    )
  );  2    3    4    5    6    7  

表が変更されました。

SQL> 
SQL> select object_name, object_type, column_name, annotation_name, annotation_value from user_annotations_usage where object_name like 'HIGHSCHOOLS' ;

OBJECT_NAME	     OBJECT_TY COLUMN_NAME	    ANNOTATION_NAME		   ANNOTATION_VALUE
-------------------- --------- -------------------- ------------------------------ ------------------------------
HIGHSCHOOLS	     TABLE     BOROUGH		    DATA_TOOLS_INGEST_fieldName    BOROUGH
HIGHSCHOOLS	     TABLE     SCHOOL_NAME	    DATA_TOOLS_INGEST_fieldName    SCHOOL_NAME
HIGHSCHOOLS	     TABLE     NEIGHBORHOOD	    DATA_TOOLS_INGEST_fieldName    NEIGHBORHOOD
HIGHSCHOOLS	     TABLE     INTEREST 	    DATA_TOOLS_INGEST_fieldName    INTEREST
HIGHSCHOOLS	     TABLE     METHOD		    DATA_TOOLS_INGEST_fieldName    METHOD
HIGHSCHOOLS	     TABLE     TOTAL_STUDENTS	    DATA_TOOLS_INGEST_fieldName    TOTAL_STUDENTS
HIGHSCHOOLS	     TABLE     GRADUATION_RATE	    DATA_TOOLS_INGEST_fieldName    GRADUATION_RATE
HIGHSCHOOLS	     TABLE     ATTENDANCE_RATE	    DATA_TOOLS_INGEST_fieldName    ATTENDANCE_RATE
HIGHSCHOOLS	     TABLE     COLLEGE_CAREER_RATE  DATA_TOOLS_INGEST_fieldName    COLLEGE_CAREER_RATE
HIGHSCHOOLS	     TABLE     SAFE		    DATA_TOOLS_INGEST_fieldName    SAFE
HIGHSCHOOLS	     TABLE     SEATS		    DATA_TOOLS_INGEST_fieldName    SEATS

OBJECT_NAME	     OBJECT_TY COLUMN_NAME	    ANNOTATION_NAME		   ANNOTATION_VALUE
-------------------- --------- -------------------- ------------------------------ ------------------------------
HIGHSCHOOLS	     TABLE     APPLICANTS	    DATA_TOOLS_INGEST_fieldName    APPLICANTS
HIGHSCHOOLS	     TABLE     DBN		    DATA_TOOLS_INGEST_fieldName    DBN
HIGHSCHOOLS	     TABLE     LATITUDE 	    DATA_TOOLS_INGEST_fieldName    LATITUDE
HIGHSCHOOLS	     TABLE     LONGITUDE	    DATA_TOOLS_INGEST_fieldName    LONGITUDE
HIGHSCHOOLS	     TABLE     LANGUAGE_CLASSES     DATA_TOOLS_INGEST_fieldName    LANGUAGE_CLASSES
HIGHSCHOOLS	     TABLE     ADVANCED_PLACEMENT_C DATA_TOOLS_INGEST_fieldName    ADVANCED_PLACEMENT_COURSES
			       OURSES

HIGHSCHOOLS	     TABLE     SCHOOL_SPORTS	    DATA_TOOLS_INGEST_fieldName    SCHOOL_SPORTS
HIGHSCHOOLS	     TABLE     FAQ_URL		    DATA_TOOLS_INGEST_fieldName    FAQ_URL
HIGHSCHOOLS	     TABLE     OVERVIEW_PARAGRAPH   DATA_TOOLS_INGEST_fieldName    OVERVIEW_PARAGRAPH

OBJECT_NAME	     OBJECT_TY COLUMN_NAME	    ANNOTATION_NAME		   ANNOTATION_VALUE
-------------------- --------- -------------------- ------------------------------ ------------------------------
HIGHSCHOOLS	     TABLE     ACADEMIC_OPPORTUNITI DATA_TOOLS_INGEST_fieldName    ACADEMIC_OPPORTUNITIES
			       ES

HIGHSCHOOLS	     TABLE     ADVANCEDPLACEMENT_CO DATA_TOOLS_INGEST_fieldName    ADVANCEDPLACEMENT_COURSES
			       URSES

HIGHSCHOOLS	     TABLE     DIADETAILS	    DATA_TOOLS_INGEST_fieldName    DIADETAILS
HIGHSCHOOLS	     TABLE     EXTRACURRICULAR_ACTI DATA_TOOLS_INGEST_fieldName    EXTRACURRICULAR_ACTIVITIES
			       VITIES

HIGHSCHOOLS	     TABLE     PSAL_SPORTS_BOYS     DATA_TOOLS_INGEST_fieldName    PSAL_SPORTS_BOYS

OBJECT_NAME	     OBJECT_TY COLUMN_NAME	    ANNOTATION_NAME		   ANNOTATION_VALUE
-------------------- --------- -------------------- ------------------------------ ------------------------------
HIGHSCHOOLS	     TABLE     PSAL_SPORTS_GIRLS    DATA_TOOLS_INGEST_fieldName    PSAL_SPORTS_GIRLS
HIGHSCHOOLS	     TABLE     ADDTL_INFO1	    DATA_TOOLS_INGEST_fieldName    ADDTL_INFO1
HIGHSCHOOLS          TABLE     SCHOOL_SPORTS        LANGUAGE                       日本語
HIGHSCHOOLS          TABLE     SCHOOL_SPORTS        ALIASES                        部活,スポーツ,運動, 部
HIGHSCHOOLS          TABLE     BOROUGH              DESCRIPTION                    行政区
HIGHSCHOOLS          TABLE     BOROUGH              ALIASES                        地区,地域,区,エリア
HIGHSCHOOLS          TABLE     SCHOOL_NAME          DESCRIPTION                    高校名
HIGHSCHOOLS          TABLE     SCHOOL_NAME          ALIASES                        高校,高等学校,学校名,スクール
HIGHSCHOOLS          TABLE     NEIGHBORHOOD         DESCRIPTION                    学校所在地の地域名
HIGHSCHOOLS          TABLE     NEIGHBORHOOD         ALIASES                        地域,近隣地域,学区,エリア
HIGHSCHOOLS          TABLE     INTEREST             DESCRIPTION                    学校の特色や興味分野

OBJECT_NAME	     OBJECT_TY COLUMN_NAME	    ANNOTATION_NAME		   ANNOTATION_VALUE
-------------------- --------- -------------------- ------------------------------ ------------------------------
HIGHSCHOOLS          TABLE     INTEREST             ALIASES                        特色,専門分野,重点分野,興味分
                                                                                   野


37行が選択されました。

SQL> 

Anotation_name に DATA_TOOLS_INGEST_fieldName という名前と annotation_value に列名が入っていますが、これは、DB 側が勝手に作って設定している annotation になります。
Annotation を設定するとその情報が、添付されて LLM に渡されます。
Annotation のルールをユーザ側で定義して、統一することで管理が楽になります。

なお、Comment と Annotation は、同時利用が、可能です。

以上、Select AI の精度を上げる説明でした。

余談

既存の DB を Select AI で使えるようにするために、comment や annotation をつけるのは、かなり大変な作業だと思います。 また、昔に作られてドキュメントなどが不足している DB であれば尚更です。
今後、DB を作る際には、LLM が理解しやすいように、適切なテーブル名や列名をつけることが重要だと感じました.
一方で、LLM が賢くなって RDB の全てのテーブルを参照して、各テーブルや列の意味を理解してくれるようになる日は、すぐにくるような気もします。

参考記事・ドキュメント

以上

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?