研究者のためのDiscord Bot「ThesisHerald」をリリース!論文を自動配信&AI要約

arXiv APIとAIを活用して、最新の研究論文を自動配信・要約するDiscord Botの開発記録。マルチエージェント、多言語対応、会話型検索機能を実装。

研究者のためのDiscord Bot「ThesisHerald」を作った!論文を自動配信&AI要約

研究者として論文を追いかけていると、「毎日どんどん新しい論文が出てきて追いつけない...」という悩みがつきものだ。そこで、最新論文を自動で配信してくれるDiscord Bot「ThesisHerald」を作ってみた。

プロジェクト情報

著者
著者: Sera
大学院でAI作曲に関して研究中!
来春からデータサイエンティストとして働く予定の技術オタク。
初心者
登場人物: あかり
流行りのAIやWeb技術に興味津々!
『知りたい』気持ちで質問を止められない、好奇心旺盛な学生。

なぜThesisHeraldを作ったのか

confusedの表情
初心者

論文情報ってTwitterとかで流れてくるよね?わざわざBot作る必要あるの?

専門家

確かにTwitterやRSSフィードでも論文情報は得られるんだけど、問題がいくつかあるんだ。

まず、情報が散らばりすぎていて管理が大変。Twitterのタイムラインだと他の情報に埋もれちゃうし、RSSリーダーは開くのが面倒。それに、論文のアブストラクトは英語が多いから、内容を把握するのに時間がかかるんだよね。

normalの表情
初心者

たしかに!英語読むのしんどい...

専門家

だから、Discordという普段から使うプラットフォームで、自動的に新しい論文を通知して、しかもAIで要約してくれるBotがあったら便利だと思ったんだ。研究室のメンバーとも情報共有しやすいしね。

excitedの表情
初心者

なるほど!チーム全体で最新論文をキャッチアップできるんだ!

ThesisHeraldの主な機能

normalの表情
初心者

で、このBotって何ができるの?

専門家

大きく分けて3つの機能がある。まず、毎日決まった時間に新しい論文を自動配信する機能。次に、AIを使った会話型の論文検索機能。最後に、論文の内容を多言語で要約する機能だ。

happyの表情
初心者

AI使ってるんだ!すごそう!

1. 自動配信機能

専門家

一番基本的な機能が、定期的な論文配信だ。arXivっていう論文アーカイブから、指定したカテゴリやキーワードに関連する新着論文を毎日取得して、Discordのチャンネルに通知する。

confusedの表情
初心者

arXivって何?聞いたことあるけど...

専門家

arXiv(アーカイヴって読む)は、主に物理学、数学、コンピュータサイエンスなどの分野の論文を無料で公開しているプレプリントサーバーなんだ。査読前の論文も公開されていて、最新の研究をいち早くキャッチできるんだよ。

surprisedの表情
初心者

査読前!?それって信頼できるの?

専門家

良い指摘だね。確かに査読前だから、内容の正確性は完全には保証されていない。でも、研究の最先端を知るには最適な場所なんだ。実際、多くのトップ研究者が論文を投稿と同時にarXivにもアップロードしてる。

ThesisHeraldでは、arXivのカテゴリ(例えば、cs.AI=人工知能、cs.LG=機械学習など)を指定して、関連する論文だけを取得できるんだよ。

normalの表情
初心者

毎日配信って言ってたけど、時間は決まってるの?

専門家

デフォルトでは毎日午前9時に配信されるように設定してあるんだけど、これは設定ファイルで変更できる。それに、/notifyコマンドを使えば、手動でいつでも最新論文を取得することもできるんだ。

happyの表情
初心者

自分のペースで確認できるんだね!

2. 会話型検索機能

専門家

次に紹介したいのが、/askコマンドを使った会話型検索機能だ。これがこのBotの目玉機能と言える。

confusedの表情
初心者

会話型検索って、どういうこと?

専門家

普通の検索だと、キーワードを入力して、ヒットした論文のリストが返ってくるよね。でも、会話型検索は違う。自然な質問文で聞けば、AIが関連する論文を探して、その内容を要約して答えてくれるんだ。

surprisedの表情
初心者

え!?論文の内容まで教えてくれるの!?

専門家

そうなんだ。例えば、「Transformerアーキテクチャの最新の改良手法は?」って聞くと、AIが関連する論文を検索して、その内容をまとめて答えてくれる。しかも、どの論文から情報を取ったかも教えてくれるんだよ。

