ClearMLとLangChainライブラリを使ったAI質問応答エージェントの作成方法

LLM

はじめに

LangChainは、言語モデル(LLM)を使用して、高度な自然言語処理タスクを実行するためのライブラリです。このライブラリを使用すると、質問応答や文章要約などの複雑なタスクを、比較的簡単にプログラミングすることができます。

この記事では、LangChainライブラリを使用して、ツールを備えたAI質問応答エージェントを作成する方法を紹介します。初心者の方でも理解しやすいように、コードの各部分を詳しく解説していきます。


前回の記事

ClearMLとLangChainを連携させる方法
はじめにLangChainは、言語モデルを使ったアプリケーション開発のための人気のフレームワークです。ClearMLを使うと、LangChainのアセットやメトリクスを記録するためのClearML Taskを作成することができます。この記事...
ClearMLCallbackHandlerの徹底解説
前回の記事では、LangChainにClearMLを統合する方法を紹介しました。今回は、その中で登場したClearMLCallbackHandlerについて、より詳しく解説していきます。ClearMLCallbackHandlerとはCle...

必要なライブラリのインポート

最初に、必要なライブラリをインポートします。ここでは、LangChainライブラリから、エージェントの作成に必要なモジュールをインポートしています。

from langchain.agents import AgentType, initialize_agent, load_tools

# SCENARIO 2 - Agent with Tools

インポートしているモジュールの説明:

  • AgentType: エージェントのタイプを指定するための列挙型。
  • initialize_agent: エージェントを初期化するための関数。
  • load_tools: エージェントが使用するツールをロードするための関数。

ツールのロード

次に、エージェントが質問に答えるために使用するツールをロードします。ここでは、"serpapi"と"llm-math"の2つのツールを使用しています。

tools = load_tools(["serpapi", "llm-math"], llm=llm, callbacks=callbacks)
  • "serpapi": 検索エンジンAPIを使用して、質問に関連する情報を検索するためのツールです。
  • "llm-math": 数学的な計算を実行するためのツールです。

load_tools関数には、使用するツールの名前のリストと、言語モデル(llm)およびコールバック関数(callbacks)を渡します。

エージェントの初期化

ツールをロードしたら、initialize_agent関数を使用してエージェントを初期化します。

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    callbacks=callbacks,
)

initialize_agent関数には、以下の引数を渡します:

  • tools: ロードしたツールのリスト。
  • llm: 言語モデル(LLM)オブジェクト。エージェントが質問の理解と回答の生成に使用します。
  • agent: エージェントのタイプを指定します。ここでは、"ZERO_SHOT_REACT_DESCRIPTION"を使用しています。これは、エージェントが質問に対してゼロショットで反応し、説明を生成することを意味します。
  • callbacks: コールバック関数のリスト。エージェントの実行中に呼び出されるコールバック関数を指定します。

エージェントの実行

エージェントを初期化したら、agent.runメソッドを使用して質問を渡し、エージェントを実行します。

agent.run("Who is the wife of the person who sang summer of 69?")

ここでは、"Who is the wife of the person who sang summer of 69?"という質問をエージェントに渡しています。エージェントは、ロードされたツールを使用して情報を収集し、質問に対する回答を生成しようとします。

エージェントの実行プロセスの詳細

エージェントの実行プロセスを詳しく見ていきましょう。以下は、エージェントの実行ログの一部です。

> Entering new AgentExecutor chain...
Thought: I should search for the singer of summer of 69 first
Action: Search
Action Input: "singer of summer of 69"
Observation: {'type': 'organic_result', 'title': 'Guided Search Filters'}

まず、エージェントは "summer of 69" の歌手を検索するために、"singer of summer of 69" というクエリで検索を実行します。しかし、検索結果は関連性が低いようです。

Thought: I should click on the first result to find the singer's name
Action: Search
Action Input: "Guided Search Filters"
Observation: ['Help users narrow their search results by showing facets near the search box to guide their discovery experience.', 'Guided search is a feature that helps users by applying filters to better segment results when a search returns many outcomes.', 'The Guided Search panel enables users to further refine search criteria to locate contracts. Users can apply filters, including detailed text ...', 'The following examples explain how search filtering and Guided Navigation work in Big Data Discovery. The Catalog, Explore, Transform, and Discover areas in ...', 'Guided search (GS) is a model of human visual search ... filters in early vision. Proceedings of the Royal ... Guided Search 2.0: A revised model of visual search.', 'The Guided Search panel enables users to further refine search criteria to locate contracts by applying filters, including: detailed text search ...', 'Guided Search is a step-by-step walkthrough of the data in American FactFinder, allowing users to find the most relevant data products for their search.', 'User profile search history and search filters. Provides a way for you to save queries, and then reuse those queries over and over again, as many times as you ...', 'This paper describes Guided Search 6.0 (GS6), a revised model of visual search. When we encounter a scene, we can see something everywhere.']

次に、エージェントは "Guided Search Filters" というクエリで検索を実行しますが、これも関連性の低い結果が返ってきます。

