ゴール
LangChainとAzureChatOpenAIを使用して、PythonでSQLiteデータベースとのインタラクションを実現するエージェントを実装する方法を説明します。
スタートライン
- 基本的なPythonの知識があること
- Azureのサブスクリプションを持っていること
- LangChainとOpenAIのライブラリがインストールされていること
環境
- Windows 11
- Python 3.11.5
- OpenAI
- LangChain
- AzureChatOpenAI
ステップ1:環境設定と依存関係のインポート
環境変数
1 2 3 |
OPENAI_API_KEY = "[Azure OpenAIのAPIキー]" OPENAI_API_BASE = "[Azure OpenAIのエンドポイント]" |
ライブラリのインストール
1 2 3 |
pip install langchain pip install openai |
データベースの準備
https://www.sqlitetutorial.net/sqlite-sample-database/ の「Download SQLite sample database」選択し、サンプルのデータベース「chinook.db」をダウンロードします。使用ディレクトリ内に「notebooks」フォルダを作成し、ダウンロードした「chinook.db」を配置します。
必要なライブラリのインポート
必要なライブラリをインポートし、環境変数を読み込みます。
1 2 3 4 5 6 7 8 9 |
<span class="kn">from</span> <span class="n">dotenv</span> <span class="kn">import</span> <span class="n">load_dotenv</span> <span class="nf">load_dotenv</span><span class="p">()</span> <span class="kn">from</span> <span class="n">langchain.agents</span> <span class="kn">import</span> <span class="n">create_sql_agent</span> <span class="kn">from</span> <span class="n">langchain.agents.agent_toolkits</span> <span class="kn">import</span> <span class="n">SQLDatabaseToolkit</span> <span class="kn">from</span> <span class="n">langchain.agents.agent_types</span> <span class="kn">import</span> <span class="n">AgentType</span> <span class="kn">from</span> <span class="n">langchain.chat_models</span> <span class="kn">import</span> <span class="n">AzureChatOpenAI</span> <span class="kn">from</span> <span class="n">langchain.sql_database</span> <span class="kn">import</span> <span class="n">SQLDatabase</span> |
このコードは、LangChainのSQLエージェントとAzureChatOpenAIを使用するためのライブラリをインポートします。また、.env
ファイルから環境変数を読み込むためのload_dotenv関数も含まれています。
ステップ2:データベースとモデルの設定
次に、SQLデータベースとLangChainで使用するチャットモデルを設定します。
YOUR PATH
部分はchinook.dbを配置したご自身のパスに設定してください。
また、Azure OpenAIの設定もご自身の環境に合わせてください。
1 2 3 4 5 6 7 8 9 10 |
<span class="n">db</span> <span class="o">=</span> <span class="n">SQLDatabase</span><span class="p">.</span><span class="nf">from_uri</span><span class="p">(</span><span class="sh">"</span><span class="s">sqlite:///<YOUR PATH></span><span class="sh">"</span><span class="p">)</span> <span class="n">llm</span> <span class="o">=</span> <span class="nc">AzureChatOpenAI</span><span class="p">(</span> <span class="n">temperature</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">azure_deployment</span><span class="o">=</span><span class="sh">"</span><span class="s">gpt-35-turbo-16k</span><span class="sh">"</span><span class="p">,</span> <span class="n">openai_api_version</span><span class="o">=</span><span class="sh">"</span><span class="s">2023-07-01-preview</span><span class="sh">"</span><span class="p">,</span> <span class="p">)</span> <span class="n">toolkit</span> <span class="o">=</span> <span class="nc">SQLDatabaseToolkit</span><span class="p">(</span><span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">llm</span><span class="o">=</span><span class="n">llm</span><span class="p">)</span> |
ここでは、SQLiteデータベースを指定してSQLDatabaseオブジェクトを作成し、AzureChatOpenAIを設定しています。toolkitはデータベースと言語モデルを組み合わせて機能します。
ステップ3:エージェントの実行
最後に、SQLエージェントを作成し、実行します。
1 2 3 4 5 6 7 8 9 |
<span class="n">agent_executor</span> <span class="o">=</span> <span class="nf">create_sql_agent</span><span class="p">(</span> <span class="n">llm</span><span class="o">=</span><span class="n">llm</span><span class="p">,</span> <span class="n">toolkit</span><span class="o">=</span><span class="n">toolkit</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">agent_type</span><span class="o">=</span><span class="n">AgentType</span><span class="p">.</span><span class="n">OPENAI_FUNCTIONS</span><span class="p">,</span> <span class="p">)</span> <span class="n">agent_executor</span><span class="p">.</span><span class="nf">run</span><span class="p">(</span><span class="sh">"</span><span class="s">質問内容</span><span class="sh">"</span><span class="p">)</span> |
このコードは、SQLデータベースと対話するエージェントを作成し、ユーザーの質問に応じて動作します。agent_executor.runメソッドに質問を渡すことで、エージェントが質問に答えます。
結果
質問:いくつのデータが存在しますか?
質問:albumsのデータの中で、Aから始まるデータを抽出してください。
質問:「invoices」テーブルから、国別の合計売上を計算してください。
質問:「invoices」テーブルから最新の10件のインボイスを日付順に取得してください。
フィニッシュ
お疲れ様でした!
参考文献
https://python.langchain.com/docs/use_cases/qa_structured/sql/