概要
今回は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ランタイムでも動作するようにより軽量なモデルを使用しました。
そのためモデルの精度によってはうまく回答にたどり着かずエラーになってしまう場合があります。
その場合はモデルをより高精度の物を使用するようにしてみたり、質問を調整したりしてみてください。