meGPT - upload an author's content into an LLM について
meGPT は、著者の公開コンテンツを OKF ナレッジバンドルと MCP サーバーに変換するリポジトリです。出典を引用しながら著者の語り口で回答する LLM アシスタントの構築を目的としており、例として virtual_adrianco のバンドルを含みます。
主な機能
- 01記事、ポッドキャスト、動画、書籍などの処理
- 02元の情報源 URL を含む OKF ドキュメントの生成
- 03検索、ドキュメント取得、トピック一覧を提供する MCP サーバー
- 04YouTube の動画、プレイリスト、チャンネルの一括処理
- 05質問応答とトピック要約用のプロンプト
活用シーン
- 01著者の公開作品から出典付きの Q&A アシスタントを構築
- 02ポッドキャストや動画の文字起こしを検索可能なバンドルに整理
- 03複数の情報源にまたがる著者の見解をトピックごとに要約
MCP 対応
mcp_server_v2.py は OKF ドキュメントを MCP サーバーとして公開し、検索、ドキュメント取得、種類別の閲覧、トピック一覧、質問応答および要約用プロンプトを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
meGPT - 著者のコンテンツを LLM にアップロード
私はこれまでのキャリアを通じて制作・発表してきた20年分の公開コンテンツを持っています。自分の「声」で、私の意見に関する質問に答えたり、要約を生成したりするように訓練された LLM が欲しいと思っています。現時点では、ペルソナを構築している企業をいくつか見つけ、soopra.ai を試してみました。この分野の開発と競争を促すため、公開コンテンツと出典への参照をこのリポジトリにまとめました。
私自身のコンテンツは authors/virtual_adrianco に保存、またはリンクされており、次のものが含まれています。
- 出版済みの書籍4冊(うち2冊は PDF を提供)、書籍の序文約10件、ブログ記事約100件(テキスト)
- Twitter のアーカイブ(2008~2022年、会話のテキスト)
- Mastodon.social - 2021年~現在 https://mastodon.social/@adrianco (RSS は https://mastodon.social/@adrianco.rss)
- Github プロジェクト(コード)
- https://adrianco.medium.com のブログ記事をテキストとして抽出し、authors/virtual_adrianco/medium_posts に保存(抽出スクリプト付き)
- https://perfcap.blogspot.com のブログ記事をテキストとして抽出し、authors/virtual_adrianco/blogger_percap_posts に保存(抽出スクリプト付き)
- プレゼンテーション資料約100件(画像)。主なものはこちら:https://github.com/adrianco/slides/tree/master/Greatest%20Hits
- ポッドキャスト約20件(音声での会話。Q&A の訓練素材として適しているはずです)
- 講演やインタビューの動画135本以上(音声/動画/YouTube の個別動画、再生リスト、チャンネル全体)
別の著者がこのリポジトリを出発点として使いたい場合は、これをクローンし、authors の下に自分のコンテンツ用ディレクトリを追加してください。他の人が訓練データセットとして自由に使えるようにコンテンツを提供したい場合は、プルリクエストを送ってください。ここに追加します。code ディレクトリ内のスクリプトは、アカウント所有者がダウンロードする必要のある Twitter または Medium のアーカイブから抽出するなど、著者のコンテンツを事前処理するのに役立ちます。
クリエイティブ・コモンズ - 表示、継承。meGPT のコンセプトを発展させるための訓練セットとして、誰でも使用できることを明示的に許可します。公開済みコンテンツを参照しながら、著者本人のように質問に答えられるチャットボットを作成する目的であれば、どの著者/講演者/専門家も自由に利用できます。私自身のビルドは virtual_adrianco と名付けました。クラウドコンピューティング、持続可能性、パフォーマンスツール、マイクロサービス、イノベーションの加速、Wardley マッピング、オープンソース、カオスエンジニアリング、レジリエンス、Sun Microsystems、Netflix、AWS などについての意見を扱います。開発されたモデルは喜んで共有します。これを収益化する必要はありません。私は半引退しており、このコンテンツはすでに十分に収益化できています。もう大企業では働いていません。
私は Python プログラマーではありません
このリポジトリ内のコードはすべて、短いプロンプトをもとに、ChatGPT 4 の無料版または Cursor Claude Sonnet3.7 が最初に作成したもので、以降の編集はなく、ここでの私の作業時間も数分ずつです。Python を読んでおおむね理解することはできますが、経験豊富な Python プログラマーではありません。該当する Issue で、ChatGPT がコードを生成したチャットスレッドへの公開リンクを確認してください。Cursor に移行した際には、各ファイルの冒頭にあるブロックコメントにコンテキストが含まれるようになりました。これは、シンプルなコードを書くための非常に手軽で簡単な方法です。プロジェクト全体のコンテキスト管理の方法がはるかに優れているため、開発を Cursor に移行しました。
OKF Bundle Pipeline(新規)
このブランチでは、著者の生のコンテンツを、構造化され、出典を引用できるナレッジバンドル、つまり生のソースと LLM の間にある「Wiki レイヤー」に変換する、完全な Open Knowledge Format(OKF) パイプラインを追加します。
OKF とは?
OKF ドキュメントは、YAML フロントマターを含む Markdown ファイルです。各ドキュメントには、以下の項目があります。
type:コンテンツの種類(ポッドキャストインタビュー、YouTube トーク、記事、書籍、トピック)title、description:人が読めるメタデータresource:元のソース URL(すべての回答にソースを引用させるためのものです)tags:検索可能なトピックtimestamp:公開日
各ドキュメントの Concept ID はファイルパスです(例:podcasts/schedulers-with-adrian-cockcroft)。
クイックスタート
git clone https://github.com/adrianco/megpt.git
cd megpt
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Set your API key for LLM enrichment (Q&A extraction, topic synthesis)
export ANTHROPIC_API_KEY=sk-ant-...
# Build the full OKF bundle for an author
python build_okf.py virtual_adrianco --author-display "Adrian Cockcroft"
# Build specific content types
python build_okf.py virtual_adrianco podcast --whisper-model tiny
python build_okf.py virtual_adrianco youtube
python build_okf.py virtual_adrianco story
# Process local file archives (Medium/Blogger posts)
python batch_local_files.py authors/virtual_adrianco/medium_adrianco okf/virtual_adrianco/posts
python batch_local_files.py authors/virtual_adrianco/blogger_perfcap_posts okf/virtual_adrianco/posts
# Generate synthesized topic pages (requires ANTHROPIC_API_KEY)
python okf_synthesizer.py virtual_adrianco
# Start the MCP server (for Claude Desktop / Cursor integration)
python mcp_server_v2.py virtual_adrianco
OKF バンドルの内容(virtual_adrianco)
okf/virtual_adrianco/ にある事前構築済みバンドルには、466 件の OKF ドキュメントが含まれています。
| 種類 | 件数 | ソース |
|---|---|---|
| YouTube トーク | 104 | yt-dlp による字幕の抽出(動画のダウンロードなし) |
| 記事/投稿 | 342 | Medium(64)、Blogger(264)、ウェブ記事(14) |
| ポッドキャストインタビュー | 20 | Whisper による文字起こしと Simplecast/Libsyn/SoundCloud の解決 |
| 書籍 | 2 | PDF の抽出(選択したページ範囲) |
パイプラインのアーキテクチャ
published_content_v2.csv → build_okf.py → processors/
├── podcast_processor_v2.py (audio → transcript → OKF)
├── youtube_processor_v2.py (captions → OKF)
├── story_processor_v2.py (HTML/text → OKF)
└── book_processor_v2.py (PDF → OKF)
↓
okf/<author>/
├── podcasts/
├── talks/
├── posts/
├── books/
└── topics/ ← okf_synthesizer.py
↓
mcp_server_v2.py → Claude Desktop / Cursor
コンテンツマニフェスト(v2 CSV 形式)
拡張マニフェスト形式(published_content_v2.csv)では、SlidesURL 列と Tags 列が追加されています。
Kind,SubKind,What,Where,Published,URL,SlidesURL,Tags
podcast,episode,Scheduling,Software Engineering Daily,2016,https://...,, scheduling,distributed-systems
youtube,,GOTO 2018 Talk,GOTO Conf,2018,https://...,https://slides.pdf,chaos-engineering
book,"1-50,100-150",My Book,Publisher,2024,https://...,, architecture
引用の要件
すべての OKF ドキュメントには、元のソース URLを含む resource フィールドがあり、すべてのポッドキャスト/トークには ## Sources セクションがあります。MCP サーバーは、すべての検索結果にこれらの引用を含めるため、LLM によるすべての回答の出典を元のコンテンツまでたどれます。
MCP サーバー v2(OKF ネイティブ)
新しい mcp_server_v2.py は OKF ドキュメントを直接読み込み、以下を提供します。
search(query):ソースの引用付きで、466 件すべてのドキュメントをキーワード検索しますget_document(id):任意の OKF ドキュメントの全文を取得しますlist_by_type(type):コンテンツの種類別に閲覧しますget_topics():相互リンクされた統合トピックページの一覧を取得しますanswer_question(question):ソースのコンテキストを含む事前構築済みプロンプトsummarize_topic(topic):著者の全著作を対象とした統合プロンプト
// Claude Desktop config (~/.claude/claude_desktop_config.json)
{
"mcpServers": {
"megpt-adrianco": {
"command": "python",
"args": ["/path/to/megpt/mcp_server_v2.py", "virtual_adrianco"]
}
}
}
YouTube の処理
YouTube プロセッサーが強化され、さまざまな種類の YouTube コンテンツを自動的に処理できるようになりました。
対応する YouTube URL の種類
- 個別の動画:
https://www.youtube.com/watch?v=VIDEO_ID - 再生リスト:
https://www.youtube.com/playlist?list=PLAYLIST_ID - チャンネル全体:
https://www.youtube.com/@username/videosまたはhttps://www.youtube.com/c/channelname/videos
処理機能
- 自動判定:URL が個別の動画、再生リスト、チャンネルのいずれかをプロセッサーが自動的に判定します
- 一括処理:チャンネルと再生リストを個別の動画エントリーに自動的に展開します
- 同意ページへの対応:YouTube の「続行する前に」同意ページを自動的に処理します
- 堅牢な抽出:動画のメタデータや ID を抽出するための複数のフォールバック方法を備えています
- MCP 互換性:すべての動画は、MCP 互換の個別の JSON ファイルとして保存されます
YouTube のダウンロード
YouTube には厳しいボット検出対策があり、自動ダウンロードが難しい場合があります。このスクリプトは、YouTube コンテンツを処理するために複数の方法を試みます。
- まず、ページの HTML から動画のメタデータを直接抽出します
- 同意ページがある場合は、同意フォームを自動的に送信します
- 複数の正規表現パターンを使って、ページのソースから動画 ID を見つけます
- 標準的な方法で失敗した場合は、別の抽出方法に切り替えます
- 個別の動画を抽出できない場合は、チャンネルのプレースホルダーエントリーを作成します
こうした対策を講じても、YouTube のボット検出は高度なため、一部のコンテンツは自動処理に失敗する場合があります。その場合、プロセッサーは元の URL を参照するプレースホルダーエントリーを作成します。
最良の結果を得るには、次の方法をお試しください。
- 別のネットワークを使う(IP アドレスによっては、ボット検出が作動しやすい場合があります)
- VPN を使う
- モバイルネットワークから処理する(制限が少ないことがよくあります)
- YouTube のシステムの制限が緩やかな、利用の少ない時間帯に処理する
使用例
published_content.csv には、以下のいずれかの YouTube URL タイプを含めることができます。
Kind,SubKind,What,Where,Published,URL
youtube,,Individual Tech Talk,Conference Name,2024,https://www.youtube.com/watch?v=VIDEO_ID
youtube,,My Tech Talks Playlist,Various Conferences,2024,https://www.youtube.com/playlist?list=PLAYLIST_ID
youtube,,My Complete YouTube Channel,Personal Channel,2024,https://www.youtube.com/@username/videos
プロセッサーはプレイリストやチャンネルを個別の動画エントリーに自動的に展開し、MCP サーバーを通じてすべてのコンテンツを検索・利用できるようにします。
コンテンツ処理の強化
コンテンツ処理システムが大幅に強化され、複雑なコンテンツ構造やアーカイブを処理できるようになりました。
ファイル種別の処理
CSV 内の、複数のコンテンツファイルを含むディレクトリを指す「file」種別のエントリーを処理できるようになりました。
Kind,SubKind,What,Where,Published,URL
file,,Lots of blog post text extracted from medium archive,Medium Archive,2025,./authors/virtual_adrianco/medium_adrianco/
file,,Lots of blog post text extracted from blogger archive,Blogger Archive,2014,./authors/virtual_adrianco/blogger_perfcap_posts/
対応するアーカイブ形式
- Medium アーカイブ:[URL] https://... 形式を自動的に検出し、個々の投稿を抽出します
- Blogger アーカイブ:投稿の抽出に
Title: ...\nURL: https://...形式を処理します - 一般的なテキストファイル:URL 抽出機能を使用して、あらゆるテキストファイルを処理します
処理機能
- URL の自動抽出:テキストファイル内のさまざまな形式の URL を検出します
- コンテンツ分類:適切なサブ種別(medium_post、blogger_post など)を割り当てます
- 概要の生成:内容が十分なコンテンツの概要を自動的に作成します
- 重複排除:同じコンテンツが複数回処理されるのを防ぎます
- エラー処理:包括的なログ記録による堅牢な処理を実現します
対応するコンテンツタイプ
- YouTube:個別の動画、プレイリスト、チャンネル全体(135 項目)
- ポッドキャスト:文字起こしと概要付きのエピソード(52 項目)
- 書籍:テキストと概要を抽出した PDF(10 項目)
- ストーリー:添付ファイルを任意で含められる物語コンテンツ(18 項目)
- ファイル:ブログアーカイブ、プレゼンテーション、ドキュメント(394 項目)
- InfoQ 動画:技術プレゼンテーション(2 項目)
合計:611 件のコンテンツ項目を処理し、MCP サーバーから利用できます。
MCP サーバーとの統合
このリポジトリには、コンテンツコレクションを AI アプリケーションから利用できるようにする、包括的な Model Context Protocol(MCP)サーバーが含まれるようになりました。MCP サーバーは、処理済みのコンテンツを AI から利用可能なナレッジベースに変換します。
現在のコンテンツ統計(virtual_adrianco)
- 合計項目数:611 件のコンテンツ
- YouTube 動画:135 件(個別の動画、プレイリスト、チャンネル)
- ファイルアーカイブ:394 件(Medium の投稿、Blogger の投稿、プレゼンテーション)
- ポッドキャストのエピソード:52 件(文字起こしと概要付き)
- ストーリー:18 件(物語コンテンツ)
- 書籍:10 件(テキストと概要を抽出した PDF)
- InfoQ 動画:2 件(技術プレゼンテーション)
MCP サーバーの機能
- コンテンツ検索:タイトル、タグ、ソースを横断するセマンティック検索
- コンテンツのフィルタリング:タイプ、タグ、メタデータによるフィルタリング
- 分析:コレクションの統計情報とコンテンツ分析
- AI 連携:Claude Desktop、Cursor、カスタム AI エージェントに対応
- 複数のトランスポート:STDIO、HTTP、SSE に対応
使用方法
# Start MCP server (default STDIO mode for Claude Desktop)
python mcp_server.py --author virtual_adrianco
# Start HTTP server for web applications
python mcp_server.py --author virtual_adrianco --transport streamable-http --port 8080
# Generate MCP resources for any author
python create_mcp.py virtual_adrianco
詳細なテストおよび統合例については、mcp_testing/ ディレクトリを参照してください。
著者のビルド
このリポジトリを使用するには、ローカルディスクにクローンして Python 環境をセットアップし、著者を指定して build.py スクリプトを実行します。スクリプトは、その著者の公開コンテンツテーブルを順に確認し、各行を処理します。ビルドスクリプトは downloads/ ディレクトリを作成し、その中に state.json ファイルを作成します。このファイルには処理が成功した手順が記録されるため、build.py を増分実行しても同じダウンロードが再実行されません。データの各種別には、processors ディレクトリ内に対応するスクリプトが必要です。
git clone https://github.com/adrianco/megpt.git
cd megpt
python3 -m venv venv
Windows:
venv\Scripts\activate
macOS/Linux:
source venv/bin/activate
pip install -r requirements.txt
開発中に追加パッケージをインストールした場合は、次のコマンドで requirements を再生成してください。
pip freeze > requirements.txt
ビルドスクリプトを実行します。
Usage: build.py <author>
python build.py virtual_adrianco
テスト目的で、任意の URL から単一種別のデータを処理し、state.json ファイルを更新せずに downloads に出力します。
Usage: python process.py <author> <Kind> <SubKind> <URL>
RAG ベースの LLM ペルソナの作成
RAG をより効果的に機能させる方法の詳細については、こちらのプレゼンテーションをご覧ください https://github.com/datastaxdevs/conference-2024-devoxx/ soopra.ai を使った実験については、こちらの issue をご覧ください https://github.com/adrianco/meGPT/issues/11 - 現在、このコンテンツの一部を使ってトレーニング済みです。https://app.soopra.ai/Cockcroft/chat でお試しください。
現在の機能状況
Build.py と process.py は正常に動作しているようです。 book_processor.py は書籍の PDF を正しくダウンロードし、ページ範囲を抽出します。これにより、関連するセクションを特定したり、複数の著者を分離したりできます。 ストーリーをダウンロードするたびに、個別の抽出処理が必要になります。The New Stack(thenewstack.io)に適切な div 名が Subkind として追加され、ストーリー形式のコンテンツのテキストを正しくダウンロードできるようになりました。 Medium のブログは、著者がリクエストできるアーカイブからダウンロードされ、著者の medium_posts ディレクトリにあるテキストファイルとして処理されます。 Blogger.com のアーカイブは、元のストーリーへの URL を含むテキストファイルに処理されます。 Twitter のアーカイブは、アーカイブから会話を抽出するように処理されます。複数のツイートからなる会話に含まれる公開ツイート以外はすべて除外されます。使用したアーカイブは、Twitter から X への名称変更前に保存されたものです。
メモ
私はしばらく前からコンテンツを集めており、参照テーブルと Medium のダウンロード内容は折に触れて更新します https://github.com/adrianco/meGPT/blob/main/authors/virtual_adrianco/published_content.csv
YouTube 動画には、動画内の位置を示すインデックスオフセット付きのトランスクリプトがありますが、品質は良くありません。また、動画の所有者だけが API 経由で読み取れます。pytube で動画をダウンロードし、whisper で処理して、複数の話者がいる場合は著者が話している箇所を特定した、より精選されたトランスクリプトを生成するほうが簡単です。
Twitter アーカイブ - 生のアーカイブファイルは 100MB を超えており、github に置くには大きすぎました。extract_conversations スクリプトを使って、会話に含まれるツイートだけを取り出しました。これにより、さらに分析して質問と回答を見つけられます。この処理用のコードは ChatGPT が作成したもので、初回から動作しましたが、出力に問題があれば生のツイートを共有できます。issue を作成してください。
Mastodon アーカイブ - RSS フィードとして利用できます。
Medium ブログプラットフォーム - 直近 10 件の投稿の RSS フィードとして利用できます。アーカイブのダウンロードは code/medium_posts.py で処理され、下書きを除外して公開投稿のテキストを抽出します。
取り込み処理コードの開発状況を追跡するため、issue を作成しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。