「Langchain Agentsを使用して、独自のデータアナリストアシスタントを作成しましょう」
Create your own Data Analyst Assistant using Langchain Agents.
私の個人的な意見を共有させてください。LLMエージェントについて: 彼らはすべてを革新するでしょう!すでに大規模な言語モデルを使っている場合は、おそらくそれらを知っているでしょう。このコンセプトが新しい場合は、驚く準備をしてください。
大規模な言語モデルの世界でのエージェントとは何ですか?
エージェントは、大規模な言語モデルが目標を達成するためのツールを使用することを可能にするアプリケーションです。
今まで、私たちはテキスト生成、分析、要約、翻訳、感情分析などのタスクに言語モデルを使用してきました。
技術の世界で最も有望なユーティリティの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を使用する方法を理解することは重要なスキルです。
使用するデータの例を見てみましょう。
データを調査した後、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のコマンドを実行するために使用します。その後、内部で作成されたDataFrameのdescribe関数を呼び出し、データの形状を表示します。結果は観察に表示されます。
最後のイテレーションでは、結論に至りました。
このデータフレームには、世界中のさまざまな場所の気候に関する情報が含まれています。気温、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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
-
Google DeepMindの研究者たちは、RT-2という新しいビジョン・言語・行動(VLA)モデルを紹介しましたこのモデルは、ウェブデータとロボットデータの両方から学習し、それを行動に変えます
-
「データフレームのマージに使用される3つのPandas関数」
-
『AWS SageMaker Data Wranglerの新機能でデータ準備を最適化する』
-
「V-Net、イメージセグメンテーションにおけるU-Netの兄貴」
-
データ駆動型のディスパッチ
-
「Salesforce Data Cloudを使用して、Amazon SageMakerで独自のAIを持ち込む」
-
「Amazon SageMakerとSalesforce Data Cloudの統合を使用して、SalesforceアプリをAI/MLで強化しましょう」