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 だけでLINEを使ったFAQチャットボットを作る方法

Last updated at Posted at 2025-12-03

本記事はOracle Cloud Infrastructure Advent Calendar 2025 シリーズ1 の4日目の記事です。
3日目はnaokatoさんの 【オンプレDBAのためのクラウド転生ガイド_外伝】転生DBAはAI時代も余裕!オンプレDBAが切り開く未来 でした。

概要

Oracle Autonomous AI Databaseでは、そのインフラ単体でChatGPTなどにSQLで問い合わせをしたり、RAGを実装することが可能ですが、利用するためにDBへログインしてSQLを発行するのは使い勝手が悪いですよね。
LINEやTeamsなどのアプリからRAGの問い合わせができたら便利ですが、実装するにはDBに接続してSQLを発行するアプリを作ってLambdaなどでプログラムを実装して...と、利用するにはいろんなインフラを活用して面倒くさいことをしないといけないと思います。

Oracle Autonomous AI DatabaseのRESTの機能を活用すれば、Lambdaなどでプログラムを作ることなくSQL(PL/SQL)だけでチャットボットを構築することができます。
PythonやNode.jsができなくてもSQL(PL/SQL)だけでLINEのチャットボットを構築することができるので、アプリケーションに苦手意識を持っている人でも作りやすいかもしれません。

本記事では以前記載したSQLだけでChatGPTでRAGする方法(Autonomous Database 23ai)のRAGシステムを、LINEをインターフェースとして利用する方法について記載します。

システム構成とメッセージの流れ

登場するインフラはOracle Autonomous AI Databaseだけです。
Oracle Autonomous AI Databaseに格納されている情報を使って、質問の回答をするRAGシステムをLINEのインターフェースで実装します。

qiita1.png

LINEのチャットボットに対して投稿したメッセージをOracle Autonomous AI Databaseに送信し、POSTされたデータを受けてDBから意味的に近いナレッジをベクトル検索しナレッジを抽出。そのナレッジを引用してChatGPTで回答を生成し、LINEにReplyする流れです。
LINEのMessaging APIを利用していますが、SDKを使わずにPL/SQLとOracle REST Data Servicesで実装してます。

全体の流れ

以下の流れとなります。

1. OpenAIを活用したRAGの実装(以前の記事)
2. LINEへのアクセスコントロールリストの追加
3. LINE Developerを活用したチャットボットの作成
4. チャットの履歴情報やAPIアクセスのための情報格納
5. LINEとやり取りするためのパッケージのインストール
6. RESTAPIの登録
7. LINE Developer側のWebhook URLの登録
8. LINEからの問い合わせ検証

1から8まで実施する場合、おおよそ2時間くらいかかると思います。

1. OpenAIを活用したRAGの実装(以前の記事)

以下の記事を参考にしてOracle Autonomous AI Databaseを構築し、SQLでRAGを実装します。

DBのバージョンは26aiを活用してください。(19cではベクトル検索が利用できません)
今回はRAGで回答を生成するチャットボットを作るので、以下のSQLでRAGができることを前提に記事を書いています。

select askllm.rag('来週国内旅行を計画しています。どこかお勧めはありますか?','openai') rag from dual;

RAG
-------------------------------------------------------------------------------------------------------------------------------------------
来週の国内旅行には、北海道、沖縄、東京がおすすめです。2018年の調査によると、旅行者が特に満足した旅先として、北海道が1位、沖縄が2位、東京が3位にランクイン
しています。北海道では美しい自然や美味しい食べ物を楽しめますし、沖縄ではリゾート気分を満喫できます。東京では多様な文化や観光スポットが楽しめるので、どの場
所も素晴らしい選択肢です。あなたの好みに合わせて選んでみてください!

RAGまでやらず、オウム返しができれば十分な方は、上の記事の「2. Autonomous Database と、ChatGPTに問い合わせをするDBユーザーを作る」と「3. 作成したDBユーザーのアクセスコントロールリストにChatGPTのエンドポイントを追加する」を実施してください。(オウム返しだけならDBバージョンが19cでも大丈夫です)

2. LINEへのアクセスコントロールリストの追加

Oracle Autonomous AI Databaseはアクセスコントロールリストに記載したURL以外には外部アクセスできません。
LINEとAPIでやり取りするためには、RAGを実装しているADBUSERのアクセスコントロールリストにLINEのURLを追加します。
この作業は管理者権限のあるAdminユーザーで実行します。

