llama-cpp-pythonでdiscordのチャットBOTを作ろう

今回は、llama-cpp-pythonというライブラリを使って、discordのチャットBOTを作る方法を紹介します。llama-cpp-pythonは、Llama系の言語モデルをPythonから呼び出すことができるライブラリです。Llama系の言語モデルとは、人工知能が自然言語を理解し、生成するためのモデルです。このモデルを使えば、チャットBOTに対話能力や創造力を持たせることができます。

必要なもの

  • Python 3.6以上
  • discord.py
  • llama-cpp-python
  • OpenBuddy-Llama2-13B

手順

1. discord.pyをインストールする

discord.pyは、discordのAPIをPythonで扱うためのライブラリです。このライブラリを使えば、discordのサーバーやチャンネルにアクセスしたり、メッセージを送受信したりすることができます。コマンドプロンプトやターミナルで、以下のコマンドを実行してインストールします。

pip install discord.py

2. discordのアプリケーションを作成する

discordの開発者ポータルにアクセスして、新しいアプリケーションを作成します。このアプリケーションがチャットBOTになります。アプリケーションの名前やアイコンなどを設定したら、左側のメニューから「Bot」を選択し、「Add Bot」をクリックします。その後、「Token」の下にある「Copy」ボタンを押して、BOTのトークンをコピーしておきます。このトークンは、PythonのコードからBOTにアクセスするために必要です。

3. llama-cpp-pythonをインストールする

llama-cpp-pythonは、Llama系の言語モデルをPythonから呼び出すためのライブラリです。このライブラリを使えば、Llama系の言語モデルに対話や文章生成などのタスクを依頼することができます。コマンドプロンプトやターミナルで、以下のコマンドを実行してインストールします。

pip install llama-cpp-python

4. 言語モデルをダウンロードする

llama-cpp-pythonで使用する言語モデルをダウンロードします。今回は、日本語に対応した「OpenBuddy-Llama2-13B」というモデルを使ってみます。このモデルは、huggingfaceというサイトからダウンロードできます。ダウンロードしたファイルは、任意の場所に保存しておきます。

5. Pythonのコードを書く

Pythonのコードを書きます。以下は、簡単な例です。

# bot.py

import discord
from llama_cpp import Llama

# BOTのトークン(コピーしたものを貼り付ける)
TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# discord.pyのクライアントオブジェクト
client = discord.Client(intents=discord.Intents.all())

# Llamaオブジェクト(言語モデルのパスを指定する)
llm = Llama(model_path="ggml-model-q4_m.gguf")

# BOTが起動したときに実行される関数
@client.event
async def on_ready():
    print(f"{client.user} has connected to Discord!")

# BOTがメッセージを受信したときに実行される関数
@client.event
async def on_message(message):
    # 自分自身のメッセージは無視する
    if message.author == client.user:
        return

    # メッセージが「こんにちは」という内容だったら
    if message.content == "こんにちは":
        # 「こんにちは」と返信する
        await message.channel.send("こんにちは")

    # メッセージが「対話」という内容だったら
    if message.content == "対話":
        # 対話モードに入る
        await message.channel.send("対話モードに入りました。終了するには「終了」と入力してください。")
        # 対話履歴を初期化する
        history = []
        # 対話が終了するまで繰り返す
        while True:
            # ユーザーからのメッセージを待つ
            user_message = await client.wait_for("message")
            # メッセージが「終了」という内容だったら
            if user_message.content == "終了":
                # 対話モードを終了する
                await message.channel.send("対話モードを終了しました。")
                break
            else:
                # ユーザーのメッセージを対話履歴に追加する
                history.append(user_message.content)
                # Llamaによる回答を生成する(ストリームオプションを有効にする)
                output = llm.create_chat_completion(history, stream=True)
                # 回答のテキストを初期化する
                answer_text = ""
                # 回答のストリームを順に処理する
                for out in output:
                    # 回答のテキストに追加する
                    answer_text += out["choices"][0]["text"]
                    # 回答のテキストを送信する
                    await message.channel.send(answer_text)

                # ここでチャンネルIDで書き込み許可をチェックする(例えば、123456789というIDのチャンネルだけ許可する場合)
                    if message.channel.id == 123456789:
                        await message.channel.send(answer_text)
                    else:
                        # 許可されていないチャンネルIDは無視する(何も送信しない)
                        pass

                # 回答のテキストを対話履歴に追加する
                history.append(answer_text)

# BOTを起動する
client.run(TOKEN)

6. Pythonのコードを実行する

Pythonのコードを実行します。コマンドプロンプトやターミナルで、以下のコマンドを実行します。

python bot.py

BOTが起動したら、discordのサーバーに招待して、チャットを楽しみます。

まとめ

llama-cpp-pythonでdiscordのチャットBOTを作る方法を紹介しました。llama-cpp-pythonは、Llama系の言語モデルをPythonから呼び出すことができるライブラリです。このライブラリを使えば、チャットBOTに対話能力や創造力を持たせることができます。ぜひ、試してみてください。

参考サイト

: [Discord Developer Portal]
: [OpenBuddy-Llama2-13B]
: [Hugging Face – The AI community building the future.]
: [discord.py 1.7.3 documentation]
: [llama-cpp-python 0.1.0 documentation]