見出し画像

AI LLM、LangChainのエージェントは何を考え、行動する?

LangChainは、大規模言語モデル(LLM)とその他のリソースとを組み合わせることができるパッケージです。中でもエージェント機能が面白そうでしたので、架空のデータを作ってPandasを組み合わせて使ってみました。

コードの内容はとにかく動けば良いということで深く考慮していません。

▼Python Code

!pip install -qU OpenAI langchain python-dotenv numpy pandas openpyxl xlrd tabulate

import tkinter
from tkinter import filedialog

import numpy as np
import pandas as pd
from dotenv import load_dotenv, find_dotenv
from langchain.agents import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI

load_dotenv(find_dotenv())

rt = tkinter.Tk()
rt.withdraw()
flnm = filedialog.askopenfilename()
rt.destroy()

xlsx_fl = pd.ExcelFile(flnm)
df = pd.read_excel(xlsx_fl)

chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.0)
agent = create_pandas_dataframe_agent(chat, df, verbose=True)

エージェントへの質問1(英語)

result = agent.run("What is the average 'p_total'?")

エージェントの答え

> Entering new AgentExecutor chain...
Thought: I need to use the mean function in pandas to calculate the average of 'p_total'
Action: python_repl_ast
Action Input: df['p_total'].mean()
Observation: 53734.938335809806
Thought:The average 'p_total' is 53734.938335809806
Final Answer: 53734.938335809806
> Finished chain.

エージェントへの質問2(日本語)

result = agent.run("'p_total'の平均は?")

エージェントの答え

> Entering new AgentExecutor chain...
Thought: I need to use the mean function on the 'p_total' column of the dataframe
Action: python_repl_ast
Action Input: df['p_total'].mean()
Observation: 53734.938335809806
Thought:The mean of 'p_total' is 53734.938335809806
Final Answer: 53734.938335809806

> Finished chain.

英語による質問でも、日本語による質問でも同じように結果を返してくれました。当たり前といえば当たり前かもしれないのですが、まだ、LangChainを始め、いろいろなものがどのような仕様なのか理解している途中なので、念のため、英語で質問してから日本語でも質問してみました。

エージェントは何を考えてどう行動した?

ここが一番、興味のあったところです。前述のエージェントの答えをChat-GPTに解説してもらいました。

この出力は、LangChainのエージェントがタスクを実行する過程を示しています。LangChainのエージェントは、大規模言語モデルを使用してタスクを解決し、その過程を「思考(Thought)」と「行動(Action)」の形で表現します。以下に各行の詳細な説明を記載します。

Entering new AgentExecutor chain...: エージェントが新たなタスクの実行を開始していることを示しています。

Thought: I need to use the mean function in pandas to calculate the average of 'p_total': エージェントが計算を実行する方法を考えています。この場合、エージェントはpandasのmean関数を使用して'p_total'の平均を計算することを決定しました。

Action: python_repl_ast: エージェントが次に行う行動がPythonのコードの実行(具体的には、Pythonの抽象構文木(AST)を使用してコードを実行)であることを示しています。

Action Input: df['p_total'].mean(): エージェントが実際に実行するPythonのコードです。ここでは、pandasのDataFrameであるdfの'p_total'列の平均値を計算しています。

Observation: 53734.938335809806: エージェントが行動を実行した結果、得られた観測結果を示しています。ここでは、'p_total'の平均値が約53734.938と計算されました。

Thought: The average 'p_total' is 53734.938335809806: エージェントが観測結果に基づいて新たな考えを形成しています。ここでは、計算結果を人間が理解しやすい形に整理しています。

Final Answer: 53734.938335809806: 最終的な回答として、'p_total'の平均値を返しています。

この出力は、エージェントがタスクをどのように解釈し、解決に向けてどのような行動をとったかを明示的に示しており、デバッグや改良の際に役立つ情報を提供します。


タスクの解決に向けて、思考し、行動する…とても興味深いです。

いいなと思ったら応援しよう!