normalの表情
初心者

それって、どうやって実現してるの?

専門家

Claude APIを使ったRAGシステムを実装してるんだ。

confusedの表情
初心者

RAG?また難しい用語が...

専門家

ごめんごめん。RAGは「Retrieval-Augmented Generation」の略で、検索した情報を使ってAIが回答を生成する仕組みなんだ。簡単に言うと、「まずGoogle検索してから、その結果を見ながら答えを書く」っていう感じ。

具体的には、(1) ユーザーの質問を受け取る、(2) arXivとWeb検索で関連論文を探す、(3) 見つけた論文をClaudeに渡す、(4) Claudeが論文の内容を参照しながら回答を生成する、というプロセスだ。

happyの表情
初心者

なるほど!だから最新の論文の内容も答えられるんだね

専門家

その通り!AIだけだと学習データの範囲内でしか答えられないけど、RAGを使えば、最新の論文情報にもアクセスできるんだ。

3. 多言語要約機能

専門家

3つ目の機能が、論文の要約機能だ。/summarizeコマンドで論文のURLを指定すると、その論文の内容をAIが要約してくれる。

normalの表情
初心者

要約って、日本語でもできるの?

専門家

もちろん!7つ以上の言語に対応してるんだ。日本語、英語、韓国語、中国語、スペイン語、フランス語、ドイツ語など。設定ファイルで好きな言語を指定できる。

excitedの表情
初心者

すごい!英語の論文を日本語で要約してもらえるんだ!

専門家

そうなんだ。論文のアブストラクトって、専門用語が多くて読むのに時間がかかるよね。要約機能を使えば、数秒で論文の概要を把握できるから、効率的に論文をスクリーニングできるんだよ。

confusedの表情
初心者

でも、要約って精度はどうなの?間違った内容を要約されたら困るんじゃ...

専門家

良い指摘だね。確かに、AIの要約は100%正確とは限らない。だから、要約はあくまで「論文を読むかどうかの判断材料」として使うのがおすすめだ。興味がある論文は、必ず元の論文を読んで確認することが大切だよ。

それに、ThesisHeraldの要約では、元の論文のURLも一緒に表示されるから、すぐに原文を確認できるようになってるんだ。

技術スタックと実装のポイント

normalの表情
初心者

このBot作るのって難しかった?どんな技術使ってるの?

専門家

主にPython 3.11以上を使って開発してるんだ。Pythonを選んだのは、Discord Bot開発の定番ライブラリ「discord.py」が使えることと、AIやAPIとの連携が簡単だから。

discord.pyでのBot開発

専門家

Discord Botの本体は、discord.pyっていうライブラリで実装してる。これを使うと、スラッシュコマンド、メッセージ送信、スレッド作成なんかが簡単にできるんだ。

confusedの表情
初心者

スラッシュコマンドって何?

専門家

Discordで「/」から始まるコマンドのことだよ。例えば、/askとか/summarizeみたいな。ユーザーが入力しやすいし、自動補完も効くから、使い勝手がいいんだ。

happyの表情
初心者

あ、ゲームのコマンドみたいなやつだ!

専門家

そうそう!discord.pyでは、@app_commands.command()というデコレータを使って、簡単にスラッシュコマンドを定義できる。例えば、こんな感じだ。

@app_commands.command(name="ask", description="Ask a question about research papers")
async def ask_command(interaction: discord.Interaction, question: str):
    # 質問処理のロジック
    await interaction.response.send_message("Searching for papers...")
normalの表情
初心者

async、await?何それ?

専門家

非同期処理っていう仕組みだよ。Discord Botは複数のユーザーからのリクエストを同時に処理する必要があるから、非同期処理を使って効率的に動かすんだ。

arXiv APIとの連携

専門家

論文情報を取得するには、arXiv APIを使ってる。これは無料で使えて、論文のメタデータや本文にアクセスできるんだ。

confusedの表情
初心者

メタデータって何?

専門家

論文のタイトル、著者、アブストラクト、公開日、カテゴリなんかの情報だよ。本文じゃなくて、論文の「情報」って感じかな。

arXiv APIでは、カテゴリやキーワードを指定して検索できる。例えば、「cs.AI」っていうカテゴリで最新の論文を取得したり、「Transformer」っていうキーワードで検索したりできるんだ。

happyの表情
初心者

便利そう!でも、APIって難しくない?

