top of page

Google Colabでlocal llm を使用してlangchainのAgentsを試してみた

概要

今回はGoogle Colab上で、Llama 2ベースの日本語のモデルを利用し、特定の質問への応答を得る方法を紹介します。具体的には、langchainのAgentsを使って言語モデルとインターネット検索を組み合わせたツールを作成します。このプログラムは、特定の質問に対する応答だけでなく、数値計算も行うことができます。

以下のプログラムはL4またはA100のランタイムタイプを使用してください。


実装

ステップ1: ライブラリのインストール

まず、必要なライブラリをインストールします。これにはlangchainとduckduckgo-searchが含まれ、さらにllama-cpp-pythonを特定の設定でインストールします。


!pip install langchain duckduckgo-search
!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python

ステップ2: モデルのダウンロード

次に、Llama 2ベースの日本語のモデル(今回はElyza-7b)のバイナリをダウンロードします。これを使って、言語モデルを初期化します。

ステップ3: Llamaモデルの設定

ダウンロードしたモデルを使用して、Llama C++ APIを介してモデルを設定します。

from langchain.llms import LlamaCpp
llm = LlamaCpp(
    model_path="ELYZA-japanese-Llama-2-7b-fast-instruct-q4_K_M.gguf",
    n_ctx=4096,
    n_gpu_layers=40,
)

ステップ4: ツールのロード

langchainライブラリを使用して、Llamaモデルと組み合わせるツールをロードします。この例では、DuckDuckGoでの検索機能をツールとして追加します。

from langchain.agents import Tool, load_tools, initialize_agent, AgentType
from langchain.tools import DuckDuckGoSearchRun

tool_names = ["llm-math"]
tools = load_tools(tool_names, llm=llm)
search = DuckDuckGoSearchRun()
tools.append(
    Tool(
        name="duckduckgo-search",
        func=search.run,
        description="useful for when you need to search for latest information in web"
    )
)

ステップ5: エージェントの初期化と質問への応答

エージェントを初期化し、特定の質問に対する応答を生成します。ここでは、日本の20代男性の平均身長に関する情報を取得し、特定の数値計算を行います。

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
response = agent.run("""
現在の20代の日本人男性の平均身長を教えて。
そして、私の身長は168cmなため、日本全国から見た時の差を2乗した結果を教えて。
""")
print(response)

課題

今回はL4ランタイムでも動作するようにより軽量なモデルを使用しました。

そのためモデルの精度によってはうまく回答にたどり着かずエラーになってしまう場合があります。

その場合はモデルをより高精度の物を使用するようにしてみたり、質問を調整したりしてみてください。

bottom of page