Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
1年前の日記を要約するツールをローカルLLM&自作MCPサーバーで作った話
Search
soukouki
May 10, 2025
Technology
0
360
1年前の日記を要約するツールをローカルLLM&自作MCPサーバーで作った話
2025-05-10 Zli 大LT 2025 春で発表したスライドです。
soukouki
May 10, 2025
Tweet
Share
More Decks by soukouki
See All by soukouki
10分で学ぶ すてきなモナド
soukouki
1
89
Misskey自鯖を建ててみた
soukouki
1
66
自作Cコンパイラ 8時間の奮闘
soukouki
0
1.7k
定理証明支援系Coq(セキュリティキャンプLT会)
soukouki
1
240
Coqで選択公理を形式化してみた
soukouki
0
460
「プログラミング」と「数学」の関係 〜カリー・ハワード同系対応と定理証明支援系Coq〜
soukouki
1
330
型クラスと依存型のカルパッチョ、代数的構造を添えて
soukouki
2
600
Coqのコントリビューターになった話
soukouki
0
230
次に流行る※プログラミング言語「Lean」
soukouki
4
3.6k
Other Decks in Technology
See All in Technology
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
2
1k
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
240
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
430
モダンデータスタックの理想と現実の間で~1.3億人Vポイントデータ基盤の現在地とこれから~
taromatsui_cccmkhd
1
190
Database イノベーショントークを振り返る/reinvent-2025-database-innovation-talk-recap
emiki
0
250
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
530
.NET 10の概要
tomokusaba
0
130
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
730
さくらのクラウド開発ふりかえり2025
kazeburo
2
160
Agent Skillsがハーネスの垣根を超える日
gotalab555
5
2.2k
re:Invent2025 3つの Frontier Agents を紹介 / introducing-3-frontier-agents
tomoki10
0
330
ActiveJobUpdates
igaiga
1
280
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
400
Test your architecture with Archunit
thirion
1
2.1k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
57
37k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Designing for Performance
lara
610
69k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
180
Fireside Chat
paigeccino
41
3.8k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
65
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Designing for Timeless Needs
cassininazir
0
87
Transcript
1 年前の日記を要約するツールをローカル LLM& 自作MCP サーバーで作った話 Zli「大LT 2025 春」 2025-05-10 風邪を引きました。
スライドが25枚あるので巻きでいきます。 1
自己紹介 sou7といいます 学部5年生です 好きな言語はRubyと Rocq ActivityPub/Misskey : @
[email protected]
Twitter: @sou7_
_ _ Obsidian: ob.sou7.io 2
みなさまに大切なお知らせがあります 3
みんな大好きCoq の 4
名前がRocq に変わりました 5
Obsidian で日記を毎日書き始めてから約1 年 => 去年の日記をいい感じに振り返られるようにしたい!! 6
ちょうどよい存在感 簡単に実現する案として、次の2つを考えました。 1年前の日記へのリンクを自動生成する。 => リンクがあるだけだと、結局開くのが面倒で見返さなくなって しまいます。 1年前の日記を埋め込む。 Obsidianにはノートを埋め込む機能があり、去年の日記の内容を今 の日記に展開して埋め込むことが出来ます。 しかし、埋め込むと画面上での扱いが大きすぎて、逆に不便になっ
てしまいます。 7
良い解決策はないかな・・・ そうだ、LLMを使おう! 8
LLM を使って要約するシステムを作る案 1年前の日記を1行に要約することで、 リンクを開きにいかなくても1年前に何をしていたかを振り返ら れる。 埋め込みほど画面スペースを取らない。 と、いい事ずくめです! 9
ノートを読み込ませ るために 最初に考えたシステムは、 LLMに直接去年の日記を渡し て、要約するというものでし た。しかし、日記には埋め込 みリンクを使って違う記事を 参照していることがあり、去 年の日付のノートを直接渡す だけではうまく要約できませ
ん。 10
MCP そこでfjm2uくんに相談したところ、MCPというものを教えてもらい ました。 MCPはModel Context Protocolの略で、LLMと外部のデータやツール を連携させるためのプロトコルです。MCPを使うことで、LLMが自律 的に必要な情報を取得してくれます。 これを使ってObsidianのノートを読み込ませることにしました。 11
どこでLLM を動かすのか OpenAIやGemini, Cloudeに課金するのは面倒くさい。手元で動かせ ればいいなぁ・・・どこかにLLMを動かせるだけのGPUは無いかな ぁ・・・ 自宅にPCはあるけれど、NvidiaのGPUは高くて買ってない し・・・。 12
あった! 自宅PCにはRyzen 5 8600GというCPUを載せています。これには iGPU(CPUに内蔵されたGPU)が搭載されています。 GPU分の価格は6000円程度で、GPUとしては破格の安さです。 13
LLM を動かすための環境を整える またfjm2uくんに相談したところ、ローカルLLMを実用的に動かすた めには高いレイヤのAPIを使うと便利と教えてもらい、LM Studioを 使うことになりました。 先にOllamaの環境を整えて動かしてみたのですが、ローカルLLMとして高性能なPhi-4を使ってMCPを呼び出そうとすると、エラーが出てしまいました。どうやらOllamaを 使ってMCPを呼び出すには特定のモデルしか使えないようで、Phi-4はその対象外でした。 そのため、LM Studioを使うことになりました。
14
ローカルLLM の宿命 ローカルLLMとクラウドのLLMの一番大きな違いはパラメータ数で す。パラメータ数が多いほどLLMは賢くなり、少ないほど頭が悪くな ります。 ChatGPT, Gemini, Claudeのような商用のモデルは、大きなパラメー タ数のモデルを、データセンターの高性能なGPUでぶん回していま す。
それに対して、ローカルLLMは家庭用の貧弱なGPUで動かすため、 VRAM(GPU内で利用できるメモリ)の容量による制約を受けます。 今回使うiGPUでは、システムメモリの一部をVRAMとして使うことになります。設定できる中で最大の16GBを割り当てています。VRAM容量を16GB積んだGPUというと、 RTX 4060Ti 16GBやRTX 5060などになります。5060だと8万以上するので、大分高いです。もちろん今回使う760Mより何倍も性能は高いですが... 15
パラメータ数が少ないと起きること プロンプトで与えた手順を守れない。 「日本語で説明してください」と言っても英語で説明してくる。 ひどいときにはJSONで説明してくる。 「 read ツールで LLM を読み込んでください」と書くと LLM
とい うツールを呼び出そうとしてエラーが出る。 MCPツールを(そもそも)呼び出せない。 これらに対処しながらプロンプト(モデルへ命令を与える文章)を調整 する必要があります。 16
既存のMCP サーバーではうまく動かない Obsidianを読み込むための既存のMCPサーバーでは、以下の問題が ありました。 コマンドが多く、貧弱なGPUではコマンドの読み込みに時間がか かってしまう。 ノートを開くための手順が複雑で、手順通り開けない。 ツールに余計なオプションがあり、うまく指定できない。 => ローカルLLMに特化したMCPサーバーも自作したほうが良さそ
う。 17
MCP サーバー自作 MCPサーバーはたいていPythonかTypeScriptで書かれていますが、 諸事情によりRubyで書くことにしました。幸運にも mcp-rb という MCPサーバーを書くためのライブラリがありました。 今回のために作成した obsidian_fetch というMCPサーバーは、gem
として公開しています。皆さん使ってみてください。 18
プロンプトの与え方 普通のLLMの呼び出しでは、最初に全ての手順を与えることが多いで す。しかし、パラメータ数の小さい今回のモデルでは、手順を無視し てしまいます。 そこで、手順を分けたうえで、LLMの呼び出しを複数回のターンに分 けることにしました。チャット形式と同じように、AIとの過去のやり 取りをスレッドに保存し、手順を分けて与えることにしました。 ここで言っている「スレッド」というのは、LLM用語のスレッドを指します。例えばチャットアプリのスレッドと同じ概念だと思うと良いです 19
ターンの分け方( メインフェイズ) 次の3つのターンに分けてLLMを呼び出しています。 ターン1でObsidianから情報を収集 ターン2で長めの要約 ターン3で短めの要約(この短い要約を今回使用します) 今回の用途で難しい点として、1年前の日記が存在しない日の処理があります。この場合、前後の日付の日記から当日に何があったのかを推測する必要があります。この処理 はハルシネーションを起こしやすく、何度も対応策を考えることになりました。 20
頓珍漢な要約 しかし、これだけやってもLLMは頓珍漢な要約をしてくることがあり ます。 全然違う記事を要約してくる 違う日付の日記を要約してくる 違う日のイベントをその日に起きたと言い張る 「これは例です」って書いたやつに引っ張られて謎のイベントを 生成する 要約を諦める 21
LLM に出力をチェックさせる もう一度LLMを呼び出して、要約をチェックさせることにしました。 しかし、単純に同じスレッドでもう一度質問をすると、1度ハルシネ ーション(起きていないことを起きたと言い張ること)を起こしたLLM は、ハルシネーションの内容を真実だと思い込んでしまいます。 そこで、異なるスレッドで要約をチェックさせることにしました。 異なるスレッドで実行するだけだと、異なるページに書いてある情報を素に書いた部分でチェックに失敗することがあります。そのため、出典となった記事のリストを、メイ ンスレッドで生成してテストスレッドで読み込むようにしました。この記事のリストについても、記事のリストに対して説明を加えると、加えた説明でハルシネーションが続 いてしまうこともあり、単なるリストで渡すようにしています。
22
デモ 去年の5月10日の日記はこちらです。3つの記事へのリンクだけが書 いてありました。 [[コンピュータ言語論]] [[1000時間の法則]] [[温泉を探せるサイト]] 23
要約結果 長い要約 - コンピュータ言語論に関する学習と評価が中心でした。 - 高階関数やオブジェクト指向などを深く理解し、形式的意味論の重要性を学びました。 - 構文解析やプロトタイプベース言語についても触れられ、それがオブジェクト指向の理解に役立ちました。 - ランダムアクセスマシンを用いた形式的意味論の例や最小不動点、ホーアの論理の導入も行われています。
短い要約 コンピュータ言語論と形式的意味論を学ぶ中心の一日でした。 評価 : 80点くらい (コンピュータ言語論のどの分野をこの日に学んだのかまで書いてほ しかった) 24
まとめ 1年前の日記を要約するツールを作りました。 MCPを使うことで、LLMとObsidianを連携させることができま した。 ローカルLLMを使うことで、クラウドサービスに依存せずにLLM を使うことができました。 ローカルで気軽に動かせるモデル(今回使ったのはPhi-4)は、そん な頭が良くはないです。(と言っても1年前のChatGPTの無料版く らいは賢い) プロンプトエンジニアリングが大変でした。
25