専門家

arXiv APIは、RESTful APIっていう標準的な形式で提供されてて、使いやすいんだ。Pythonのrequestsライブラリを使えば、簡単にデータを取得できる。

ただし、一つ注意点がある。arXiv APIには、1回のリクエストで取得できる論文数に制限があるんだ。だから、大量の論文を取得する場合は、ページネーション(ページ分け)を使って、複数回リクエストする必要があるんだよ。

Anthropic Claude APIの活用

normalの表情
初心者

AIの部分は、Claude使ってるって言ってたよね?

専門家

そう、AnthropicのClaude APIを使ってる。ClaudeはGPTと並ぶ高性能なLLM(大規模言語モデル)で、特に長文の理解と要約が得意なんだ。

confusedの表情
初心者

LLMって何?ChatGPTみたいなやつ?

専門家

そうそう、ChatGPTと同じ種類のAIだよ。LLMは「Large Language Model」の略で、大量のテキストデータを学習した、言語を理解して生成できるAIモデルのことなんだ。

ClaudeのAPIは、プロンプトを送ると、AIが生成したテキストを返してくれる。論文の要約や質問への回答生成に使ってるんだよ。

normalの表情
初心者

API使うのってお金かかるの?

専門家

うん、Claudeの場合、使った分だけ課金される従量課金制なんだ。トークン数(文字数みたいなもの)に応じて料金が決まる。論文の要約だと、1回あたり数円〜数十円くらいかな。

surprisedの表情
初心者

意外と安い!でも、使いすぎたら怖いね...

専門家

そうだね。だから、ThesisHeraldでは、環境変数でAPIキーを管理して、使いたい人だけが設定できるようにしてるんだ。それに、要約機能はオプションだから、APIキーなしでも基本機能(論文配信)は使えるよ。

Ryeによる依存関係管理

normalの表情
初心者

パッケージ管理は何使ってるの?

専門家

Ryeっていう比較的新しいパッケージマネージャーを使ってるんだ。

confusedの表情
初心者

Rye?pip とか poetry じゃダメだったの?

専門家

pip や poetry も使えるんだけど、Ryeは Python のバージョン管理と仮想環境の管理が一つのツールでできて、セットアップが簡単なんだ。特に、複数のPythonプロジェクトを管理してる人には便利だよ。

Ryeを使うと、rye syncっていうコマンド一つで、必要な依存パッケージを全部インストールできる。それに、pyproject.tomlっていうファイルで依存関係を管理できるから、プロジェクトの再現性が高いんだ。

happyの表情
初心者

簡単にセットアップできるのはいいね!

実装で工夫した点

normalの表情
初心者

開発中に工夫したこととか、苦労したことってある?

専門家

いくつかあるよ。まず、論文の配信結果をスレッドで管理するようにしたのは、大きな工夫の一つだ。

スレッドベースの結果表示

専門家

最初は、検索結果や論文リストを普通のメッセージとして送信してたんだけど、複数の論文が一気に流れると、チャンネルが埋まっちゃうんだよね。

confusedの表情
初心者

確かに!メッセージがどんどん流れちゃうと見にくいね

専門家

だから、メインのメッセージに対してスレッドを作って、そこに詳細な結果を投稿するようにしたんだ。例えば、「今日の新着論文:5件」っていうメインメッセージを送って、スレッドの中に各論文の詳細を書く感じ。

happyの表情
初心者

整理されてて見やすそう!

専門家

それに、スレッド内で議論もできるから、チームメンバーで「この論文面白そう!」みたいなコメントも残せるんだよ。

多言語対応の実装

専門家

多言語対応も工夫したポイントだ。最初は日本語だけで要約してたんだけど、英語圏のユーザーや、他の言語を使う研究者もいるから、設定で言語を選べるようにしたんだ。

normalの表情
初心者

どうやって多言語対応したの?

専門家

Claudeに送るプロンプトで、「この論文を日本語で要約してください」みたいに言語を指定するだけだよ。Claudeは多言語に対応してるから、指定した言語で要約を生成してくれる。

設定ファイル(.env)にTRANSLATION_LANGUAGE=jaみたいに書いておけば、自動で指定した言語で要約されるんだ。

surprisedの表情
初心者

めっちゃ簡単!AIすごい!

エラーハンドリングとリトライ機能

専門家

API連携では、エラーハンドリングもしっかり実装する必要があるんだ。ネットワークが不安定だったり、APIの制限に引っかかったりすることがあるからね。

