2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルLLMを体験するDiscordBotを作成してみた

Posted at

はじめに

最近ハマっているローカルLLMをDiscordBotにしましたので、その作成過程を共有します。

必要なライブラリ

以下のPythonライブラリが必要です。

  • discord.py: Discord APIとのインターフェースを提供します。
  • llama_cpp: ローカルで実行可能なLLMを提供します。

ない人は以下のようにインストールしてください。

pip install discord.py llama_cpp

Discord Botの設定

まず、Discordの開発者ポータルで新しいアプリケーションを作成し、そのアプリケーションにBotを追加します。そして、Botに適切な権限を設定し、生成されたトークンを安全な場所に保存します。

コードの解説

解説を省いているところは以下の記事を参考にしてみてください。

LlamaAdapterクラス

このクラスはLLMのラッパーとして機能し、ユーザーからのプロンプトに基づいてテキストの生成を行います。

class LlamaAdapter:
    def __init__(self):
        # モデルを初期化
        self.llm = Llama(model_path='./japanese-stablelm-3b-4e1t-instruct-q4_K_M.gguf')

    def infer(self, prompt):
        """返答を生成する"""
        output = self.llm(prompt, max_tokens=64)["choices"][0]["text"]
        return output

MyBotクラス

discord.Client を継承したこのクラスでは、Botの動作を定義しています。on_ready メソッドと on_message メソッドをオーバーライドして、Botのログインとメッセージ応答を制御します。

class MyBot(discord.Client):
    async def on_ready(self):
        print(f'Logged on as {self.user}!')

    async def on_message(self, message):
        if message.author == self.user:
            return
        if message.content.startswith('/llm'):
            prompt = message.content.replace('/llm ', '')
            response = self.llama_adapter.infer(prompt)
            await message.channel.send(response)

トークンの取り扱いとBotの起動

安全のため、Botのトークンはファイルから読み込みます。そして、Botを起動します。

with open('token.json') as f:
    data = json.load(f)
    TOKEN = data['bot_token']

client = MyBot(intents=intents)
client.run(TOKEN)

まとめ

こんな感じで比較的簡単にBot作成できました。
もっといろんなモデルで試したいですね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?