LoginSignup
1
1

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

Last updated at Posted at 2023-12-16

ゴール

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

スタートライン

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

環境

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

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

環境変数

.env
OPENAI_API_KEY = "[Azure OpenAIのAPIキー]"
OPENAI_API_BASE = "[Azure OpenAIのエンドポイント]"

  

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

pip install langchain
pip install openai

  

データベースの準備

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

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

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

test.py
from dotenv import load_dotenv
load_dotenv()

from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.agents.agent_types import AgentType
from langchain.chat_models import AzureChatOpenAI
from langchain.sql_database import SQLDatabase

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

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

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

test.py
db = SQLDatabase.from_uri("sqlite:///<YOUR PATH>")

llm = AzureChatOpenAI(
    temperature=0,
    azure_deployment="gpt-35-turbo-16k",
    openai_api_version="2023-07-01-preview",
)

toolkit = SQLDatabaseToolkit(db=db, llm=llm)

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

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

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

test.py
agent_executor = create_sql_agent(
    llm=llm,
    toolkit=toolkit,
    verbose=True,
    agent_type=AgentType.OPENAI_FUNCTIONS,
)

agent_executor.run("質問内容")

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

結果

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

image.png

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

image.png

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

image.png

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

フィニッシュ

お疲れ様でした!

以下のXで情報発信も行っています!

参考文献

1
1
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
1
1