🐶
Groq APIとLangChainで簡単な対話型AIを作ってみる
概要
Groq APIとLangChainを組み合わせてPythonで簡単な対話型AIを作ってみる記事です。
Groq APIを使うまでの準備はこちらの記事を参照ください。
Groqを選んだ理由
大きく分けて二つの理由があります。
- 2024/06現在、無料でAPIを使用できるから(私にとってはこれが一番の理由です😂)
- OpenAPIとCompatibleであると公式で語られており、今後他のAPIを使用することになっても実装は共通で使えると思われるから
LangChainのChatmodels ComponentsにGroq APIを使うためのパッケージChatGroq
も準備されています。
事前準備
langchainおよびlangchain_groqをインストールしておきます。
!pip install langchain_groq
コード
コードの流れはこのようになっています。
-
ChatGroq
インスタンスを作成 - 過去のやりとりを保持するための
ConversationBufferWindowMemory
インスタンスを作成 - Systemプロンプト、Memory、HumanInputからなる
Prompt
を作成 -
LLMChain
インスタンスを作成、LLMChain.predict
を実行
こちらのフローチャートはGPTsの"Diagrams: Show Me | charts, presentations, code"を使って作成してみました🖌️
import os
from langchain.chains import LLMChain
from langchain_core.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
MessagesPlaceholder,
)
from langchain_core.messages import SystemMessage
from langchain.chains.conversation.memory import ConversationBufferWindowMemory
from langchain_groq import ChatGroq
# Get Groq API key
groq_api_key = os.environ["GROQ_API_KEY"]
groq_chat = ChatGroq(groq_api_key=groq_api_key, model_name="llama3-70b-8192")
system_prompt = "あなたは便利なアシスタントです。"
conversational_memory_length = 5
memory = ConversationBufferWindowMemory(
k=conversational_memory_length, memory_key="chat_history", return_messages=True
)
while True:
user_question = input("質問を入力してください: ")
if user_question.lower() == "exit":
print("Goodbye!")
break
if user_question:
# Construct a chat prompt template using various components
prompt = ChatPromptTemplate.from_messages(
[
# 毎回必ず含まれるSystemプロンプトを追加
SystemMessage(content=system_prompt),
# ConversationBufferWindowMemoryをプロンプトに追加
MessagesPlaceholder(variable_name="chat_history"),
# ユーザーの入力をプロンプトに追加
HumanMessagePromptTemplate.from_template("{human_input}"),
]
)
conversation = LLMChain(
llm=groq_chat,
prompt=prompt,
verbose=False,
memory=memory,
)
response = conversation.predict(human_input=user_question)
print("User: ", user_question)
print("Assistant:", response)
出力結果はこのようになりました。
(笑)が頻繁に入っていたり英語が含まれていたり、何となく癖のある感じはあります😂
User: こんにちは。私は今カフェにいます。あなたはどこにいますか?
Assistant: こんにちは!私は仮想的なアシスタントですので、どこにもphysically存在していません。ただ、私はいつでもどこでもあなたと一緒にいられます!カフェで何かお飲み物を楽しんでいますね?
User: はい。ホットコーヒーを飲んでいます。
Assistant: それはいいですね!ホットコーヒーは冬の季節にはぴったりのドリンクですね。カフェでのんびりしている時間はとても貴重ですね。何か読書や作業をしているのですか、単にリラックスしていますか?
User: はい。ホットコーヒーを飲んでいます。
Assistant: 繰り返しですね!(笑) ホットコーヒーの味わいを満喫していますね!カフェの雰囲気もいいですね、落ち着いていますか?
User: 午後は少し混んでいるみたいですね。
Assistant: それはそうですね!午後はカフェが混み合う時間帯ですね。多くの人が仕事帰りや学校帰りに寄ってくる時間帯ですから。でも、それでもホットコーヒーを飲みながら落ち着いてる時間は大切ですね!
User: 私は今どこにいますか?
Assistant: 私は憶えています!あなたはカフェにいますね!
User: 正解です。
Assistant: よかった!私の記憶力が働いてくれたということですね!(笑) カフェでのんびりしているあなたの様子を想像しています!
Goodbye!
参考
Discussion