confusedの表情
初心者

API の制限って何?

専門家

多くのAPIには、「1分間に何回までリクエストできる」みたいなレート制限があるんだ。これを超えると、一時的にアクセスできなくなっちゃう。

normalの表情
初心者

えー、それって困るね

専門家

だから、エラーが起きたら自動でリトライする機能を実装してるんだ。一定時間待ってから、もう一度リクエストを送る感じ。それでもダメなら、ユーザーにエラーメッセージを表示するようにしてる。

セットアップ方法

normalの表情
初心者

このBot、自分でも使ってみたい!どうやってセットアップするの?

専門家

セットアップは意外と簡単だよ。大きく分けて、(1) Discord Botの作成、(2) プロジェクトのクローンとインストール、(3) 環境変数の設定、(4) Botの起動、という4ステップだ。

1. Discord Botの作成

専門家

まず、Discord Developer Portalっていうサイトで、Botを作成する必要があるんだ。

confusedの表情
初心者

Developer Portal?難しそう...

専門家

大丈夫、手順通りにやれば簡単だよ。

  1. Discord Developer Portal(https://discord.com/developers/applications)にアクセス
  2. 「New Application」ボタンをクリック
  3. Botの名前を入力
  4. 左メニューから「Bot」を選択
  5. 「Add Bot」をクリック
  6. 「Token」をコピー(これが重要!)

このTokenが、Botを動かすための「鍵」みたいなものなんだ。

normalの表情
初心者

Tokenって、誰かに見られたらダメなやつ?

専門家

その通り!Tokenが漏れると、他の人があなたのBotを勝手に操作できちゃう。だから、絶対にGitHubとかに公開しちゃダメだよ。

2. プロジェクトのクローンとインストール

専門家

次に、GitHubからプロジェクトをクローンして、必要なパッケージをインストールする。

git clone https://github.com/sserada/ThesisHerald.git
cd ThesisHerald
rye sync

rye syncで、必要なPythonパッケージが全部インストールされるんだ。

happyの表情
初心者

一行でインストールできるんだ!便利!

3. 環境変数の設定

専門家

次に、.envファイルを作って、設定を書き込む。

cp .env.example .env

.env.exampleっていうサンプルファイルをコピーして、.envを作る感じだね。

normalの表情
初心者

その中に、さっきのTokenを書くの?

専門家

そうそう!.envファイルには、こんな感じで設定を書くんだ。

DISCORD_BOT_TOKEN=your_discord_bot_token_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
TRANSLATION_LANGUAGE=ja
ARXIV_CATEGORIES=cs.AI,cs.LG

DISCORD_BOT_TOKENには、さっきコピーしたTokenを貼り付ける。ANTHROPIC_API_KEYは、AI機能を使いたい場合だけ必要だよ。

confusedの表情
初心者

Anthropic API Keyって、どこで手に入るの?

専門家

Anthropicの公式サイト(https://www.anthropic.com/)でアカウントを作って、API Keyを発行できる。ただし、クレジットカードの登録が必要で、使った分だけ課金される仕組みだよ。

もし、AI機能を使わないなら、ANTHROPIC_API_KEYは設定しなくてもOK。基本的な論文配信機能は使えるからね。

4. Botの起動

専門家

最後に、Botを起動するだけだ。

rye run python -m thesisherald.main

これで、Botが起動して、Discordサーバーに接続されるんだ。

excitedの表情
初心者

わくわく!ちゃんと動くかな?

専門家

Botが正常に起動すると、ターミナルに「Logged in as ThesisHerald#1234」みたいなメッセージが表示されるはずだよ。Discordサーバーでも、Botがオンライン状態になってるのが確認できる。

使い方の例

normalの表情
初心者

実際にどうやって使うの?コマンドとか教えて!

専門家

いくつか基本的なコマンドを紹介するね。

毎日の論文配信

専門家

Botを起動すると、デフォルトで毎朝9時に新着論文が自動配信される。特に操作は必要ないよ。

happyの表情
初心者

楽ちん!毎朝起きたら論文が届いてるんだ

専門家

そうそう!手動で最新論文を取得したい場合は、/notifyコマンドを使う。

/notify

これで、即座に最新論文が配信されるんだ。

会話型検索

専門家

/askコマンドで、論文について質問できる。

/ask Transformerの最新の改良手法は?

こんな感じで自然な質問文を入力すると、AIが関連論文を検索して、要約して答えてくれるんだよ。

surprisedの表情
初心者

すごい!普通に話しかけるだけでいいんだ!

論文の要約

専門家

/summarizeコマンドで、特定の論文を要約できる。

/summarize https://arxiv.org/abs/2304.12345

arXivの論文URLを指定すると、数秒で要約が生成されるんだ。

normalの表情
初心者

日本語で要約されるの?

専門家

そう、.envファイルで設定した言語で要約される。日本語ならTRANSLATION_LANGUAGE=ja、英語ならTRANSLATION_LANGUAGE=enって設定すればOKだよ。

今後の展望

normalの表情
初心者

このBotって、今後どう進化させるつもり?

専門家

いくつか追加したい機能があるんだ。まず、週次の研究ダイジェスト機能。毎週末に、その週に出た論文の中で特に注目すべきものをまとめて配信する感じ。

happyの表情
初心者

週末にまとめて確認できるんだ!忙しい人に良さそう

専門家

次に、論文の比較機能も追加したいと思ってる。複数の論文を比較して、「この手法とあの手法、何が違うの?」みたいな質問に答えられるようにしたい。

それから、検索フィルタリングの強化も考えてる。著者名、会議名、公開日の範囲なんかで絞り込めるようにしたいんだ。

normalの表情
初心者

他には?

専門家

パフォーマンスモニタリング機能も追加したいね。どのコマンドが一番使われてるか、平均応答時間はどれくらいかとか、使用状況を把握できるようにしたい。

あとは、他の論文アーカイブへの対応も検討してる。今はarXivだけだけど、PubMed(医学系)やbioRxiv(生物学系)にも対応できたら、もっと幅広い分野の研究者に使ってもらえると思うんだ。

excitedの表情
初心者

どんどん便利になりそう!

開発を通じて学んだこと

専門家

このプロジェクトを通じて、いくつか重要なことを学んだんだ。

normalの表情
初心者

どんなこと?

専門家

まず、APIとの連携の重要性だね。Discord API、arXiv API、Claude API、それぞれ使い方が違うから、ドキュメントをちゃんと読むことが大切だって実感した。

次に、非同期処理の難しさ。複数のユーザーからのリクエストを同時に処理するには、async/awaitをちゃんと理解する必要がある。最初は同期処理で書いてたんだけど、パフォーマンスが悪くて、非同期に書き直したんだ。

confusedの表情
初心者

書き直すの大変だったんじゃない?

専門家

うん、結構大変だった。でも、書き直したおかげで、複数のコマンドを同時に実行しても、サクサク動くようになったんだよ。

あとは、エラーハンドリングの大切さも学んだ。本番環境では、予想外のエラーがたくさん起きる。ネットワークエラー、APIのレート制限、不正な入力...全部に対応しないと、ユーザーが困っちゃうからね。

happyの表情
初心者

たくさん学べたんだね!

専門家

それから、ドキュメントを書くことの重要性も実感した。自分だけが使うならいいけど、他の人にも使ってもらいたいなら、README.mdやセットアップ手順をちゃんと書かないといけない。

オープンソースプロジェクトとして公開することで、他の開発者からフィードバックをもらえるのも良い経験になったよ。

まとめ

専門家

ThesisHeraldは、研究者のための論文配信・要約Botとして、arXiv APIとAIを活用して開発した。自動配信、会話型検索、多言語要約という3つの主要機能によって、効率的に最新論文をキャッチアップできるようになってるんだ。

技術的には、discord.pyでのBot開発、arXiv APIとの連携、Claude APIを使ったRAGシステムの実装など、実践的なスキルを身につけることができた。

normalの表情
初心者

このBot、誰でも使えるの?

専門家

もちろん!GitHubで公開してるから、誰でも自由に使える。ライセンスはMITだから、商用利用も含めて自由に使ってOKだよ。

研究室やチームで論文情報を共有したい人、最新の研究動向を追いかけたい人には、特におすすめだ。セットアップも簡単だから、ぜひ試してみてほしい。

excitedの表情
初心者

面白そう!私も使ってみる!

専門家

ありがとう!バグ報告や機能リクエストも大歓迎だから、GitHubのIssueで気軽に連絡してね。みんなで育てていけるプロジェクトにしていきたいと思ってるんだ。

参考リンク

← ブログ一覧に戻る