Thought: I should look for the singer's name in the results
Action: Search
Action Input: "Guided Search 6.0"
Observation: ['This paper describes Guided Search 6.0 (GS6), a revised model of visual search. When we encounter a scene, we can see something everywhere.', 'This paper describes Guided Search 6.0 (GS6), a revised model of visual search that is a hybrid of serial and parallel processes, and shows that the ...', 'In sum, Guided Search 6.0 provides a framework for understanding how visual search operates, and by adding several new forms of guidance and the ...', 'The core idea of GS is that search becomes more efficient when deployments of attention are guided by preattentive information. As new data about search ...', 'The latest version is GS6. GS argues that visual processing is capacity-limited and that attention is needed to "bind" features together into recognizable ...', 'The talk will give a tour of Guided Search 6.0 (GS6), the latest evolution of the Guided Search model of visual search. Part 1 describes The Mechanics of ...', "A guided search model similar to Hoffman's (1979) two-stage model can account for these data. In the model, parallel processes use information about simple ...", 'Guided Search 6.0: An upgrade with five forms of guidance, three types of functional visual fields, and two, distinct search templates. October 2020; Journal ...', 'Talk presented by Dr. Jeremy Wolfe as part of the "Forward & Recurrent Streams in Visual Perception" Symposium at 2021 Vision Science ...', 'Guided Search 6.0: An updated model of visual search. Article 05 February 2021. Incorporating the properties of peripheral vision into theories of visual search.']

さらに、エージェントは "Guided Search 6.0" というクエリで検索を続けます。しかし、これらの検索結果からも歌手の名前を見つけることができません。

Thought: I now know the singer's name is Bryan Adams
Final Answer: Bryan Adams

> Finished chain.

数回の検索の後、エージェントは "Bryan Adams" が "summer of 69" の歌手であると結論づけ、最終的に "Bryan Adams" を質問の回答として返します。

ただし、ログから分かるように、エージェントは関連性の低い検索クエリを繰り返し実行しており、効率的に情報を収集できていないようです。エージェントの検索戦略やデータ解析方法を改善することで、より正確かつ効率的に質問に答えることができると考えられます。

実行結果の追跡

エージェントの実行結果を追跡するために、ClearMLというツールを使用しています。

clearml_callback.flush_tracker(
    langchain_asset=agent, name="Agent with Tools", finish=True
)

clearml_callback.flush_trackerメソッドを呼び出すことで、エージェントの実行に関するメタデータをClearMLに記録します。これにより、エージェントの実行プロセスを監視し、パフォーマンスを分析することができます。

まとめ

この記事では、LangChainライブラリを使用して、ツールを備えたAI質問応答エージェントを作成する方法を紹介しました。

LangChainライブラリを使用することで、比較的簡単にAI質問応答エージェントを作成することができます。エージェントの作成には、言語モデルとツールの選択が重要です。適切な言語モデルとツールを選択することで、より高度な自然言語処理タスクを実行できるエージェントを作成できます。

また、エージェントの実行プロセスを監視し、パフォーマンスを分析することも重要です。ClearMLのようなツールを使用することで、エージェントの実行結果を追跡し、改善点を見つけることができます。

AI質問応答エージェントは、顧客サポートやチャットボットなど、様々な分野で活用されています。LangChainライブラリを使用することで、これらの分野で活躍するエージェントを作成することができます。ぜひ、LangChainライブラリを使ってみて、自分だけのAI質問応答エージェントを作成してみてください。

ただし、今回のエージェントの実行ログを見ると、関連性の低い検索クエリを繰り返し実行しており、効率的に情報を収集できていないようです。エージェントの検索戦略やデータ解析方法を改善することで、より正確かつ効率的に質問に答えることができると考えられます。

例えば、以下のような改善策が考えられます:

  1. 検索クエリの最適化: 質問の内容をより深く理解し、適切なキーワードを抽出することで、より関連性の高い検索結果を得ることができます。

  2. 複数の情報源の活用: 検索エンジンだけでなく、知識ベースやデータベースなどの他の情報源も活用することで、より幅広い情報を収集できます。

  3. 自然言語処理技術の活用: 感情分析や意図分類などの自然言語処理技術を活用することで、質問の意図をより正確に理解し、適切な回答を生成できます。

  4. フィードバックの活用: ユーザーからのフィードバックを収集し、エージェントの性能を継続的に改善していくことが重要です。

これらの改善策を取り入れることで、より高度なAI質問応答エージェントを作成することができるでしょう。

LangChainライブラリは、AI質問応答エージェントの作成に役立つ強力なツールです。ぜひ、LangChainライブラリを使って、自分だけのエージェントを作成してみてください。そして、エージェントの性能を継続的に改善していくことで、より高度な自然言語処理タスクを実行できるエージェントを目指しましょう。

参考サイト

ClearML | 🦜️🔗 LangChain
ClearML is a ML/DL development and production suite, it contains 5 main modules:

コメント

タイトルとURLをコピーしました