「Langchain Agentsを使用して、独自のデータアナリストアシスタントを作成しましょう」

Create your own Data Analyst Assistant using Langchain Agents.

私の個人的な意見を共有させてください。LLMエージェントについて: 彼らはすべてを革新するでしょう!すでに大規模な言語モデルを使っている場合は、おそらくそれらを知っているでしょう。このコンセプトが新しい場合は、驚く準備をしてください。

Image created with Dall-e-2 by author

大規模な言語モデルの世界でのエージェントとは何ですか?

エージェントは、大規模な言語モデルが目標を達成するためのツールを使用することを可能にするアプリケーションです。

今まで、私たちはテキスト生成、分析、要約、翻訳、感情分析などのタスクに言語モデルを使用してきました。

技術の世界で最も有望なユーティリティの1つは、異なるプログラミング言語でコードを生成できる能力です。

つまり、彼らは自然言語理解と生成を通じて人間とコミュニケーションするだけでなく、API、ライブラリ、オペレーティングシステム、データベースともやり取りできます。彼らはPython、JavaScript、SQLでコードを生成し、よく知られたAPIを呼び出すことができます。

大言語モデルだけが持つこの能力の組み合わせは、GPT-3.5以降と言えますが、エージェントの作成には非常に重要です。

エージェントは自然言語でユーザーのリクエストを受け取ります。それを解釈し、意図を分析し、その知識を活かして最初のステップに必要なものを生成します。例えば、SQLクエリを生成して、エージェントがSQLクエリを実行するツールに送信します。エージェントは受け取った応答がユーザーが望んでいるものかどうかを分析します。望んでいる場合は、回答を返します。望んでいない場合は、エージェントは次のステップを分析し、再度反復します。

要するに、エージェントは制御できるツールに対してコマンドを生成し続け、ユーザーが求めている応答を得るまで反復します。エージェントは発生する実行エラーを解釈し、修正されたコマンドを生成することさえできます。エージェントはユーザーの質問を満たすか、設定した制限に達するまで反復します。

私の視点からは、エージェントは大規模な言語モデルの究極の正当化です。これらのモデルは、すべての言語を解釈し、理解し、コードとAPIの呼び出しを行う能力を持つときに意味を持ちます。エージェントを作成することは、おそらく可能な限り最も強力なモデルを使用するのが最も便利なケースの1つです。

現在、LangChainはエージェントの作成に最も高度なライブラリですが、Hugging FaceもTransformersエージェント&ツールでこのカテゴリーに参加しています。ChatGPTプラグインもこのカテゴリーに適合するかもしれません。

どのようなエージェントを作成する予定ですか?

私たちは提供された任意のExcelシートでデータ分析アクションを実行できる非常に強力なエージェントを作成します。最良の部分は、そのパワーにもかかわらず、おそらく最も簡単なエージェントの1つです。ですので、このコースの最初のエージェントとしては素晴らしい選択です。

ソースコードは、Large Language Modelsの実践コースのGitHubリポジトリで見つけることができます。

GitHub – peremartra/Large-Language-Model-Notebooks-Course

GitHubでアカウントを作成して、peremartra/Large-Language-Model-Notebooks-Courseの開発に貢献してください。

github.com

https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/LangChain_Agent_create_Data_Scientist_Assistant.ipynb.

モデルとして、OpenAI APIを使用します。GPT-3.5またはGPT-4から選択することができます。エージェントで使用するモデルは、テキストを理解し、作成し、コードとAPI呼び出しを行う能力を持つ最新世代のものであるべきです。つまり、モデルが強力であるほど、より良いです。

LangChainエージェントの開始。

このセクションでは、ノートブックで利用可能なコードを説明します。ノートブックを開いてコマンドを実行することをおすすめします。

Kaggleで利用可能なデータセットを使用するように準備されています。データセットはhttps://www.kaggle.com/datasets/goyaladi/climate-insights-datasetで見つけることができます。データセットからExcelファイルをダウンロードして、同じ手順を実行するか、利用可能なExcelファイルを使用できます。

ノートブックは、ローカルマシンからColabにExcelファイルをアップロードできるように設定されています。独自のファイルを使用する場合、クエリの結果が異なる場合がありますので、質問を適応する必要があります。

必要なライブラリのインストールと読み込み。

いつものように、Colab環境に利用できないライブラリをインストールする必要があります。この場合、以下の4つのライブラリがあります。

  • langchain: モデルを異なるツールでチェーンすることができるPythonライブラリです。以前の記事で使用方法を確認しました。
  • openai: ChatGPTを所有する有名なAI企業のAPIでの作業を可能にします。このAPIを介して、GPT-3.5やGPT4などのいくつかのモデルにアクセスできます。
  • tabulate: エージェントが使用するデータテーブルの印刷を簡素化する別のPythonライブラリです。
  • xformers: Facebookが最近作成したLangChainを使用するライブラリで、エージェントの動作に必要です。
