LLMの使い方で広がる可能性:ReActから学ぶAIの活用法
はじめに
AI技術が進化を遂げる中、大規模言語モデル(LLM)は、その能力をさまざまな形で発揮している。LLMそのものの進化はもちろん重要だが、LLMをどのように使うかという技術やアプローチも進化している。ReActエージェントは、そうしたLLMの活用法の一つにすぎないが、AIが持つ可能性を広げる好例である。本記事では、LLMの活用技術の発展がいかにしてAIの役割を変えているかを、ReActエージェントを例に説明する。
通常のLLM:知識は豊富だが指示待ちタイプの部下
通常のLLMは、「知識は豊富だが指示を待つ部下」のような存在だ。与えられた質問には正確に答えることができるが、複雑なタスクを分解して進めることや、自らの判断で問題を解決することは苦手である。単純な情報提供には優れているが、多段階の問題解決や動的な対応には限界がある。
特徴
豊富な知識で質問に素早く回答する。
答えを導く過程は見えず、理由の説明は不得意。
一度に全てを解決しようとし、エラー修正が難しい。
ReActエージェント:LLMの可能性を広げる使い方の一例
ReActエージェントは、ReAct: Synergizing Reasoning and Acting in Language Models (2022)という論文を下に作られたエージェントで、LLMを「自分で考え、行動し、問題を段階的に解決する」ように活用する手法だ。これはLLMそのものが進化したというよりも、LLMをどのように活用するかを工夫した結果である。ReActエージェントは、問題を分解し、各ステップを確認しながら進行し、必要に応じて外部情報を参照することができる。このようなアプローチにより、LLMは「知識を持つ答え手」から「自ら考え、柔軟に対応するパートナー」へと変わる。
特徴
問題を段階的に解決し、途中経過を見せながら進む。
自発的に行動し、外部リソースや情報を活用する。
フィードバックをもとに自己修正を行い、精度を向上させる。
ReActエージェントのテンプレート例
直近では、各LLMがFunction Callingなどの仕組みを用意しているが、ここでは理解をシンプルにするため、ツールの情報をプロンプトに埋め込む例を紹介する。
ReActエージェントで使われているプロンプトテンプレートの一例を紹介する (参考: https://smith.langchain.com/hub/langchain-ai/react-agent-template)。ReActエージェントで使われるプロンプトは、LLMが思考し、行動するための具体的な指示を提供する構造を持つ。このテンプレートは、LLMがタスクの進行においてツールを使用する判断を行い、その結果に基づいて次のステップを決めるように設計されている。
あなたは親切なアシスタントです。ユーザーの質問に対して、
できるだけ正確に答えてください。必要に応じて与えられたツールを使用してください。
## 利用可能なツール
以下のツールが使用できます:
{tools}
## ツールの使用方法
ツールを使用する場合は、以下の形式で記述してください:
```
思考: ツールを使用する必要がありますか? はい
実行するアクション: [{tool_names}]の中から選択したアクション
アクションの入力値: アクションに与える入力値
実行結果: アクションの実行結果
```
人間に直接回答する場合、またはツールを使用する必要がない場合は、以下の形式で記述してください:
```
思考: ツールを使用する必要がありますか? いいえ
最終回答: [ここに回答を記述]
```
それでは始めましょう!
過去の会話履歴:
{chat_history}
新しい入力: {input}
{agent_scratchpad}
{tools}、{tool_names}、{chat_history}、{input}、{agent_scratchpad} は、LLMとやりとりをするプログラムから変数として与えられる。ここでは、LLMの可能性を広げるために重要な {tools} ついて説明する。
厳密には、ツールの使用はReActそのものとは異なる概念だが、LLMの活用を大きく広げる点で非常に関連性が高い。ツールを活用することで、LLMは外部のデータソースやAPI、自社開発のシステムなどと連携し、さらに実用的なタスクをこなせるようになる。
LLMのプロンプトにツールができることを教える
{tools}には、LLMが利用可能なツールのリストを与える。ツールの名前、ツールができることの説明、ツールの入力や出力の例などが与えられる。
例えば、天気予報ツールであれば以下のようなものになる。
名前: get_weather
説明: 指定された地域の天気予報を取得します
入力例: "東京"
出力例: "東京の天気:晴れ、気温25度、降水確率10%"
検索ツールであれば以下のようなものになる。
名前: search
説明: インターネットで情報を検索します
入力例: "日経平均 株価"
出力例: "直近の日経平均株価は..."
{tools} で定義されるツールリストは、LLMが特定のタスクを解決する際に利用できる外部リソースの情報を提供する。LLMは、この情報をもとに「どのツールを使うべきか」「どのような入力が必要か」を判断し、その判断をプロンプト内で提示する。重要なのは、LLM自体がツールの実行を行うわけではなく、その指示をもとにプログラム側がツールを実際に実行するという点である。
たとえば、ユーザーが「最新のニュースを教えて」と依頼した場合、LLMは 「ニュース検索ツールを使うべきか?」と判断し、行動 としてそのツールを選択、行動の入力には具体的な検索キーワードを指定する。プログラム側はその指示を受けてツールを実行し、取得したニュースをLLMに返す。LLMはその観察結果をもとに、最終的な回答を構築してユーザーに提示する。
外部ツールを利用でLLMの可能性は無限大に
LLMは、その思考力や自然言語処理能力を生かして高度なタスクに対応できるが、単独では限界もある。しかし、LLMが自社ツールや外部APIなどと連携できることで、その可能性は無限大に広がる。これにより、LLMは企業の独自システムやリアルタイムデータソース、特定の業界に特化した機能などにアクセスし、より深い分析や自動化を実現できる。たとえば、企業内のカスタムデータベースへのアクセス、外部の計算リソースの活用、最新情報を提供するウェブAPIの使用など、さまざまな機能を統合することで、LLMはより実用的で強力なツールとして活躍できる。これにより、AIは単なる情報提供者に留まらず、業務の中核を担うパートナーとしての役割を果たすことが可能になる。
LLMの使い方の進化が生む新たな可能性
ReActエージェントは、LLMの使い方次第でAIの役割が変わることを示している。単に知識を提供するだけでなく、複雑な状況に対応し、動的に思考を展開できるようなアプローチは、LLMを使いこなす技術の進化によって可能になっている。LLM自体の進化も重要だが、それを最大限に活用するためのアプローチの進化こそが、AIの可能性を広げる鍵である。
ポイント
計画的な思考: 複雑な問題を段階的に処理することで、解決を容易にする。
柔軟性: 状況の変化に応じて計画を修正しながら進む。
一例にすぎない: ReActエージェントはLLM活用法の一つであり、他にも多くの技術的可能性が存在する。
まとめ
LLMは単に賢くなっているだけではなく、その活用法も大きく進化している。ReActエージェントはその一つの例に過ぎず、LLMをどのように思考させ、行動させるかの技術がAIの役割を変えつつある。LLMの使い方が工夫されることで、AIはより信頼でき、実用的なツールとして活躍する時代が訪れているのだ。
おまけ: (開発者向け)10分でReActエージェントを試す
ReActの仕組みがわかっても、いざReActエージェントを構築しようとすると数時間、ときには数日かかってしまう。
そこでおすすめなのが、LangGraphのReAct Agent Templateだ。
LangGraph ReAct Agent TemplateはGitHubで公開されている。
テンプレート利用のために事前準備
LangGraph ReAct Agent Templateを利用するにあたって、以下のものが必要となる。
LangSmith (https://smith.langchain.com/) アカウント (無料で登録可能)
Docker環境
LangGraph Studio (https://studio.langchain.com/)
Tavily (https://tavily.com/) API Key
ClaudeもしくはChatGPTのAPI Key
LangGraph StudioからTemplateを起動
事前準備が終わったらLangGraph Studioを起動して、右下にあるテンプレート一覧からLangGraph ReAct Agent Templateを選択する。
次に、テンプレートをCloneする画面に移るので、使用したいモデルを選択し、API Keyを入力する。
Clone and Startボタンを押すことで、Docker上でアプリケーションが立ち上がり、以下のような画面が表示される。
左下にあるInputからメッセージを入力しSubmitすることで、外部検索ツール (Tavily) を連携をしたReAct Agentを動かすことができる。
LLMがツールを選択 (今回はSearchツール) して、ツールに入れるべきインプット (直近10年の日経平均株価 推移) を考えてくれている。
このようにLangGraph Templateを利用すれば、簡単にReActエージェントなどを試すことができる。
独自のツールなどを追加したい場合は、Cloneされたスクリプトにあるtoolスクリプトに追加していけば良い。
このような実践的な実装の話は、毎月開催している機械学習の社会実装勉強会 (https://machine-learning-workshop.connpass.com/) で発表しているので、興味のある方はぜひご参加ください。