>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
JavaScript

広告のノイズや余分なトークンなしで、任意のページをニューラルネットワークにフィードする方法

LLMエージェントに通常のWebスクレイピングを向かわせると、数多くのナビゲーションメニュー、フッター、バナー、マークアップの壁が一気にコンテキストに流れ込んでしまいます。何千語もの記事と一緒に、メガバイト単位の不要データがエージェントに送られ、コンテキストウィンドウがいっぱいになり、トークン料金が高くなります。

最近、pullmdというプロジェクトを見つけました。ページやファイルのURLを受け取り、クリーンなMarkdownを返すセルフホスト型のサービス。余分な膨張もなく、テキスト内のメタデータ重複もなく、標準的なパースライブラリにはよくある欠けている機能がいくつかあります。

PullMD web interface (light and dark theme)

内部構造

プロジェクトの作成者は、いくつかの実績のあるツールを組み合わせています。URLが入力されると、サービスはまずCloudflareのネイティブMarkdownをチェックします。なければ、Mozilla ReadabilityとTrafilaturaが活躍します。

ReactやVueで完全に構築されたページでは、生のHTMLが空のテンプレートを返すことがあります。こんな状況で、pullmdはPlaywrightサイドカーを起動し、ヘッドレスChromiumでページをレンダリングし、そこからコンテンツを抽出します。重たいブラウザが不要であれば、docker-compose.ymlからPlaywrightコンテナを無効にでき、約3.7GBのディスク容量を節約できます。その場合、サービスは通常の静的パースで動作し続けます。

すべての結果はローカルSQLiteデータベースに保存されます。1時間以内に同じURLをリクエストすると、キャッシュから即座に返されます。各変換には永続的な短い識別子が割り当てられるため、http://localhost:3000/abcのようなリンクを安定したフィードとして使用できます。

時間を節約する主な機能

RedditとHacker Newsスレッド

通常、スクリプトはコメントページでつまずきます。ここで、パーサーはRedditとHacker Newsスレッドを解析するように特に訓練されています。出力は、ネスト、作者、アップボート数が保持された構造化されたコメントツリーです。

BM25によるページ内検索

サービスのバージョン3で見つけた最高の機能の一つです。クエリにqパラメータを渡すと、pullmdは複数ページのドキュメント全体を返しません。サービスをMarkdownをヘッダーでセクションに分割し、BM25アルゴリズムでランキングし、質問に関連するブロックのみを返します。大規模なページでは、トークン使用量が70%から95%削減され、エージェントの性能が著しく向上します。テーブルとコードブロックはそのまま保持されます。

ドキュメント、ビデオ、オーディオ

このサービスはウェブサイトだけでなく、それ以上のことができます。MicrosoftのMarkItDownサイドカーを接続すると、PDF、Wordファイル、Excelスプレッドシート、PowerPointプレゼンテーション、EPUB電子書籍を処理します。

YouTubeリンクを渡すと、APIキーなしでクリック可能なタイムスタンプ付きのビデオトランスクリプトを抽出します。画像とオーディオ認識には、OpenAI互換モデルやOllamaのようなローカルサーバーのエンドポイントを設定できます。

組み込みMCPサーバーと統合

エージェント統合用にいくつかの接続オプションがあります:

  • 標準REST API(/api/v1/convert)
  • Cursor、Claude Desktop、その他の互換クライアント向けMCPサーバー
  • Claude Code用の готовый плагин
  • ドラッグ&ドロップファイルサポート付きのPWA Webインターフェース

セキュリティとSSRF保護

任意のURLからデータをフェッチするサービスは、SSRF攻撃に対して脆弱です。ユーザーがパーサーに内部ネットワークアドレスやクラウドプロバイダーのメタデータを入力する可能性があります。

pullmdにはアドレス検証が含まれています。各リクエストの前とすべてのリダイレクトステップで、ホストのIPアドレスが解決されます。アドレスがプライベートネットワーク範囲、ループバック、CGNAT、または169.254.169.254のようなクラウドメタデータ範囲に該当する場合、リクエストは即座に403エラーでブロックされます。内部Wikiへの意図的なアクセスについては、ALLOWED_HOSTS環境変数を介してアドレスをホワイトリストに登録できます。

デプロイ方法

基本的な起動には、1つのdocker-compose.ymlファイルで十分です:

mkdir pullmd && cd pullmd
curl -O https://raw.githubusercontent.com/AeternaLabsHQ/pullmd/main/docker-compose.yml
docker compose up -d

サービスはポート3000で起動します。認証はデフォルトで無効ですが、設定可能です:単一管理者モードと、登録とセッションCookieを使用したマルチユーザーモードの両方がサポートされています。

シンプルなAPIリクエストの例:

curl "http://localhost:3000/api?url=https://news.ycombinator.com/item?id=1"

Claude Codeに接続するには、1つのコマンドで十分です:

claude mcp add --transport http pullmd http://localhost:3000/mcp

誰が使うべきか

このプロジェクトはクリーンで実用的であることがわかりました。GitHubスターは500未満ですが、コードベースは成熟しています:クリーンなモジュール構造、詳細なマイグレーションファイル、メインコンテナ内の外部依存関係が最小限。

このツールは、RAGパイプラインの構築、ローカルAIアシスタントの設定、長い記事をMarkdown形式で удобный readerとして使いたい人に最適です。CursorやClaude Codeを使用し、リンク先のドキュメントを確認するようよく依頼する人的话、ローカルpullmdインスタンスはコンテキストと神経を大いに節約してくれます。

関連プロジェクト