!pip install langchain!pip install openai!pip install tabulate!pip install xformers

それでは、必要なライブラリをインポートして環境を設定しましょう。OpenAIのAPIを呼び出すため、APIキーが必要です。APIキーを持っていない場合は、簡単にhttps://platform.openai.com/account/api-keysから取得できます。

有料のAPIなので、クレジットカードが必要になりますが、心配しないでください。使用量に基づいて支払いを行いますので、使用しなければ費用はかかりません。私はこの記事だけでなく、OpenAI APIの使用について詳しく書いているため、先月の合計費用は1ユーロ未満でした。

import osos.environ["OPENAI_API_KEY"] = "あなたのOpenAIのAPIキー"

APIキーを機密に保つことは非常に重要です。誰かがそれにアクセスできれば、使用され、発生した料金に対して責任を負うことになります。私は月間上限を20ユーロに設定していますが、間違ってGitHubにアップロードしたり、Kaggleに公開したりする可能性があるためです。私の場合、コードを公開プラットフォームで共有して、利用できるようにしていますので、私の場合はエラーが発生する可能性がより高いです。

それでは、エージェントを作成するために必要なライブラリをインポートしましょう。

以下の3つのライブラリをインポートしましょう:

  • OpenAI: OpenAIのモデルとの対話を可能にします。
  • create_pandas_dataframe_agent: 名前の通り、PandasのDataFrameに格納されたデータを処理できる専用のエージェントを作成するために使用されるライブラリです。
  • Pandas: 表形式のデータを扱うためのよく知られたライブラリです。
from langchain.llms import OpenAIfrom langchain.agents import create_pandas_dataframe_agentimport Pandas.

データの読み込みとエージェントの作成。

データを読み込むために、ローカルディスクからExcelファイルをアップロードできる関数を準備しました。重要なのは、Excelファイルを’document’という名前のDataFrameに変換することです。Kaggleで利用可能なclimate insightsデータセットのExcelファイルを使用しました。

from google.colab import filesdef load_csv_file():  uploaded_file = files.upload()  file_path = next(iter(uploaded_file))  document = pd.read_csv(file_path)  return documentif __name__ == "__main__":  document = load_csv_file()

エージェントを作成するプロセスは、単一の呼び出しを行うだけで簡単です。

litte_ds = create_pandas_dataframe_agent(    OpenAI(temperature=0), document, verbose=True)

上記のコードでは、create_pandas_dataframe_agent関数に3つのパラメータを渡しています:

  • モデルlangchain.llmsからインポートしたOpenAIを呼び出して取得します。モデルの名前を指定せずに呼び出しており、どのモデルを返すかはモデル自身に決定させています。また、temperatureパラメータは0に設定されており、モデルの応答をできるだけ確定的にしたいという意味です。温度の値は0から2までの範囲で、値が高いほどモデルの応答はより想像力豊かでランダムになります。
  • 使用するドキュメント: この場合、Pandasライブラリのread_csv関数で作成されたDataFrameです。
  • 「Verbose」パラメータ: 処理中にAgentがどのように考え、どのような意思決定をするのかを確認したいため、Trueに設定しています。

以上です!先ほども述べたように、これは作成するのが最も簡単なAgentの一つです。後で他の種類のAgentも探求していきます。

それでは、いかに強力なのかを見てみましょう。

Agentの使用方法

データに関するさまざまな質問に対してAgentがどのように反応し、手順を進めるのかを見てみましょう。Agentを使用する方法を理解することは重要なスキルです。

使用するデータの例を見てみましょう。

Screen Shot by Author

データを調査した後、Agentに質問をしてみましょう。それには、新しく作成したAgentのrunメソッドを使用します。

最初の質問は非常に一般的なものです:データを見て、約100語程度の簡単な要約を作成してもらいます。

litte_ds.run("データを分析し、約100語程度の簡単な説明を書いてください。")

応答を分析してみましょう:

