「Azure OpenAI Studioを使用したNL2SQLシステムのセットアップ方法」

「美容とファッションの専門家が語る、鮮やかで生き生きとした美容とファッションに関する記事」

Azure OpenAI Studioを使用して推論エンドポイントを設定し、SQLコマンドを生成するために呼び出す方法を見ていきましょう。

この記事は、GitHubで利用可能な無料のLarge Language Modelsのコースの一部です。

Created by Author with Dall-E2

前の記事では、ユーザーのリクエストからSQLコマンドを生成するためのプロンプトの設定方法を学びました。

では、Azure OpenAI Studioを使用して、SQLコマンドを生成するために呼び出すことができる推論エンドポイントを作成する方法を見ていきましょう。

これらの行を読んでいる場合、おそらく既に要件を満たしていると思いますが、念のために以下のものが必要であることを思い出させておきます:

  • Azureサブスクリプションが必要です。これは無料で、初めてサインアップする場合は初期の無料クレジットが付属しています。 Azureサブスクリプションを作成する
  • OpenAIリソースへのアクセスも必要です。現在、Microsoftは要件と待ち時間を短縮しています。申請フォームは実際よりも脅威に思えるかもしれません。私は登録ドメインのメールを使用してアクセスをリクエストし、コースの情報を希望すると述べました。ほぼすぐにアクセスが許可されました。 Azure OpenAI Studioへのアクセスをリクエストする

アクセスをリクエストする必要性はまもなくなくなる可能性が非常に高いです。ですので、許可を申請していなくても、試してみることをお勧めします。

Azure OpenAI Studioの設定

以下のリンクからAzureポータルに直接アクセスできます:https://portal.azure.com/#home

中に入ったら、サービスでAzure AIサービスを選択する必要があります。

Azure OpenAI Accountをクリックします。

この画面で、サブスクリプションを選択する必要があります。学生サブスクリプションをお持ちの場合、動作しない可能性があります。異なるサブスクリプションを作成してください。

リソースグループについては、新しいものを作成します。任意の名前を付けることができます。これは、すべてのリソースを1つのグループにまとめる論理的なグループ化です。このようにして、グループを削除すると、他のプロジェクトやグループに影響を与えずに作成したすべてのリソースを削除できます。このプロジェクトは一時的なものなので、最後に削除してコストを発生させないようにするのが良いプラクティスです。

地域については、自分の位置に最も近い場所を選択します。Azureは、OpenAIサービスが利用可能な地域のみを表示します。

名前には、プロジェクトに一意の名前を選びます

価格層については、Standard S0を選択します。おそらくこれが唯一の利用可能なオプションでしょう。

これで、[レビュー+作成]ボタンを押してデータを確認し、サービスを利用できます。

設定は数分かかる場合があります。完了したら、この画面と似た画面が表示されます:

リソースに移動 をクリックしてください。

今、 モデルデプロイメント セクションから新しい展開を作成できます。名前を付けて、モデルを選択してください:GPT-3.5-Turbo

数秒で、Azure OpenAI Studioで展開が準備完了になります。

展開名をクリックするだけで、作業を開始できます。

プレイグラウンド セクションで チャット を選択し、入力を開始できます。

このプロンプトは、『How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings.』という論文に従って作成されました。

create table employees(        ID_Usr INT primary key,        name VARCHAR);    /*3 example rows    select * from employees limit 3;    ID_Usr    name    1344      George StPierre    2122      Jon jones    1265      Anderson Silva    */    create table salary(        ID_Usr INT,        year DATE,        salary FLOAT,        foreign key (ID_Usr) references employees(ID_Usr));    /*3 example rows    select * from salary limit 3    ID_Usr    date          salary    1344      01/01/2023    61000    1344      01/01/2022    60000    1265      01/01/2023    55000    */    create table studies(        ID_study INT,        ID_Usr INT,        educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */        Institution VARCHAR,        Years DATE,        Speciality VARCHAR,        primary key (ID_study, ID_Usr),        foreign key(ID_Usr) references employees (ID_Usr));    /*3 example rows    select * from studies limit 3    ID_Study ID_Usr educational_level Institution    Years       Speciality    2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    2334     1344   5                 MIT            01/01/2023  Phd. Data Science.    2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    */-表のSQLがシンプルかつ効率的に維持されるようにし、有効なSQL Liteを使用して、以下の質問に回答します。

質問:給与が50000を超える従業員は何人いますか?

SELECT COUNT(*) AS total_employees
FROM employees e
INNER JOIN salary s ON e.ID_Usr = s.ID_Usr
WHERE s.salary > 50000;

質問:過去3年間で最も給与が上昇した3人の名前を返す。

