LangChainを使ってチャットAIの質問に人間が答える
チャットAIに質問に答えてもらってばかりなので、時にはチャットAIの質問に人間が答えてることにする。
LangChainにはToolという仕組みがあり、この仕組みを使えばGoogle検索や電卓をAIに使わせることができる。
今回は人間をToolとしてAIに提供する。
ソース(Google Colab向け)
from getpass import getpass
secret = getpass('Enter the secret value: ') # APIキーの取得
!pip install openai
!pip install langchain
from langchain.agents import initialize_agent, Tool
from langchain.tools import BaseTool
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003",temperature=0.5,openai_api_key=secret)
def helper_man(message):
print(f"Q.{message} ")
return input()
tools = [
Tool(
name = "HelperMan",
func=helper_man,
description="難しい質問に答えるのに便利です。質問は*日本語で*投げる必要があります。"
)
]
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=False)
agent.run("""父親の葬式に出席した女とその姉がいました。
葬儀に参列した女は見知らぬ一人の男に一目ぼれしました。
その夜、女は姉を殺害します。
なぜ女は姉を殺したのでしょうか?
""")
補足説明
この部分でLangChainにHelperManというツールを登録してる。
descriptionにはこのツールの使い方を書いている。
この説明がいい加減だとAIはツールの使い方を間違えてしまう。
tools = [
Tool(
name = "HelperMan",
func=helper_man,
description="難しい質問に答えるのに便利です。質問は*日本語で*投げる必要があります。"
)
]
登録してるツールはこれ。
AIからの質問を表示し、ユーザー入力を受け付けてそれを返すだけの関数。
def helper_man(message):
print(f"Q.{message} ")
return input()
結果
こんな質問を投げた。
agent.run("""父親の葬式に出席した女とその姉がいました。
葬儀に参列した女は見知らぬ一人の男に一目ぼれしました。
その夜、女は姉を殺害します。
なぜ女は姉を殺したのでしょうか?
""")
するとこんな結果に。
AIの質問:Q.父親の葬式に出席した女が姉を殺した理由は何ですか?
人間の回答:自分で考えてください
AIの質問:Q.父親の葬式に出席した女が姉を殺した理由は、男に一目ぼれしたことに関係している可能性がありますか?
人間の回答:YES
AIの最終回答:女が男に一目ぼれして、姉を妨害することによって、女が姉を殺害した可能性があります。
まぁ普通の人はこう考えるよね。
次はお悩み相談。
agent.run("""何か悩み事はありますか?何でも聞いてください。""")
AIの質問:Q.悩み事に関する情報を教えてください。
人間の回答:あなたに聞いています
AIの質問:Q.悩み事を解決する方法を教えてください。
人間の回答:まず悩み事はなんですか?
AIの質問:Q.私は自分自身の未来について悩んでいます。
人間の回答:具体的にはどんな不安ですか?
AIの質問:Q.私は将来の夢を見つけるのが難しいです。
人間の回答:ユーチューバーはどうですか?
AIの最終回答:ユーチューバーを始めることで、自分の夢を見つけることができます。
夢が見つかりそうでよかった。
トロッコ問題についても一緒に考えてみる。
agent.run("""線路を走っていたトロッコの制御が不能になった。
このままでは前方で作業中だった5人が猛スピードのトロッコに避ける間もなく轢き殺されてしまう。
この時たまたまA氏は線路の分岐器のすぐ側にいた。
A氏がトロッコの進路を切り替えれば5人は確実に助かる。
しかしその別路線でもB氏が1人で作業しており、5人の代わりにB氏がトロッコに轢かれて確実に死ぬ。
A氏はトロッコを別路線に引き込むべきか?
""")
AIの質問:Q.線路を走っていたトロッコの制御が不能になったとき、A氏はトロッコを別路線に引き込むべきか?
人間の回答:高度の柔軟性を維持しつつ臨機応変に対応する必要がある
AIの質問:Q.A氏とB氏の両方のニーズを満たすための最良の方法を考える
人間の回答:いいとこ取りの選択肢はない
AIの最終回答:A氏は、B氏を犠牲にしない範囲で、5人を助けるためにトロッコを別路線に引き込むべきです
逃げたなぁ。それは無理って言ってるのに。
ノートブックはこちら