2025-12-02_23h59_29.png

OCIにログイン後、Autonomous AI DatabaseのデータベースアクションからSQLを選択すると、AdminユーザーでSQLが実行できる画面に遷移します。
その画面で以下のSQLを実行してください。

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'api.line.me',  -- LINEのエンドポイント
        lower_port => 443,  -- HTTPSのポート
        upper_port => 443,
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'ADBUSER', -- LINEにアクセスするユーザ名を指定
                           principal_type => xs_acl.ptype_db)
    );
END;

SQLの実行は緑の再生ボタンを押せば実行できます。
画面のように「PL/SQLプロシージャが正常に完了しました。」と表示されればOKです。
2025-12-03_00h02_28.png

3. LINE Developerを活用したチャットボットの作成

続いて、LINE Developerからチャットボットを作成します。
Messaging APIのチャットボットを作り、チャットボットを使うためのアクセストークンを発行するところまでを行います。
ちょっとステップが長いので、実際に構築を考えている方で1ステップずつのスクショを見たいという方は下の折り畳みを展開してご確認ください。

LINEのチャットボットを作成するための1ステップずつのスクショ

まずはLINE DevelopersのHPにアクセスします
2025-12-02_19h40_39.png

最初はプロバイダーを作るところからになります。
プロバイダーとはある意味作成者の団体を登録するという感じです。
2025-12-02_19h47_49.png

適当にプロバイダー名を入力します。ここではOCI RAG Teamと入れました。
2025-12-02_19h49_22.png

続いてMessaging APIでチャットボットを作ります。
2025-12-02_19h49_39.png

「LINE公式アカウントを作成する」を押します。
2025-12-02_19h51_15.png

SMS認証が必要になるようなので、SMS認証を行うを押します
2025-12-02_19h51_23.png

電話番号を入力してSMSを送信し、連携されたキーでログインしてください。
2025-12-02_19h51_36.png

ログインするとこんな感じの画面が出るので、※のついた必須項目を適当に入れます。
アカウント名はチャットボット名となるのでしっかり描きますが、そのほかは適当でOKです。
2025-12-02_19h54_46.png

入力したら完了を押してください。
2025-12-02_19h55_36.png

LINEアカウントが作成されました。
認証バッチはいったん後回しにするので、「あとで認証を行う」を押します。
2025-12-02_19h56_13.png

表示される文章を読んで同意を押します。
2025-12-02_19h56_42.png
2025-12-02_19h57_06.png

この作業でチャットボットが作成されました。
ただ、デフォルトではメッセージのやり取りができないので設定を変更します。
やることリストのところにある、チャットの応答方法を決めるところをクリックします。
2025-12-02_19h57_31.png

応答方法はデフォルトで無効なので、右側の「設定を変更」を押します。
2025-12-02_19h58_18.png

チャットが無効になっているので有効にします。
また、Webhookという部分も有効にしたいので、「Messaging APIの設定画面を開く」を押します。
2025-12-02_19h58_40.png

Messaging APIを利用するボタンがあるので押します
2025-12-02_19h59_15.png

プロバイダを指定する画面になるので、先ほど作成したプロバイダを指定し「同意する」をクリック
2025-12-02_19h59_30.png

プライバシーポリシーや利用規約は今回デモで作るだけなのでなにも記載せずにOKを押します
2025-12-02_19h59_39.png

これでよいか聞かれるのでOKを押します
2025-12-02_19h59_45.png

この手順でMessaging APIでチャットが有効になりました。
2025-12-02_20h00_06.png

引き続きアクセストークンの発行手順を行います。
先ほどの画面は閉じていただいて、以前開いていたLINE Developersのページで、作成されたチャットボットをクリックします。
2025-12-02_20h01_40.png

Messaging API設定をクリックします
2025-12-02_20h03_12.png

下にスクロールすると、チャネルアクセストークン(長期)というところがあると思います。
この発行のボタンを押してください。
2025-12-02_20h03_35.png

そうすると長いチャネルアクセストークンが表示されます。
このアクセストークンはLINEとAutonomous AI Databaseがメッセージ交換するうえで必要になるので、コピーして手元にメモをしておいてください。
2025-12-02_20h05_16.png

以上でチャットボットの作成自体は完了です。

これ以降のステップでは、ここで作成したチャットボットとOracle Autonomous AI Databaseとの連携を行えるようにしていきます。

