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の概要フロー)
- メタデータの発見 – Bagelはログのスキーマ(トピック、フィールド、タイムスタンプ)を読み取ります。
- プロンプトの解釈 – LLMが自然言語リクエストを解析し、関連するトピックを判断します。
- Arrow形式への変換 – 関連するメッセージをApache Arrowファイルに書き込みます。
- SQL生成 – LLMが要求された計算を実装するDuckDB SQLクエリを生成します。
- 実行と反復 – DuckDBがクエリを実行。答えにさらに詳細が必要な場合は、ループを繰り返し、満足のいく回答が得られるまで処理を継続します。
- 結果の配信 – 答え(および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のクイックスタート手順)
- Docker Desktop をインストールし、MCP対応のLLM(Claude Codeがデフォルトの例)を用意。
- リポジトリをクローン し、適切なDocker Composeサービスを起動。例:
git clone https://github.com/Extelligence-ai/bagel.git && cd bagel docker compose run --service-ports ros2-kilted - LLMに接続(Claude Codeの例):
claude mcp add --transport sse bagel http://localhost:8000/sse - モデルにプロンプトを送信 – Claude(または任意のMCPクライアント)を開き、ログに関する質問を投げかける。
- オプション:オフラインモード – 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で隔離された環境から実行可能です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト