LangChainからSQLiteデータベースを操作してみた(create_sql_agent)

ゴール

LangChainとAzureChatOpenAIを使用して、PythonでSQLiteデータベースとのインタラクションを実現するエージェントを実装する方法を説明します。

スタートライン

  • 基本的なPythonの知識があること
  • Azureのサブスクリプションを持っていること
  • LangChainとOpenAIのライブラリがインストールされていること

環境

  • Windows 11
  • Python 3.11.5
  • OpenAI
  • LangChain
  • AzureChatOpenAI

ステップ1:環境設定と依存関係のインポート

環境変数

.env

ライブラリのインストール

データベースの準備

https://www.sqlitetutorial.net/sqlite-sample-database/ の「Download SQLite sample database」選択し、サンプルのデータベース「chinook.db」をダウンロードします。使用ディレクトリ内に「notebooks」フォルダを作成し、ダウンロードした「chinook.db」を配置します。

必要なライブラリのインポート

必要なライブラリをインポートし、環境変数を読み込みます。

test.py

このコードは、LangChainのSQLエージェントとAzureChatOpenAIを使用するためのライブラリをインポートします。また、.envファイルから環境変数を読み込むためのload_dotenv関数も含まれています。

ステップ2:データベースとモデルの設定

次に、SQLデータベースとLangChainで使用するチャットモデルを設定します。
YOUR PATH部分はchinook.dbを配置したご自身のパスに設定してください。
また、Azure OpenAIの設定もご自身の環境に合わせてください。

test.py

ここでは、SQLiteデータベースを指定してSQLDatabaseオブジェクトを作成し、AzureChatOpenAIを設定しています。toolkitはデータベースと言語モデルを組み合わせて機能します。

ステップ3:エージェントの実行

最後に、SQLエージェントを作成し、実行します。

test.py

このコードは、SQLデータベースと対話するエージェントを作成し、ユーザーの質問に応じて動作します。agent_executor.runメソッドに質問を渡すことで、エージェントが質問に答えます。

結果

質問:いくつのデータが存在しますか?

image.png

質問:albumsのデータの中で、Aから始まるデータを抽出してください。

image.png

質問:「invoices」テーブルから、国別の合計売上を計算してください。

image.png

質問:「invoices」テーブルから最新の10件のインボイスを日付順に取得してください。
image.png

フィニッシュ

お疲れ様でした!

参考文献

https://python.langchain.com/docs/use_cases/qa_structured/sql/

この記事を書いた人

azure-recipe-user