4. チャットの履歴情報やAPIアクセスのための情報格納

LINEと連携するADBUSER側で、先ほど取得したアクセストークンの情報をDBに格納します。
そのため、ADBUSERでSQLを実行するため、ADMINユーザーからは一旦サインアウトします。
2025-12-03_00h38_04.png

ADBUSERでログインしなおして
2025-12-03_00h38_15.png

SQLを選択します。
2025-12-03_00h38_53.png

これでADBUSERからSQLが実行できる画面に遷移します。
このADBUSERにてapi_config表を作成し、その中のaccess_token列に先ほどLINEから抽出した長いアクセストークンを以下の「faX+SXcvEMtH<略>cDnyilFU=」の部分に置き換えて、SQLを実行してテーブルに格納します。
access_token列以外のservice_nameやapi_urlなどはそのままにしておいてください。
※ api_urlはLINEのAPIリファレンスの情報を参考にしています
このテーブルはLINEのチャットボットとアクセスするためのパッケージの中でアクセスされます。内容が正しくない場合はLINEにアクセスできなくなるのでご注意ください。

-- lineでやりとりするためのアクセストークンなどの情報をテーブルに格納します。
-- このままコピーせず、insert文のaccess_tokenには、LINEから取得したアクセストークンを入力してください。
create table api_config (service_name varchar2(100), model varchar2(100), api_url varchar2(500), access_token varchar2(500), handler varchar2(100));
insert into api_config(service_name, model, api_url, access_token, handler) values ('line','reply','https://api.line.me/v2/bot/message/reply','faX+SXcvEMtH<略>cDnyilFU=','adbuser');
insert into api_config(service_name, model, api_url, access_token, handler) values ('line','push','https://api.line.me/v2/bot/message/push','faX+SXcvEMtH<略>cDnyilFU=','adbuser');
commit;

また、同様にLINEでやり取りした履歴情報をDBに残しておくために、以下のチャット履歴を記録するline_chat_historyテーブルを作成しておきます。
このテーブルも後のステップで利用するので忘れず作成しておいてください。

CREATE TABLE line_chat_history (
    id             NUMBER,
    message_time   DATE,
    userid         VARCHAR2(100),
    groupid        VARCHAR2(100),
    type           VARCHAR2(100),
    mtype          VARCHAR2(100),
    text           VARCHAR2(4000),
    mention        VARCHAR2(100),
    mention_userid VARCHAR2(100),
    reply_token    VARCHAR2(100)
)
PARTITION BY RANGE (message_time)
INTERVAL (INTERVAL '1' MONTH)
(
    PARTITION p_start VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'))
);

以上でADBUSERでLINEを使うための事前準備の多くは完了しました。
あとはLINEとやり取りするためのPL/SQLをインストールします

5. LINEとやり取りするためのパッケージのインストール

ADBUSERにおいて、以下のPL/SQLを実行してlinebotパッケージをインストールします。
インストールすることでlinebot.reply_messageと、linebot.push_messageが利用できるようになります。

create or replace package linebot
as
  procedure reply_message(i_reply_token IN varchar2, i_text IN varchar2, i_handler IN varchar2, o_res OUT UTL_HTTP.RESP);
  procedure push_message(i_user_id IN varchar2, i_text IN varchar2, i_handler IN varchar2, o_res OUT UTL_HTTP.RESP);
end;
/

