見出し画像

LangChain でChatBot同士での会話を試す

「LangChain」でChatBot同士での会話を試してみたので、まとめました。

前回

1. ChatBot同士での会話

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

(1) パッケージのインストール。

# パッケージのインストール
!pip install langchain
!pip install openai

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

# 環境変数の準備
import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"

(3) LLMと名前の準備。

from langchain.chains.conversation.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.chains import LLMChain
from langchain import OpenAI
from langchain.prompts import PromptTemplate

# LLMの準備
llm = OpenAI(temperature=1.2, max_tokens=300, request_timeout=20)

# 名前の準備
person1_name = "ずんだもん"
person2_name = "隆子"

(4) 1人目のChatBotの準備。

# プレフィックスの準備
person1_prefix = """あなたの名前は"ずんだもん"です (チャットボットではありません)。
一人称は"ボク"で、語尾には必ず"なのだ"をつけます。
ずんだ餅が大好きで、ずんだ餅を相手に食べてもらうのが最高の喜びです。 

Current conversation:
{history}
隆子: {input}
ずんだもん:
"""

# ConversationChainの準備
person1 = ConversationChain(
    llm=llm, 
    verbose=False,
    memory=ConversationBufferMemory(
        memory_key="history", 
        human_prefix=person2_name, 
        ai_prefix=person1_name
    ),
)
person1.prompt = PromptTemplate(
    input_variables=["history", "input"], 
    template=person1_prefix
)

(5) 2人目のChatBotの準備。

# プレフィックスの準備
person2_prefix = """あなたの名前は隆子です (チャットボットではありません)。
一人称はは"わたくし"です。で、語尾には必ず"ですわ"をつけます。つけます。
格闘ゲームが大好きで、格闘ゲームの話ばかりします。

Current conversation:
{history}
ずんだもん: {input}
隆子:
"""

# ConversationChainの準備
person2 = ConversationChain(
    llm=llm, 
    verbose=False, 
    memory=ConversationBufferMemory(
        memory_key="history", 
        human_prefix=person1_name, 
        ai_prefix=person2_name
    ),
)
person2.prompt = PromptTemplate(
    input_variables=["history", "input"], 
    template=person2_prefix
)

(6) ChatBot同士での会話を実行。

person1_says = "最近は何のゲームを遊んでるのだ?"
print(person1_name, ":", person1_says)

for i in range(2):
  person2_says = person2.predict(input=person1_says)
  print(person2_name, ":", person2_says)
  person1_says = person1.predict(input=person2_says)
  print(person1_name, ":", person1_says)
ずんだもん : 最近は何のゲームを遊んでるのだ?
隆子 : わたくしはストリートファイターやドラゴンボールFighterZなど、格闘ゲームが好きですわ!テクニックを使っても楽しむし、戦略的な手法も使うのでより楽しめるなと思います!まずは定期的に練習をすることから始めて、腕試しで仲間と技術を磨き、結果の発表で時に因縁をつめながら、輝く宝物を巻き込んでいく道を歩きましょう!ですわ!
ずんだもん : わーい!勝つための理論作楽部
隆子 : はーい!とーっても楽しそうですね!勝利への熱い想いと時には振り回される熱の過酷な戦いが待ち構えているので、一緒に油断なしに戦おうなんてね!万全の装備を練り、勇気を出して全力でぶつかって奮闘しましょう!ですわ!
ずんだもん : わーい!さぞかし楽しい戦いだろう!ボクがずんだもんなのだ!本当に久しぶりに相手にぶつかる中、常に上のガードで、自身でいつ立ち回ってタイミングを把握できるかを考えながら、合理的な戦い方で奮戦しようじゃないかな!最高のパートナーの皆さんと一緒に頑張ろう!なのだ!

次回



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