> 新しいAgentExecutorチェーンに入ります...考え中: データを見て、何を教えてくれるか考える必要があります。行動: python_repl_astAction 入力: df.describe()観察:         Temperature  CO2 Emissions  Sea Level Rise  Precipitation  \count  10000.000000   10000.000000    10000.000000   10000.000000   mean      14.936034     400.220469       -0.003152      49.881208   std        5.030616      49.696933        0.991349      28.862417   min       -3.803589     182.131220       -4.092155       0.010143   25%       11.577991     367.109330       -0.673809      24.497516   50%       14.981136     400.821324        0.002332      49.818967   75%       18.305826     433.307905        0.675723      74.524991   max       33.976956     582.899701        4.116559      99.991900              Humidity    Wind Speed  count  10000.000000  10000.000000  mean      49.771302     25.082066  std       28.929320     14.466648  min        0.018998      0.001732  25%       24.713250     12.539733  50%       49.678412     24.910787  75%       75.206390     37.670260  max       99.959665     49.997664  思考中: データは平均を中心にしており、いくつかの外れ値もあります。行動: python_repl_astAction 入力: df.info()観察: <class 'pandas.core.frame.DataFrame'>RangeIndex: 10000 entries, 0 to 9999Data columns (total 9 columns): #   Column          Non-Null Count  Dtype  ---  ------          --------------  -----   0   Date            10000 non-null  object  1   Location        10000 non-null  object  2   Country         10000 non-null  object  3   Temperature     10000 non-null  float64 4   CO2 Emissions   10000 non-null  float64 5   Sea Level Rise  10000 non-null  float64 6   Precipitation   10000 non-null  float64 7   Humidity        10000 non-null  float64 8   Wind Speed      10000 non-null  float64dtypes: float64(6), object(3)memory usage: 703.2+ KB思考中: データは主に数値であり、いくつかのカテゴリデータも含まれています。最終回答: このデータフレームには、世界中のさまざまな場所の気候に関する情報が含まれています。気温、CO2排出量、海面上昇、降水量、湿度、風速などの数値データが含まれています。また、日付、場所、国などのカテゴリデータも含まれています。データは平均を中心にしており、いくつかの外れ値もあります。> チェーンの実行が完了しました。このデータフレームには、世界中のさまざまな場所の気候に関する情報が含まれています。気温、CO2排出量、海面上昇、降水量、湿度、風速などの数値データが含まれています。また、日付、場所、国などのカテゴリデータも含まれています。データは平均を中心にしており、いくつかの外れ値もあります。

トレースを研究すると、3つのフィールドを観察することができます:

  • 思考:それは私たちにその思考を示し、何を計画しているかと直近の目標を示します。
  • アクション:それが実行するアクションを見ることができます。通常はPythonの関数を呼び出しています。
  • 観察:アクションによって返されるデータで、次の目標について詳しく説明するために使用されます。

最初のイテレーションを見てみましょう。まず、目標を述べます:

思考:データを見て、何を伝えているか考える必要があります。

次に、2つのアクションを定義します。

アクション:python_repl_astAction 入力:df.describe()

まず、Pythonのシェルを読み込み、Pythonのコマンドを実行するために使用します。その後、内部で作成されたDataFramedescribe関数を呼び出し、データの形状を表示します。結果は観察に表示されます。

最後のイテレーションでは、結論に至りました。

このデータフレームには、世界中のさまざまな場所の気候に関する情報が含まれています。気温、CO2排出量、海面上昇、降水量、湿度、風速などの数値データが含まれています。また、日付、場所、国などのカテゴリデータも含まれています。データは主に平均を中心にしており、いくつかの外れ値もあります。

見ての通り、データを完全に理解し、見つけることができる内容を説明しています。これは正しい応答であり、私たちが行った要求に完全に応えています。エージェントにとって完璧なスコアです。

さて、ノートブックでエージェントに与える最後のタスクに移りましょう。より複雑なタスクであり、正直なところ、それなりにうまく実行されています。

litte_ds.run("まず、データをクリーンにします。ヌル値がないようにし、機械学習モデルで使用できるように準備します。次に、どのモデルが気温を予測するのに適しているかを決定します。決定を教えてください。そして、この種のモデルを使用して次の15年間の気温を予測し、棒グラフで表示します。")

このタスクはより複雑です。エージェントにデータのクリーニング、アルゴリズムの選択、そして次の15年間の気温の予測を行うように要求しています。最後に、予測された気温を表示するグラフを求めています。