create or replace package body linebot
is 
    procedure reply_message(i_reply_token IN varchar2, i_text IN varchar2, i_handler IN varchar2, o_res OUT UTL_HTTP.RESP)
    is 
        v_json_request clob;
        v_api_url      varchar2(500);
        v_line_apikey  varchar2(500);
        v_req          UTL_HTTP.REQ;
    begin
        -- lineでreplyするためのJSON作成 参考:https://developers.line.biz/ja/reference/messaging-api/#send-reply-message
        v_json_request := '{
            "replyToken": ' || APEX_JSON.stringify(i_reply_token) || ',
            "messages": [
              {
                "type":"text",
                "text":' || APEX_JSON.stringify(i_text) || '
              }
            ]}';
        -- ヘッダーに必要なURLやAPIKEYの取得
        select api_url, access_token into v_api_url, v_line_apikey from api_config where service_name = 'line' and model = 'reply' and handler = i_handler fetch first 1 rows only;
        -- httpリクエスト作成
        v_req := UTL_HTTP.BEGIN_REQUEST(v_api_url, 'POST', 'HTTP/1.1');
        UTL_HTTP.SET_HEADER(v_req, 'Content-Type', 'application/json'); 
        UTL_HTTP.SET_HEADER(v_req, 'Authorization', 'Bearer ' || v_line_apikey);
        UTL_HTTP.SET_BODY_CHARSET(v_req, 'UTF-8');
        UTL_HTTP.SET_HEADER(v_req, 'Content-Length', DBMS_LOB.GETLENGTH(v_json_request));
        UTL_HTTP.WRITE_TEXT(v_req, v_json_request);
        o_res := UTL_HTTP.GET_RESPONSE(v_req);
    end reply_message;

    procedure push_message(i_user_id IN varchar2, i_text IN varchar2, i_handler IN varchar2, o_res OUT UTL_HTTP.RESP)
    is 
        v_json_request clob;
        v_api_url      varchar2(500);
        v_line_apikey  varchar2(500);
        v_req          UTL_HTTP.REQ;
    begin
        -- lineでreplyするためのJSON作成 参考:https://developers.line.biz/ja/reference/messaging-api/#send-push-message
        v_json_request := '{
            "to": ' || APEX_JSON.stringify(i_user_id) || ',
            "messages": [
              {
                "type":"text",
                "text":' || APEX_JSON.stringify(i_text) || '
              }
            ]}';
        -- ヘッダーに必要なURLやAPIKEYの取得
        select api_url, access_token into v_api_url, v_line_apikey from api_config where service_name = 'line' and model = 'push' and handler = i_handler fetch first 1 rows only;
        -- httpリクエスト作成
        v_req := UTL_HTTP.BEGIN_REQUEST(v_api_url, 'POST', 'HTTP/1.1');
        UTL_HTTP.SET_HEADER(v_req, 'Content-Type', 'application/json'); 
        UTL_HTTP.SET_HEADER(v_req, 'Authorization', 'Bearer ' || v_line_apikey);
        UTL_HTTP.SET_BODY_CHARSET(v_req, 'UTF-8');
        UTL_HTTP.SET_HEADER(v_req, 'Content-Length', DBMS_LOB.GETLENGTH(v_json_request));
        UTL_HTTP.WRITE_TEXT(v_req, v_json_request);
        o_res := UTL_HTTP.GET_RESPONSE(v_req);
    end push_message;
end;
/

このパッケージでは、これまでのステップで作成したapi_config表にアクセスします。
パッケージのインストールで失敗する場合はapi_config表が存在していることをご確認ください。

6. RESTAPIの登録

Oracle Autonomous AI DatabaseにはRESTの機能がすでに実装されています。
作成したAutonomous AI DatabaseのデータベースアクションからRESTを選択することで、RESTの設定行うことができます。

2025-12-02_22h05_14.png

RESTの画面に移りますが、デフォルトではADMINユーザーでログインされています。
画面右上のユーザー名を選択しサインアウトを行い、LINEとやり取りするファンクションなどをインストールしたADBUSERでログインしなおします。

ADBUSERでログインしなおす手順

ADMINユーザーからサインアウトをします
2025-12-02_22h08_17.png

ADBUSERでログインを行います
2025-12-02_22h08_30.png

改めてRESTを選択します
2025-12-02_22h08_43.png

ADBUSERでログインを行ったら、ここからRESTの設定をします。
画面右上のユーザー名がADBUSERであることを確認してからモジュールを作成します。

2025-12-02_22h09_06.png

右上のモジュールの作成ボタンを押します
2025-12-02_22h09_24.png

モジュール名やパスはわかりやすいものにしてください。
今回は検証用となので、権限によって保護のところは非保護で作成します。
2025-12-02_22h09_41.png

モジュールができたら続いてテンプレートを作成します。
2025-12-02_22h09_53.png

URIテンプレートに、これも適当な文字を入れます。
ここがRESTで扱うURLの一部となります。
2025-12-02_22h10_26.png

最後にハンドラを作成します。
2025-12-02_22h10_42.png

今回はLINEからJSONを受け取ったらPL/SQLを動作させ、ChatGPTを活用して返信メッセージを作って返信させたいので、メソッドはPOSTを選択します。
ソースにはLINEからJSONが連携されたら動作するコードを記載します。
2025-12-02_22h11_08.png