SELECT e.name
FROM employees e
JOIN salary s ON e.ID_usr = s.ID_usr
WHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)
GROUP BY e.name
ORDER BY (MAX(s.salary) - MIN(s.salary)) DESC
LIMIT 3;

質問:最高給与の従業員の名前。

The name of the best paid employee.

これが完全なプロンプトです。各セクションを対応するボックスに配置するために、それぞれを分割する必要があります。

システムメッセージのボックスには、例外を除いたプロンプト全体を入力します:

create table employees(        ID_Usr INT primary key,        name VARCHAR);    /*3 example rows    select * from employees limit 3;    ID_Usr    name    1344      George StPierre    2122      Jon jones    1265      Anderson Silva    */    create table salary(        ID_Usr INT,        year DATE,        salary FLOAT,        foreign key (ID_Usr) references employees(ID_Usr));    /*3 example rows    select * from salary limit 3    ID_Usr    date          salary    1344      01/01/2023    61000    1344      01/01/2022    60000    1265      01/01/2023    55000    */    create table studies(        ID_study INT,        ID_Usr INT,        educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */        Institution VARCHAR,        Years DATE,        Speciality VARCHAR,        primary key (ID_study, ID_Usr),        foreign key(ID_Usr) references employees (ID_Usr));    /*3 example rows    select * from studies limit 3    ID_Study ID_Usr educational_level Institution    Years       Speciality    2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    2334     1344   5                 MIT            01/01/2023  Phd. Data Science.    2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    */-表のSQLがシンプルかつ効率的に維持されるようにし、有効なSQL Liteを使用して、以下の質問に回答します。

このセクションでは、データベースの構造、その内容の一部の例、およびモデルがSQLクエリを生成するための指示を提供しました。

では、プロンプトからExamplesセクションを例で埋めましょう。元のプロンプトでは、以下の2つの例があります:

