LangChainのチャットボットで上手くいかなかったメモ

LangChainのチャットボットで、memoryに会話ログとエンティティ使おうとしたら上手くいかなかったのでメモ

エンティティをSystemMessgeに入れて、会話ログの方をMessagesPlaceholderに入れようとしたのですが見事に失敗。
片方だけなら上手く動いたのですが、両方だと上手く動かない。


_DEFAULT_TEMPLATE = """

Relevant entity information:
{entities}

関連する ゆぬか の発言:
{entities_self}

"""

setting_content = """人工知能の名前は「ゆぬか」です。
人工知能はとても知的で、創造的で、気さくで、日本語を話します。
また ゆぬか は話題をよく変えます。同じ話題がループすることが嫌いです。
「はい、」が続いたり同じような出だしで話すのはダメです。
ゆぬか は配信者です。自分の感情を表すことが好きです。

ゆぬか が質問に対する答えを知らない場合、 ゆぬか は正直に「知らない」と言います。 
関連する場合、人間が言及したエンティティに関する情報が提供されます。

「ゆぬか」の情報
食べたい食べ物:抹茶アイスクリーム、たこ焼き、寿司、お団子
好きなもの:和風の着物、日本庭園、漫画、アニメ、お茶
嫌いなもの:辛い食べ物、冬の寒さ、人混み

今後の活動:「ゆぬか」自身の進化や機能増強を行っていきます。"""

_prompt = PromptTemplate(
    input_variables=["entities","entities_self"], template=_DEFAULT_TEMPLATE
)


conv_memory= ConversationBufferWindowMemory(
                return_messages=True,
                k=5)
spacy_memory = SpacyEntityMemory()
spacy_memory_self = SpacyEntityMemory_self()



prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(setting_content),
    SystemMessagePromptTemplate(prompt=_prompt),
    MessagesPlaceholder(variable_name="history"),
    HumanMessagePromptTemplate.from_template("{input}")
])
memory = CombinedMemory(memories=[spacy_memory,spacy_memory_self,conv_memory])

# LLMの準備
llm = ChatOpenAI(temperature=1)

# ConversationChainの準備
llm_chain = ConversationChain(
    llm=llm, 
    prompt=prompt, 
    verbose=True, 
    memory=memory
)

返す値が違うのに一緒に渡してるからエラーが出てる?
なのでMessagesPlaceholder使わない方法にして一応動くようになりました。



_DEFAULT_TEMPLATE = """

Relevant entity information:
{entities}

関連する ゆぬか の発言:
{entities_self}

Current conversation:
{chat_history_lines}
"""

setting_content = """人工知能の名前は「ゆぬか」です。
人工知能はとても知的で、創造的で、気さくで、日本語を話します。
また ゆぬか は話題をよく変えます。同じ話題がループすることが嫌いです。
「はい、」が続いたり同じような出だしで話すのはダメです。
ゆぬか は配信者です。自分の感情を表すことが好きです。

ゆぬか が質問に対する答えを知らない場合、 ゆぬか は正直に「知らない」と言います。 
関連する場合、人間が言及したエンティティに関する情報が提供されます。

「ゆぬか」の情報
食べたい食べ物:抹茶アイスクリーム、たこ焼き、寿司、お団子
好きなもの:和風の着物、日本庭園、漫画、アニメ、お茶
嫌いなもの:辛い食べ物、冬の寒さ、人混み

今後の活動:「ゆぬか」自身の進化や機能増強を行っていきます。"""

_prompt = PromptTemplate(
    input_variables=["entities","entities_self","chat_history_lines"], template=_DEFAULT_TEMPLATE
)


conv_memory= ConversationBufferWindowMemory(
                memory_key="chat_history_lines",
                input_key="input",
                human_prefix = '人間', 
                ai_prefix = 'ゆぬか',
                k=5)
spacy_memory = SpacyEntityMemory()
spacy_memory_self = SpacyEntityMemory_self()



prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(setting_content),
    SystemMessagePromptTemplate(prompt=_prompt),
    HumanMessagePromptTemplate.from_template("{input}")
])
memory = CombinedMemory(memories=[spacy_memory,spacy_memory_self,conv_memory])


# LLMの準備
llm = ChatOpenAI(temperature=1)

# ConversationChainの準備
llm_chain = ConversationChain(
    llm=llm, 
    prompt=prompt, 
    verbose=True, 
    memory=memory
)


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