コードは以下となります。
LINEから連携されたJSONを解析し、line_chat_historyテーブルに情報を格納し、返信内容をChatGPTを活用して作ったのちに返信。line_chat_historyテーブルに変身したメッセージの情報を格納するといった流れです。

declare
  v_blob          blob := :body;
  v_clob          clob;
  v_handler       varchar2(100) := 'adbuser';
  v_id            number;
  v_message_time  date;
  v_userid        varchar2(100);
  v_groupid       varchar2(100);
  v_type          varchar2(100);
  v_mtype         varchar2(100);
  v_text          varchar2(2000);
  v_mention       varchar2(100);
  v_mentionuserid varchar2(100);
  v_replyToken    varchar2(1000);
  o_reply_message clob;
  v_rand_per      number; -- 0~100までのランダム 
  v_res           UTL_HTTP.RESP;
begin
  -- BLOB を CLOB に変換
  v_clob := to_clob(utl_raw.cast_to_varchar2(dbms_lob.substr(v_blob, 32767, 1)));
  -- JSONを解析
  apex_json.parse(v_clob);
  -- LINEから連携されたJSONの内容から必要なデータを抽出
  v_id := apex_json.get_number(p_path => 'events[1].message.id');
  v_message_time := to_date('1970-01-01','YYYY-MM-DD') + ( apex_json.get_number(p_path => 'events[1].timestamp') / 1000) / 86400 + 9/24;
  v_userid := apex_json.get_varchar2(p_path => 'events[1].source.userId');
  v_groupid := apex_json.get_varchar2(p_path => 'events[1].source.groupId');
  v_type := apex_json.get_varchar2(p_path => 'events[1].message.type');
  v_mtype := apex_json.get_varchar2(p_path => 'events[1].source.type');
  v_text := apex_json.get_varchar2(p_path => 'events[1].message.text');
  v_mention := apex_json.get_varchar2(p_path => 'events[1].message.mention.mentionees[1].isSelf');
  v_mentionuserid := apex_json.get_varchar2(p_path => 'events[1].message.mention.mentionees[1].userId');
  v_replyToken := apex_json.get_varchar2(p_path => 'events[1].replyToken');
  -- LINEから連携されたデータをline_chat_historyテーブルに挿入
  insert into line_chat_history (id, message_time, userid, groupid, type, mtype, text, mention, mention_userid, reply_token) values (v_id, v_message_time, v_userid, v_groupid, v_type, v_mtype, v_text, v_mention, v_mentionuserid, v_replyToken);

  -- LINEから連携された情報から、グループチャット&メンションもない場合は、80%の確立で反応せずスルーする。
  select dbms_random.value(0,100) into v_rand_per from dual;
  if v_mtype = 'group' and v_rand_per < 80 and (v_mention != 'true' or v_mention is null) then
    v_text := '';
  -- 友達追加時などの、メッセージが何もない時も反応せずスルーする。
  elsif  v_text is null then
    v_text := '';
  -- 上記以外のケースではメッセージに対して返信を返す
  else
    -- LINEのメッセージをKNOWLEDGEテーブルの参考情報を活用して返信をo_reply_messageに格納する
    select askllm.rag(v_text,'openai') into o_reply_message from dual;
    -- 返信データをline_chat_historyテーブルに挿入
    insert into line_chat_history (id, message_time, userid, groupid, type, mtype, text, reply_token) values (v_id, sysdate + 9/24, v_userid, v_groupid, v_type, 'chatbot', o_reply_message, v_replyToken);
    -- o_reply_messageをLINEのチャットボットから返信する
    linebot.reply_message(v_replyToken,o_reply_message,v_handler, v_res);
  end if;
end;

オウム返しがしたいという方は、47行目の

select askllm.rag(v_text,'openai') into o_reply_message from dual;

の部分を以下に変えればオウム返しになります。

o_reply_message := v_text;

作成ボタンを押すと以下の画面に遷移します。
2025-12-02_22h11_23.png
ここで表示されているURLにLINEからJSONが飛んでくれば、適切に処理をしてLINEにメッセージを送り返すことが可能です。
URLをコピーした状態で、LINE Developer側にこのURLを登録していきます。

7. LINE Developer側のWebhook URLの登録

先ほどまで開いていたLINE Developerの画面のMessaging API設定にあるWebhook URLの部分に、先ほどコピーしたURLを貼り付けて更新します。
※ その後検証ボタンが出現しますが、これは実装していないので検証を押してもエラーになります。

