はじめに
最近ハマっているローカル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作成できました。
もっといろんなモデルで試したいですね。