見出し画像

Google Colab で LangChain + Vicuna-v1.5 のエージェント機能を試す

「Google Colab」で「LangChain + Vicuna-v1.5」のエージェント機能を試したのでまとめました。

【注意】T4のハイメモリで動作確認しています。


1. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) パッケージのインストール。
今回は「serpapi」も使用するので「google-search-results」もインストールします。

# パッケージのインストール
!pip install langchain accelerate bitsandbytes sentence_transformers
!pip install google-search-results

(2) 環境変数の準備。
以下のコードの <SerpAPIのトークン> にはSerpAPIのトークン、を指定します。

# 環境変数の準備
import os
os.environ["SERPAPI_API_KEY"] = "<SerpAPIのAPIキー>"

(3) トークナイザーとモデルの準備。

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, pipeline
import torch

# トークナイザーとモデルの準備
model_id = "lmsys/vicuna-7b-v1.5"
tokenizer = AutoTokenizer.from_pretrained(model_id)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
)
model = AutoModelForCausalLM.from_pretrained(
    model_id, 
    torch_dtype=torch.float16,
    quantization_config=bnb_config, 
    device_map="auto",
)

(4) LLMの準備。

from langchain.llms import HuggingFacePipeline

# パイプラインの準備
pipe = pipeline(
    "text-generation",
    model=model, 
    tokenizer=tokenizer,
    max_new_tokens=256
)

# LLMの準備
llm = HuggingFacePipeline(pipeline=pipe)

(5) ツールの準備。
今回はGoogle検索「serpapi」と数値計算「llm-math」のみ使用します。

from langchain.agents import load_tools

# ツールの準備
tools = load_tools(
    tool_names=["serpapi", "llm-math"],
    llm=llm
)

(6) エージェントの作成。
今回はシンプルな「zero-shot-react-description」としました。(必ずserpapiを使用)

from langchain.agents import initialize_agent

# エージェントの作成
agent = initialize_agent(
    agent="zero-shot-react-description",
    llm=llm,
    tools=tools,
    verbose=True
)

(7) エージェントの実行。
・ぼっち・ざ・ろっくの作者の年齢は

# エージェントの実行
response = agent.run("ぼっち・ざ・ろっくの作者の年齢は?")
print(response)

2. 追加の質問応答

・ぼっち・ざ・ろっくの作者は?

# エージェントの実行
response = agent.run("ぼっち・ざ・ろっくの作者の名前は?")
print(response)
> Entering new AgentExecutor chain...
 I should use the search engine to find the answer.
Action: Search
Action Input: "ぼっち・ざ・ろっく"
Observation: Bocchi the Rock! is a Japanese four-panel manga series written and illustrated by Aki Hamaji. It has been serialized in Houbunsha's seinen manga magazine Manga Time Kirara Max since December 2017. Its chapters have been collected in five tankōbon volumes as of November 2022.
Thought: I now know the author's name.
Final Answer: The author of Bocchi the Rock! is Aki Hamaji.

> Finished chain.
The author of Bocchi the Rock! is Aki Hamaji.


・日本語で回答してください。ぼっち・ざ・ろっくの作者の名前は?

# エージェントの実行
response = agent.run("日本語で回答してください。ぼっち・ざ・ろっくの作者の名前は?")
print(response)
> Entering new AgentExecutor chain...
 この情報は日本語で検索できるかもしれない。
Action: Search
Action Input: ぼっち・ざ・ろっくの作者の名前
Observation: Aki Hamaji
Thought: これで答えは見つかった。
Final Answer: Aki Hamaji

> Finished chain.
Aki Hamaji


・富士山の高さは?

# エージェントの実行
response = agent.run("富士山の高さは?")
print(response)
> Entering new AgentExecutor chain...
 この情報は、日本の地理や歴史に関する知識が必要です。
Action: Search
Action Input: 富士山の高さ
Observation: 12,388′
Thought: 富士山の高さは12,388′です。
Final Answer: 富士山の高さは12,388′です。

> Finished chain.
富士山の高さは12,388′です。


・123*4を計算機で計算してください

# エージェントの実行
agent.run("123*4を計算機で計算してください")
> Entering new AgentExecutor chain...
 計算機を使って計算することができます。
Action: Calculator
Action Input: 123*4
Observation: Answer: 492
Thought: 答えは492です。
Final Answer: 492

> Finished chain.
492


・今日の東京の天気をWeb検索してください。 【無限ループで失敗】

# エージェントの実行
agent.run("今日の東京の天気をWeb検索してください。")
> Entering new AgentExecutor chain...
 天気予報を見ることで答えを得ることができます。
Action: Search
Action Input: 「今日の東京の天気」
Observation: 東京(東京)の天気予報。今日・明日の天気と風と波、明日までの6時間ごとの降水確率と最高・最低気温を見られます。
Thought: 天気予報を見ることで答えを得ることができます。
Action: Search
Action Input: 「今日の東京の天気」
Observation: 東京(東京)の天気予報。今日・明日の天気と風と波、明日までの6時間ごとの降水確率と最高・最低気温を見られます。
Thought: 天気予報を見ることで答えを得ることができます。
Action: Search
Action Input: 「今日の東京の天気」
Observation: 東京(東京)の天気予報。今日・明日の天気と風と波、明日までの6時間ごとの降水確率と最高・最低気温を見られます。
Thought: 天気予報を見ることで答えを得ることができます。
Action: Search
Action Input: 「今日の東京の天気」
Observation: 東京(東京)の天気予報。今日・明日の天気と風と波、明日までの6時間ごとの降水確率と最高・最低気温を見られます。
Thought: 天気予報を見ることで答えを得ることができます。
Thought: 天気予報を見ることで答えを得ることができます。
Action: Search
Action Input: 「今日の東京の天気」
Observation: 東京(東京)の天気予報。今日・明日の天気と風と波、明日までの6時間ごとの降水確率と最高・最低気温を見られます。
Thought: 天気予報を見ることで答えを得ることができます。
Thought: 天気予報を見ることで答えを得ることができます。
    :

無限ループ対策を後で調べる….



この記事が気に入ったらサポートをしてみませんか?