2025-12-02_22h12_33.png

続いて、Webhookの利用ボタンを押します。この手続きにより、LINE側でOracle Autonomous AI DatabaseにあるRESTのURLに対してJSONを連携するように設定することができます。

2025-12-02_22h13_17.png

今回のチャットボットはグループトークでも動作するようにしているので、必要な場合はグループトークの設定を開いて有効にしてください。

グループトークでも動作するようにする方法

このステップを行うことで、複数人のルームにチャットボットを追加できるようになります。
※ グループトークの場合、メンションをつけるか、20%の確率で反応するようにしています。
2025-12-02_22h13_36.png

2025-12-02_22h14_07.png

以上でチャットボットの作成は完了となります。
あとは実際にLINEから問い合わせをしてみましょう。

8. LINEからの問い合わせ検証

作成したLINEアカウントでは、今回作成したチャットボットがすでに存在していると思います。
友達登録をさせるのであれば、LINE DeveloperのこのQRコードを読み取れば友達登録できます。
2025-12-03_11h32_49.png

では実際に話しかけてみましょう。

手順通りに作成した場合、Knowledgeテーブルには以下の情報が格納されているため、旅行に行くならどこがお勧めなのかを質問した場合はID:4の内容を参考にして、北海道、沖縄、東京をリコメンドしてくれるはずです。

ID Question Answer
1 花粉飛散量の多い都道府県 1位が三重県で、ピーク時は1平方センチメートル当たり17,810個も飛んでいるというデータがあります。2位は福島県、3位は栃木県です。
2 晴れの日が多い都道府県 年間晴天日数が最も多い都道府県は高知県で1年平均245.1日です。2位が徳島県と愛媛県で、最下位が秋田県です。
3 アイスが好きな人が多い都道府県 アイスやシャーベットの消費量が最も多い都道府県は石川県で、次いで富山県、栃木県となります。もっとも消費量が少ないのが沖縄県です。
4 旅行者が満足した国内旅先の都道府県 2018年の調査によると、1位が北海道、2位が沖縄、3位が東京でした。

2025-12-02_22h30_49.png

ちゃんと北海道、沖縄、東京をレコメンドしてくれました!

なお、line_chat_historyテーブルに会話履歴が挿入されていることも確認できます。
2025-12-02_22h36_15.png
例えば生成AIに問い合わせをする際、過去こういう会話をしていましたという感じで履歴情報もプロンプトに加えれば、過去の問い合わせ内容を踏まえた回答もしてくれるように応用できそうです!

チャットボットをたくさん作ってみた所感

趣味でインテリジェンスなチャットボットをたくさん作っているのですが、Oracle Autonomous AI Databaseをチャットボットサーバとして活用するメリットは大きく、主に費用面でメリットが大きく感じました。(Always Freeなら無償)
DBとしてOracle Databaseを活用できることのメリットも強く、例えばJSONをそのままDBに格納して検索することもできますし、RDBMSの検索だけでなくベクトル検索や全文検索も活用できるので、様々な角度で検索させることができるのも大きなメリットだと思います。
検索したデータを活用して回答を生成AIで作れることをDBだけで実装できますし、今後AI AgentをDBで動作できるようになるので、これからできることがどんどん増えていきそうです。
管理面でも1つのDBに複数のボットサーバを立ち上げられるので、このボットはどのサーバを使っているのかの管理も簡単で、メリットが大きいと感じました。

これに対するデメリットとして、現状この構成では性能面で問題が発生しやすいと感じています。
PL/SQLは1行ずつ処理が実行されるので、LLMに並列で問い合わせを行うのであればやはりnode.jsなどで組んだアプリには性能面では勝てなそうです。
また、この構成でもコールドスタート問題が発生するようであり、久々に使うと返信が遅い傾向にあります。
さらにこの構成ではORDSを使っているため、同時接続数も制限がかかると思います。
あくまでプライベート用途か、ちょっと検証したいときにこの構成を使うのが良さそうです。

まとめ

Oracle Autonomous AI Databaseだけで、LINEのチャットボットを作ることができました。
Oracle Autonomous AI Database側にFAQのデータを格納しておくだけで、LINEからの問い合わせに対して意味的に近いデータをベクトル検索で取得し、その内容を参考にして生成AIで回答を生成させ、LINEで返信させることができました。

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?