ChatLLM+OpenAI APIを使ってDiscordの論文要約Botを作った話
DiscordのBotについてほぼ知識ゼロの状態から、論文を要約するBotが作れたので備忘録と共有のために書き残しておきます。生成AIのサービスを利用して作成しました。
経緯
LLM関連の研究が活発になってる
↓
追いつくには最新論文に目を通す必要がある!
↓
でも英語論文を読むのは時間がかかる...
↓
自動でLLMに要約させて時短しよう!
思考プロセスとしてはこんな感じです。自分だけが利用するならDiscordBotにしなくてもよかったのですが、せっかくなら研究室の人たちも利用できるようにしたいと思った次第です。
実際にできたもの
先にどのようなものができたかを掲示しておきます。
LLMには論文の概要、手法、結果の要約を出力させています。投稿に通し番号を付けて重複取得しないようにし、論文のリンクもLLMの出力の後に付け足して投稿するようにしています。
環境構築
数個のDiscordサーバで小規模で使うことを想定しているので、IDEは使用せずにコマンドプロンプトで実装しています。数個のチャンネルで運用するだけならサーバは必要ないですが、自動投稿をするなら常時PCを起動しておく必要があります。普段あまりPCを使用しなくて毎日しっかりシャットダウンしてるなら、サーバ代<電気代 になるかもしれません。
利用したサービス:
- Abacus.AI
あまり使ってる人を見かけませんが、RouteLLMが自動でLLMを選択して回答を生成してくれるのでめちゃ便利です。GPTとかGeminiとかSonnetとか、主要なLLMは大体使えます。脳死でプロンプトを渡せるのが良い。月10ドルで使えるからコスパも良いです。今回は作り方を一から聞いて対話を繰り返してブラッシュアップしていくという方法で利用しています。
- OpenAI API
ABACUSのAPIを使ってもよかったですが、GPT-4.1-miniを使うならOpenAI APiを使うほうが10倍くらい安いです(2025/05/13時点)。今回作ったボットだと、一か月50円くらいで運用できる計算。
必要なライブラリ:
下記のコマンドをコマンドプロンプトに入力すればライブラリがインストールされるはず。もしファイルを実行したときにコマンドプロンプトが即落ちするなら、必要なライブラリが不足しているか、ライブラリのバージョンが競合してしまっているかもしれません。
pip install discord.py arxiv openai schedule
実装
詰まったら全部ChatLLMに聞けば大体解決できるし、人によって詰まるところも違うので、細かいところは説明せずに大体の手順を説明します。実際のところは「論文要約Botを作りたい」という旨のプロンプトをChatLLMに投げて、手順さえもChatLLMに聞くのがおすすめです。
1.Discord Developers ApplicationsからBOTを作成。(Discordアカウントが必要)
正確には、Discord Botを作成してDiscordサーバに導入、Botを識別してプログラムに組み込むためためのトークンの取得が目的。
古い記事だとUIが多少異なっていたので、なるべく新しい記事を参照したほうが良いでしょう。2025年5月現在であれば、下記の記事の「1. Discord 上の Bot の作成」の部分の通りにやれば作れると思います。とてもわかりやすかったです。
2.利用するLLMのAPI、論文投稿サイトの選定
自分の場合は、OpenAI APIをすでに利用した経験があったため、あまりほかの選択肢は考えずに利用しました。迷ったことといえば、どのバージョンのモデルを使うかというところ。2025年5月現在だと、GPT-4.1-miniかGPT-4o-miniが論文要約という長文処理のタスクにおいてはコストと精度の面から適しています。GPT-4.1-miniのほうがGPT-4o-miniより少しコストがかかるが微々たるもので、GPT-4.1-miniの方が精度が高い点からGPT-4.1-miniを使う判断をしました。
ちなみに、LLMのAPIを使ったことがない場合は、別途APIキーを発行する必要があります。調べたら、下記の記事がわかりやすそうでした。
論文投稿サイトの選定については要約したい論文の分野によって変わると思われますが、自分はLLMやRAG関連の論文を取得したかったので、一旦ChatLLMに相談した後、arXivからAPI経由で論文を取得することにしました。
3.ChatLLMにプログラムを生成してもらう。
詳細に仕様を伝えるほど要望に沿ったプログラムを出力してくれます。プロンプトの与え方はいろいろありますが、
・使用するプログラミング言語
・利用するサービス(APIやツールなど)
・入力、出力の形式
など、あらかじめ定まっていることはなるべく具体的に伝えるようにすると良いです。全部あらかじめ決めておく必要はなくて、後から修正させることも簡単にできるので、「あらかじめ決めておけば時短になることが多い」という程度に考えると良いかもしれません。僕自身も最初ひとつのファイルに関数を詰め込んで作ってもらったのですが、見づらくなってしまったのでファイルを分割してもらいました。(分割の過程でバグは発生しました)
4.プログラムの修正
最初に生成させた段階では大体ライブラリが競合していたり、自分が想定していた仕様が実装されていなかったりするので、プログラムを修正していく必要があります。プログラムを読んで、自分ですぐに直せる細かいところは自分で直して、わからない箇所や修正箇所が多くなるものについてはChatLLMに修正させました。
実際にできたシステムのファイルはGitHubで公開しています。
詰まったポイント(ChatLLMに聞けば大体すぐわかる)
- ライブラリのインストールを忘れてた
- DiscordBotの権限付与にチェックを入れ忘れてた
- 論文取得関係の関数を非同期にするかどうか
こだわりポイント
- システムプロンプトでBotにキャラクター性を持たせた
- OpenAI API経由でChatBotとしても機能するようにした
- 2時間に1回論文を取得して要約、投稿するようにした(取得間隔は調整可能)
最後に
この記事のシステムはDiscordのBotについてほとんど知識がない状態から5時間くらいで作れました。個人的には、知識がなくても自分で動かしてみて覚えていくことができるのがとても楽しく、良い時代になったなと思います。
Discussion