「Azure OpenAI Studioを使用したNL2SQLシステムのセットアップ方法」
「美容とファッションの専門家が語る、鮮やかで生き生きとした美容とファッションに関する記事」
Azure OpenAI Studioを使用して推論エンドポイントを設定し、SQLコマンドを生成するために呼び出す方法を見ていきましょう。
この記事は、GitHubで利用可能な無料のLarge Language Modelsのコースの一部です。
前の記事では、ユーザーのリクエストから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.』という論文に基づいています。
この記事は、大規模言語モデルの実践的な応用について探求するシリーズの一部です。他の記事は以下のリストから見つけることができます:
大規模言語モデル実践的なコース
リストを表示12 ストーリーズ
Deep LearningとAIについて定期的に書いています。新しい記事のアップデートを受けるために、VoAGIで私をフォローすることを検討してください。そしてもちろん、LinkedInやTwitterで私とつながることも歓迎します。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles