LLM連携アプリの開発を支援するライブラリ LangChain の使い方 (3) - エージェント
「LangChain」の「エージェント」の使い方をまとめました。
前回
1. エージェント
「エージェント」はLLMを使用して、実行するアクションとその順序を決定します。アクションは、「ツールを実行してその出力を観察」または「ユーザーに戻る」のいずれかになります。「ツール」は、Google検索などの特定の機能のことになります。
2. エージェント一覧
現在、提供されているエージェントは、次の4つです。
◎ zero-shot-react-description (ZeroShotAgent)
ReActフレームワークを使用して、ツールの説明のみに基づいて使用するツールを決定します。ツールはいくつでも提供できます。 このエージェントでは、ツールごとに説明を提供する必要があります。
◎ react-docstore (ReActDocstoreAgent)
ReActフレームワークを使用してドキュメントストアと対話します。SearchとLookupの2つのツールを提供する必要があります。Searchはドキュメント、Lookupは最近見つかったドキュメント内の用語を検索します。
詳しくは、ReAct paperのWikipediaの例を参照。
◎ self-ask-with-search (SelfAskWithSearchAgent)
Intermediate Answerという1つのツールを使用します。このツールは、質問に対する事実に基づく回答を検索できる必要があります。
詳しくは、self ask with search paperを参照。
◎ conversational-react-description
会話用に最適化されたエージェントです。エージェントがユーザーと会話しながら、必要な時にツールの機能を呼び出すことができます。ReActフレームワークを使用して使用するツールを決定し、メモリを使用して以前の会話のやり取りを記憶します。
3. ツール一覧
現在、提供されているツールは、次の10個です。
◎ python_repl
Pythonシェルです。 これを使用して python コマンドを実行します。 入力は有効な python コマンドでなければなりません。 出力が必要な場合は、printする必要があります。
◎ serpapi
サーチエンジンです。 現在のイベントに関する質問に答える必要がある場合に役立ちます。 入力は検索クエリである必要があります。
◎ requests
インターネットへのポータルです。 サイトから特定のコンテンツを取得する必要がある場合に使用します。 入力は特定のURLである必要があり、出力はそのページのすべてのテキストになります。
◎ terminal
ターミナルでコマンドを実行します。 入力は有効なコマンドである必要があり、出力はそのコマンドの実行からの出力になります。
◎ pal-math
複雑な単語の数学の問題を解決するのに優れた言語モデルです。入力は、完全に表現された難しい単語の数学の問題である必要があります。
◎ pal-colored-objects
オブジェクトの位置と色の属性についての推論に優れた言語モデルです。入力は、完全に表現された難しい推論の問題である必要があります。 オブジェクトに関するすべての情報と、回答したい最後の質問を必ず含めてください。
◎ llm-math
数学の質問に答えなければならない時に役立ちます。
◎ open-meteo-api
OpenMeteo API から気象情報を取得したい場合に役立ちます。入力は、この API が回答できる自然言語の質問である必要があります。
◎ news-api
現在のニュース記事のトップ ヘッドラインに関する情報を取得する場合に使用します。入力は、この API が回答できる自然言語の質問である必要があります。
◎ tmdb-api
The Movie Database から情報を取得したい場合に便利です。 入力は、この API が回答できる自然言語の質問である必要があります。
4. インストール
Google Colabでのインストール手順は、次のとおりです。
(1) パッケージのインストール。
エージェントのツールのために「google-search-results」もインストールします。
# パッケージのインストール
!pip install langchain
!pip install openai
!pip install google-search-results
(2) 環境変数の準備。
以下のコードの <OpenAI_APIのトークン> にはOpenAI APIのトークン、<SerpAPIのトークン> にはSerpAPIのトークン、を指定します。
# 環境変数の準備
import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"
os.environ["SERPAPI_API_KEY"] = "<SerpAPIのトークン>"
5. Colabでの実行
Google Colabでの「エージェント」の実行手順は、次のとおりです。
(1) パッケージのインポート。
# パッケージのインポート
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
(2) LLMの準備。
# LLMの準備準備
llm = OpenAI(temperature=0)
(3) ツールの準備。
# ツールの準備
tools = load_tools(["serpapi", "llm-math"], llm=llm)
(4) エージェントの準備。
# エージェントの準備
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)
(5) 文章による計算問題を質問。
富士山の高さは3776 mなのであってます。
# エージェントの実行
agent.run("富士山の高さに2を掛けると?")
> Entering new AgentExecutor chain...
I need to calculate the result of multiplying the height of Mt. Fuji by 2.
Action: Calculator
Action Input: 3776 * 2
Observation: Answer: 7552
Thought: I now know the final answer
Final Answer: 富士山の高さを2倍すると7552mになります。
> Finished AgentExecutor chain.
'富士山の高さを2倍すると7552mになります。
(6) 最近の話題を質問。
ぼっちちゃんの本名は後藤ひとりなのであってます (英語表記だけど)。
# エージェントの実行
agent.run("ぼっち・ざ・ろっくのぼっちちゃんの本名は?")
> Entering new AgentExecutor chain...
I need to find out the real name of the character.
Action: Search
Action Input: "Bocchi the Rock's real name"
Observation: (TV) Plot Summary: Hitori "Bocchi-chan" ("Loner") Gotō is a lonely high school girl whose heart lies in her guitar. She does nothing every day except strum her guitar by herself at home.
Thought: This doesn't answer my question.
Action: Search
Action Input: "Bocchi the Rock real name"
Observation: Bocchi the Rock! is written and illustrated by Aki Hamaji. It was initially serialized on Houbunsha's Manga Time Kirara Max magazine on December 19, 2017, as a guest work. A full serialization started in the same magazine on March 19, 2018. It has been collected into five tankōbon volumes as of November 26, 2022.
Thought: This still doesn't answer my question.
Action: Search
Action Input: "Bocchi the Rock character real name"
Observation: Gotou, also known as "Bocchi-chan," is a lonely girl who loves the guitar.
Thought: This is the answer I'm looking for.
Final Answer: Gotou
> Finished AgentExecutor chain.
'Gotou'
次回
この記事が気に入ったらサポートをしてみませんか?