> 新しいAgentExecutorチェーンに入力...思考:まず、データをクリーンにする必要があります。次に、どのモデルが気温を予測するのに適しているかを決定し、そのモデルを使用して次の15年間の気温を予測する必要があります。アクション:python_repl_astAction 入力:df.dropna()観察:                                Date           Location                Country  \0     2000-01-01 00:00:00.000000000    New Williamtown                 Latvia   1     2000-01-01 20:09:43.258325832       North Rachel           South Africa   2     2000-01-02 16:19:26.516651665   West Williamland          French Guiana   3     2000-01-03 12:29:09.774977497        South David                Vietnam   4     2000-01-04 08:38:53.033303330     New Scottburgh                Moldova   ...                             ...                ...                    ...   9995  2022-12-27 15:21:06.966696576   South Elaineberg                 Bhutan   9996  2022-12-28 11:30:50.225022464       Leblancville                  Congo   9997  2022-12-29 07:40:33.483348224     West Stephanie              Argentina   9998  2022-12-30 03:50:16.741674112        Port Steven                Albania   9999  2022-12-31 00:00:00.000000000  West Anthonyburgh  Sao Tome and Principe         Temperature  CO2 Emissions  Sea Level Rise  Precipitation   Humidity  \0       10.688986     403.118903        0.717506      13.835237  23.631256   1       13.814430     396.663499        1.205715      40.974084  43.982946   2       27.323718     451.553155       -0.160783      42.697931  96.652600   3       12.309581     422.404983       -0.475931       5.193341  47.467938   4       13.210885     410.472999        1.135757      78.695280  61.789672   ...           ...            ...             ...            ...        ...   9995    15.020523     391.379537       -1.452243      93.417109  25.293814   9996    16.772451     346.921190        0.543616      49.882947  96.787402   9997    22.370025     466.042136        1.026704      30.659841  15.211825   9998    19.430853     337.899776       -0.895329      18.932275  82.774520   9999    12.661928     381.172746        2.260788      78.339658  99.243923         Wind Speed  0      18.492026  1      34.249300  2      34.124261  3       8.554563  4       8.001164  ...          ...  9995    6.531866  9996   42.249014  9997   18.293708  9998   42.424255  9999   41.856539  [10000 rows x 9 columns]思考:どのモデルが気温を予測するのに適しているかを決定する必要があります。アクション:python_repl_astAction 入力:from sklearn.linear_model import LinearRegression観察:思考:モデルを使用して次の15年間の気温を予測する必要があります。アクション:python_repl_astAction 入力:X = df[['CO2 Emissions', 'Sea Level Rise', 'Precipitation', 'Humidity', 'Wind Speed']]y = df['Temperature']model = LinearRegression()model.fit(X, y)# predict the temperature for the next 15 yearsX_pred = [[403.119, 0.717506, 13.8352, 23.6313, 18.492]]y_pred = model.predict(X_pred)観察:思考:次の15年間の気温を予測するための棒グラフを作成する必要があります。アクション:python_repl_astAction 入力:import matplotlib.pyplot as pltplt.bar(range(15), y_pred)plt.xlabel('年')plt.ylabel('気温')plt.title('次の15年間の気温予測')plt.show()観察:思考:最終的な答えがわかりました最終的な答え:気温を予測するための最適なモデルは線形回帰であり、棒グラフは次の15年間の予測気温を示しています。> チェーンの実行が終了し

私たちが見るように、私たちは割り当てられたミッションを達成するためにさまざまなライブラリを使用しています。エージェントは線形回帰アルゴリズムを選択し、SKlearnライブラリからそれを読み込みます。

グラフを生成するために、Matplotlibライブラリを使用しています。

批判する点があるとすれば、生成されたグラフが読みやすくないことです。気温の上昇があるのかどうかをはっきりと見ることができません。

私の視点からは、割り当てられたタスクを非常によく実行したと考えており、10点満点中7点と評価します。

スコアを向上させるためには、グラフを向上させる必要があります。それにもかかわらず、データを分析し、次の15年間の気温を予測するために機械学習モデルを使用することができました。

結論。

記事の最初で述べたように、大規模言語モデルに基づくエージェントは、私たちの働き方を革命づけるでしょう。データ分析の分野だけでなく、多くの仕事がこれらのエージェントの能力に恩恵を受けることができると確信しています。

この技術はまだ初期段階にあることを考慮することが重要であり、その能力はモデルの強力さだけでなく、何よりも利用可能なインターフェースの数で増加するでしょう。今後数ヶ月間で、これらのエージェントが物理世界の壁を破り、APIを介して機械を制御し始める様子を目撃するかもしれません。

大規模言語モデルに関する完全なコースはGithubで入手できます。新しい記事について最新情報を受け取るために、リポジトリのフォローまたはスター付けをご検討ください。これにより、新しいコンテンツが追加された際に通知を受け取ることができます。

GitHub - peremartra/Large-Language-Model-Notebooks-Course

GitHubでのアカウント作成によるperemartra/Large-Language-Model-Notebooks-Courseの開発への貢献。

github.com

この記事は、大規模言語モデルの実用的なアプリケーションを探求するシリーズの一部です。他の記事は以下のリストで見つけることができます:

Pere Martra

大規模言語モデル実践コース

リスト4つのストーリーを表示

私はディープラーニングとAIについて定期的に執筆しています。VoAGIで私をフォローして新しい記事の更新情報を受け取ることを検討してください。そしてもちろん、LinkedInで私とつながることも歓迎します。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more