5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Langchainを使って、SQLでデータ分析してくれるAgent/Chatbotを作る

Last updated at Posted at 2023-11-06

ChatGPTにSQLの質問投げると、ほとんどの質問は回答してくれますが、ある程度のSQL知識がないとうまく活用できないです。しかし、langchainとLLM経由でやると、SQLクエリが書けなくもデータの抽出や分析が問題なくできます。

今日はlangchainを使用して、LLMでSQLデータ分析をやってくれる方法をご紹介します。

①データセット

まず使われていたデータは私が勝手に作ったもので、5行しかない”花”のテーブルです。
カラムとしては、名前、国、価格、数量、日付などが含まれています。(サンプルデータは以下のようになります)
1.png

②アプローチ(SQLDatabaseChain/Agent)

アプローチとしては二つがあります。一つはSQLDatabaseChainというSQLに特化したchainを使う手法で、もう一つはAgentを使用する方法です。

1.SQLDatabaseChain

コード自体は非常にシンプルで、langchainの"SQLDatabaseChain"でLLMとデータベースをつなぐだけです。

中身は以下の流れとなります。
1.自然言語(質問の内容)をlangchainによってLLMに投げて、LLMがSQL文に変換する。
2.SQL文はSQLDatabaseChainによってデータベース上でSQL文を実行する。
3.実行で返してきた結果をまたSQLDatabaseChainによってLLMに返して、LLMが結果を自然言語(回答)に変換する
4.自然言語(回答)をAnswerとして返す。

質問を3つ用意して投げました。outputは以下のような感じです。
2.png

クエリと結果、あと答え一通り確認すると、特に問題ないですね。

2.Agent

Agentのやり方は少し複雑ですが、昨日Agentで紹介したReActの考え方で処理します。
"agent_executor"と"SQLDatabaseツール"、"LLM"、"データベース"をlangchainでつなぎます。

中身は以下の流れとなります。
1.自然言語(質問の内容)をlangchainによってLLMに投げて、agent_executor経由でLLMがやり方を"思考"する。
2."思考"でこれはSQL問題のを理解して、SQLDatabaseツールを使うことに決める。
3."行動"としてはSQLDatabaseツールを使って、データベースでSQL文を実行しに行く。
4.SQL文を実行して結果を得た後に、再度"思考"して、これは最終回答だと理解したので、最後"行動"としてはこの回答をAnswerとして返す。

質問は同じく⇧の3つ用意して投げました。
outputは長くなりましたので、質問1("在庫数が最も少ない花はどれですか?")の回答だけスクリーンショットしました。

3.png

回答見るとLLMが"思考"している時の流れも全部書いてますので、LLMがReActのロジックで行動しているのかわかりますね。

次回はLLMとGoogleのAPIを使って、自分のメール(gmail)を管理してくれるChatbotの作り方を共有します。(同じくlangchainで実現します。)

5
8
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
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?