SelectAIのプロファイルについて
OCIのAutonomous AI DatabaseでSelectAIの機能を使う場合、LLMに渡す情報としてDBMS_CLOUD_AI.CREATE_PROFILEプロシージャを実行します。
https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/dbms-cloud-ai-package.html#GUID-D51B04DE-233B-48A2-BBFA-3AAB18D8C35C
DBMS_CLOUD_AI.CREATE_PROFILE
profile_name IN VARCHAR2,
attributes IN CLOB DEFAULT NULL,
status IN VARCHAR2 DEFAULT NULL,
description IN CLOB DEFAULT NULL
);
この時attributesの中にobject_listという項目があり、ここでownerやname等を指定します。
[
{"owner": "sample", "name": "sales"}
]
ここのプロファイルを実行する時にこのobject_listを動的に作成したいというお話をいただきました。
1.動的に作りたい動機
ここについては、テーブルを関連テーブルのように管理していて、その情報を取ってくれば色々設定もやりやすいよねと言うところから、これを使ってPROFILEの作成を実現できるかどうかと言うところに繋がってきました。
関連テーブルについては以下のような形で持ってました。
〇table_master
| TABLE_ID | OWNER | TABLE_NAME |
|---|---|---|
| 111111 | sample | employee |
| 222222 | sample | employee_data |
| 911111 | sample | sales |
| 922222 | sample | entry_log |
〇relation
| PARENT_TABLE | PARENT_ID | CHILD_TABLE | CHILD_ID |
|---|---|---|---|
| 111111 | 1 | 222222 | 1 |
| 111111 | 1 | 922222 | 1 |
| 222222 | 1 | 911111 | 02M260 |
これらを利用してPROFILEを作成したいという形です。
2.PROFILEの設定
実際にこれで行けるだろうという形のプロファイルを記載します。
DECLARE
v_object_list CLOB;
v_profile_attr CLOB;
v_parent_id NUMBER := 1;
BEGIN
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'owner' VALUE tm.owner,
'name' VALUE tm.table_name
)
)
INTO v_object_list
FROM (
SELECT DISTINCT parent_table AS table_id
FROM relation
WHERE parent_id = v_parent_id
UNION
SELECT DISTINCT child_table
FROM relation
WHERE parent_id = v_parent_id
) r
JOIN table_master tm
ON tm.table_id = r.table_id;
v_object_list := COALESCE(v_object_list, '[]');
-- ★ JSONとして正しく組み立てる
v_profile_attr :=
'{'
|| ' "provider": "openai",'
|| ' "credential_name": "OPENAI_CRED",'
|| ' "comments": "true",'
|| ' "model": "gpt-4o",'
|| ' "object_list": ' || v_object_list
|| '}';
DBMS_CLOUD_AI.CREATE_PROFILE(
'REL_PROFILE_1',
v_profile_attr
);
END;
DECLAREのv_parent_idでrelationテーブルのPARENT_IDを引っ張ってきてテーブルを持ってきて、さらにparent_idに関連するCHILD_TABLEも持ってきているという感じで、
取ってきたリストをv_object_listに渡してそれを配列に記載という形で最後のv_profile_attrに渡しています。
ここら辺は色々設定が可能になるかと思います。
所感
この形で持ってくるとtable_masterのownerも設定されるので、schemaも制御できそうな感じなので、マルチテナントでという環境に利用できるのでは?と少し思った次第です。