質問:給料が50000よりも高い従業員は何人いますか?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;  質問:過去3年間に最も給与が上昇した3人の名前を返す。SELECT e.nameFROM employees eJOIN salary s ON e.ID_usr = s.ID_usrWHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDER BY (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;質問:最高給与の従業員の名前。

ご覧の通り、各クエリに対して1つの例を作成しました。この技術はfew-shot samplingとして知られ、モデルがユーザーのクエリにどのように応答すべきかを理解するのに役立ちます。

最適な例の数は通常1から6までの範囲です。もっと多くの例を追加しても、モデルの応答に重要な影響を与えることはありません。

また、ハイパーパラメータ設定も変更できます。

コード生成には、Temperatureを0に設定することをおすすめします。モデルが過剰に想像力を持って応答する必要はありません。

では、遊び始めてプロンプトをテストしましょう。

ここから、応答が気に入った場合、2つのことができます:

  • 設定をエクスポートします。Playgroundを再設定するために使用できるファイルが保存されます。
  • See Codeをクリックして、モデルを呼び出すための例のコードが提供されます。

ノートブックからAzure OpenAIサービスを呼び出す。

このノートブックは、Github上のLarge Language Models Courseリポジトリで利用できます。

Large-Language-Model-Notebooks-Course/P1-NL2SQL/NL2SQL_OpenAI_Azure.ipynb at main ·…

大規模言語モデルについての実践的なコース。…peremartra/Large-Language-Model-Notebooks-Courseに貢献する

github.com

まず、OpenAIライブラリをインストールし、インポートします。

#openaiをインストールする !pip install -q "openai<1.0.0"import osimport openai

次に、Azureへのアクセスを設定する必要があります。

#Azureの設定openai.api_type = "azure"#Azureから取得できる推論ポイントopenai.api_base = "https://openaicourseperemartra.openai.azure.com/"openai.api_version = "2023-07-01-preview"openai.api_key = "your-azure-openai-key"

プロンプトを通知します。

context = [ {'role':'system', 'content':"""create table employees(    ID_Usr INT primary key,    name VARCHAR);/* 3 example rowsselect * from employees limit 3;ID_Usr    name1344      George StPierre2122      Jon jones1265      Anderson Silva*/create table salary(    ID_Usr INT,    year DATE,    salary FLOAT,    foreign key (ID_Usr) references employees(ID_Usr));/* 3 example rowsselect * from salary limit 3ID_Usr    date          salary1344      01/01/2023    610001344      01/01/2022    600001265      01/01/2023    55000*/create table studies(    ID_study INT,    ID_Usr INT,    educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */    Institution VARCHAR,    Years DATE,    Speciality VARCHAR,    primary key (ID_study, ID_Usr),    foreign key(ID_Usr) references employees (ID_Usr));/* 3 example rowsselect * from studies limit 3ID_Study ID_Usr educational_level Institution    Years       Speciality2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing2334     1344   5                 MIT            01/01/2023  Phd. Data Science.2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing*/-提供されたテーブルに対して、有効なSQL Liteを使用して、以下の質問に答えてください。質問:給料が50000よりも高い従業員は何人いますか?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;質問:過去3年間に最も給与が上昇した3人の名前を返す。SELECT e.nameFROM employees eJOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDER BY (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;"""} ]

OpenAI API の呼び出しをカプセル化するための関数を作成します。

# モデルを呼び出す関数を定義し、CCRMSQL を返すdef return_CCRMSQL(user_message, context):    newcontext = context.copy()    newcontext.append({'role':'user', 'content':"question: " + user_message})    response = openai.ChatCompletion.create(      engine="GPT3NL2SQLSample1Deployment", #private deploymentの指定      messages = newcontext,      temperature=0,      max_tokens=800)    return (response.choices[0].message["content"])

これで必要なテストを実施し、データベースのクエリに使用するSQLコードを取得できます:

context_user = context.copy()print(return_CCRMSQL("The name of the employee best paid", context_user))

SELECT e.name FROM employees e JOIN salary s ON e.ID_usr = s.ID_usr WHERE s.salary = (SELECT MAX(salary) FROM salary); このクエリは最高給与をもつ従業員の名前を返します。

print(return_CCRMSQL("Return the Institution with a higher average salary", context_user))

SELECT st.Institution, AVG(sa.salary) AS avg_salary FROM studies st JOIN employees e ON st.ID_Usr = e.ID_Usr JOIN salary sa ON e.ID_Usr = sa.ID_Usr GROUP BY st.Institution ORDER BY avg_salary DESC LIMIT 1;

結論

どのプロンプトを使用するかを決定した後は、Azure OpenAIサービスを構成し、OpenAI APIよりもAzureでホストされているOpenAIモデルを利用することは簡単なタスクです。

どちらを使用するかは会社の決定に依存します。Azure Open Servicesを介して使用されるOpenAIモデルはOpenAI内に存在しません。 言い換えれば、提供したデータはAzureのサブスクリプションから離れることはなく、将来のOpenAIモデルのトレーニングに使用されることはありません。

技術的な側面では、違いはほとんどなく、複雑さはほとんどありません。

参考資料

Large Language ModelsについてのフルコースはGithubで利用できます。新しい記事については、リポジトリをフォローまたはスターをつけることをご検討ください。これにより、新しいコンテンツが追加された際に通知を受け取ることができます。

GitHub – peremartra/Large-Language-Model-Notebooks-Course: 大規模言語モデルに関する実践的なコース

大規模言語モデルに関する実践的なコース。 peremartra/Large-Language-Model-Notebooks-Courseへの貢献…

github.com

解決策で使用されるプロンプトは、『How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings.』という論文に基づいています。

この記事は、大規模言語モデルの実践的な応用について探求するシリーズの一部です。他の記事は以下のリストから見つけることができます:

Pere Martra

Pere Martra

大規模言語モデル実践的なコース

リストを表示12 ストーリーズ

Deep LearningとAIについて定期的に書いています。新しい記事のアップデートを受けるために、VoAGIで私をフォローすることを検討してください。そしてもちろん、LinkedInTwitterで私とつながることも歓迎します。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

7つの最高の履歴書ビルダーAIツール

これらのAI履歴書ビルダーツールは、人々の90%以上よりも優れた文章を書き、100%の人々よりも速く作成します

AIニュース

コールセンターにおけるAIソフトウェアが顧客サービスを革命化します

人工知能(AI)技術の急速な進歩により、チャットボットの導入を特に受けた顧客サービスとサポートに変革的なシフトがもたら...

機械学習

「オーディオソース分離のマスターキー:AudioSepを紹介して、あなたが説明するものを分離します」

Computational Auditory Scene Analysis(CASA)は、複雑な聴覚環境で個別の音源を分離し理解することに焦点を当てた音声信号...

機械学習

クラウドストライクは、Fal.Con 2023におけるAI駆動のセキュリティに関するビジョンを概説します

「クラウドネイティブアーキテクチャを使用し、AIと統合データを活用して、ますます速い攻撃に対する検出と対応を加速する」

機械学習

「AIブーム:小規模ビジネスのための生成AI実践ガイド」

近年、世界は人工知能(AI)の分野で驚くべき急速な発展を目撃していますこれは単なるテクノロジートレンドではなく、技術革...

機械学習

「深層学習を用いた深層オブジェクト:ZoeDepthはマルチドメインの深度推定のためのAIモデルです」

画像に子供が大人よりも高くて大きく見える錯覚に出くわしたことはありますか?エームスの部屋の錯視は、台形の形状をした部...