Extelligence-ai/bagel

Query robotics, drone, and IoT data in plain English through an MCP server, with an intelligent edge data reduction pipeline that keeps only the data that matters.

📦 Bagel – ロボット、ドローン、IoTログの自然言語分析

何であるか – Bagel(Extelligenceによる)はDockerベースのサービスで、ロボット、ドローン、IoTデータを日常的な英語で話せるようにします。質問を投げかけます(例:「私のIMUは過熱しましたか?」 または 「ハードブレーキの前後10秒を保持」)と、Bagelはそのリクエストを、ログデータ上で実行される決定論的なDuckDB SQLに変換します。生成されたSQLはあなたに表示されるため、答えは検証可能であり、ブラックボックスのLLMの推測ではありません。

なぜ重要か – 多くのロボット開発パイプラインでは、データ量が非常に大きく、ROS 2バグ、PX4ログ、MCAP、CANキャプチャ、MQTTストリームなど、さまざまな形式で保存されています。通常、インサイトを得るにはスクリプトの作成、grepの使用、PlotJugglerなどのツールに手動でデータを読み込む必要があります。Bagelは言語理解部分をLLM(Claude Code、Gemini、Codex、Ollamaなど)に任せつつ、すべての重い処理(フィルタリング、集計、結合)をロボットやエッジサーバー上でローカルに実行されるSQLに保ちます。これにより、以下の利点が得られます:

  • 自然言語インターフェース – トピック名やSQL構文を正確に知らなくてもよい。
  • 透明性と再現性のあるクエリ – 答えを生成した正確なSQLが表示され、編集も可能です。
  • エッジでのデータ圧縮 – 1つの文で、デバイス上で実行される検出器を定義でき、関連する時間窓のみを保持し、数ギガバイトの生データではなく、非常に小さなバグを送信できます。
  • 広範なフォーマット対応 – ROS 1/2、PX4、ArduPilot、Betaflight、自動車用MDF4/CAN、MQTT、PostgreSQL/TimescaleDB、InfluxDB 3など。

🚀 主な機能(READMEに記載)

  • 日常言語でのクエリ – DSLを学ぶ必要なく、ログについて何でも尋ねられる。
  • 決定論的なSQLバックエンド – すべての計算は、検証可能なDuckDBクエリである。
  • 自然言語パイプライン – 1文でイベント駆動の圧縮を記述し、パイプラインをプレビューしてから、ファルム全体またはエッジで実行できる。
  • MCP対応LLMサポート – Claude Code、Gemini CLI、Codex、Cursor、Ollamaなどと連携可能。
  • Dockerコンテナ化 – ROS 2(Kilted、Jazzy、Iron、Humble)、ROS 1、PX4、ArduPilot、Betaflight、および一般的なIoT用の即時実行イメージを提供。
  • POMLによる拡張.pomlファイルを配置するだけで、新しい「トリック」(カスタム機能)を追加可能。再ビルドは不要。
  • 統合機能 – PlotJuggler、Rerun、Foxglove/Lichtblick、Cloudini点群圧縮、Slackアラート、LeRobotトレーニングデータセットなどに結果をエクスポート可能。

🛠️ 動作方法(READMEの概要フロー)

  1. メタデータの発見 – Bagelはログのスキーマ(トピック、フィールド、タイムスタンプ)を読み取ります。
  2. プロンプトの解釈 – LLMが自然言語リクエストを解析し、関連するトピックを判断します。
  3. Arrow形式への変換 – 関連するメッセージをApache Arrowファイルに書き込みます。
  4. SQL生成 – LLMが要求された計算を実装するDuckDB SQLクエリを生成します。
  5. 実行と反復 – DuckDBがクエリを実行。答えにさらに詳細が必要な場合は、ループを繰り返し、満足のいく回答が得られるまで処理を継続します。
  6. 結果の配信 – 答え(およびSQL)がLLMクライアントに送信されます。オプションのパイプラインステップでMCAPスニペット、CSV/Parquet、クラウドストレージへのプッシュが可能。

🎯 一般的な利用シーン

情報 Bagelにどう尋ねるか
迅速な健康診断 「このROS2バグのメタデータを要約してください。」 → 精簡なレポートカードを返す。
故障の検出 「IMUセンサーが過熱しましたか?」 → 温度トピックに対する統計的チェックを実行。
イベント駆動のトリミング 「-10 m/s²より強い減速の前後10秒を保持し、それ以外は削除。」 → 2GBのログを約160MBに圧縮するエッジ圧縮パイプラインを生成。
複数トピック間の分析 「/spot/status/battery_statesにおける電流と電圧の相関は?」 – 1つのSQL結合で corr() を計算。
バッチ処理 「フォルダX内のすべてのバグに対してこのパイプラインを実行。」 – Bagelは同じ決定論的パイプラインをファルム全体で実行し、統合レポートを生成。
オフライン作業 Ollama(例:qwen3:8b)をローカルで ollmcp と組み合わせて使用し、データとモデルをマシン内に留める。

🏁 導入方法(READMEのクイックスタート手順)

  1. Docker Desktop をインストールし、MCP対応のLLM(Claude Codeがデフォルトの例)を用意。
  2. リポジトリをクローン し、適切なDocker Composeサービスを起動。例:
    git clone https://github.com/Extelligence-ai/bagel.git && cd bagel
    docker compose run --service-ports ros2-kilted
    
  3. LLMに接続(Claude Codeの例):
    claude mcp add --transport sse bagel http://localhost:8000/sse
    
  4. モデルにプロンプトを送信 – Claude(または任意のMCPクライアント)を開き、ログに関する質問を投げかける。
  5. オプション:オフラインモード – Ollamaをインストールし、ローカルモデルを取得し、同じMCPサーバーを指す ollmcp を実行。

ワンライナーのデモも提供されています:

docker run -it --rm ghcr.io/extelligence-ai/bagel/px4:latest demo

これは、バンドルされたPX4飛行ログの健康状態レポートを出力します。


⚠️ 既知の制限(リスト済み)

  • 自動車用MDF4/CAN対応はまだベータ版(生成されたファイルでのみテスト済み)。
  • 圧縮比はワークロードに依存し、ベンチマークされていない。READMEの数値は例示用。
  • MCPエンドポイントには認証がなくlocalhostにのみバインドされるため、公開する場合はプロキシを追加する必要がある。
  • 小規模なローカルLLM(4〜8B)は複数ステップのパイプラインで苦戦する可能性がある。より大きなモデルの方が信頼性の高いツール選択が可能。
  • InfluxDB/Postgresのライブデータベースエンドツーエンドテストは、ユーザー提供のインスタンスに対してのみ実行され、CIでは実行されない。

📄 ライセンス

Apache License 2.0(オープンソース)。


結論 – Bagelは、自然言語LLMインターフェースと、ロボット、ドローン、IoTテレメトリの厳密なSQLベースの分析の間を実用的な橋渡しをします。エンジニアは高レベルな質問を投げかけ、下部の計算を検証し、エッジで巨大なログを自動的にトリミングでき、すべてDockerで隔離された環境から実行可能です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト