🐶

Groq APIとLangChainで簡単な対話型AIを作ってみる

2024/06/12に公開

概要

Groq APIとLangChainを組み合わせてPythonで簡単な対話型AIを作ってみる記事です。
Groq APIを使うまでの準備はこちらの記事を参照ください。

Groqを選んだ理由

大きく分けて二つの理由があります。

  • 2024/06現在、無料でAPIを使用できるから(私にとってはこれが一番の理由です😂)
  • OpenAPIとCompatibleであると公式で語られており、今後他のAPIを使用することになっても実装は共通で使えると思われるから

LangChainのChatmodels ComponentsにGroq APIを使うためのパッケージChatGroqも準備されています。
https://python.langchain.com/v0.2/docs/integrations/chat/groq/

事前準備

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!

参考

https://replit.com/@GroqCloud/Chatbot-with-Conversational-Memory-on-LangChain?v=1

Discussion