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 – 机器人、无人机与物联网日志的自然语言分析工具
是什么 – Bagel(由 Extelligence 开发)是一个基于 Docker 的服务,让你可以用自然语言与机器人、无人机或物联网数据进行交流。你提出一个问题(例如 “我的 IMU 是否过热?” 或 “在每次急刹车前后各保留 10 秒”),Bagel 会将请求转化为可确定性的 DuckDB SQL,该 SQL 在日志数据上运行。生成的 SQL 会显示给你,因此答案是可审计的,而非黑盒式的 LLM 推测。
为何重要 – 在许多机器人流程中,数据量巨大,且存储在 ROS 2 bag、PX4 日志、MCAP、CAN 捕获、MQTT 流等格式中。提取洞察通常需要编写脚本、使用 grep,或手动将数据加载到 PlotJuggler 等工具中。Bagel 将语言理解部分交给 LLM(Claude Code、Gemini、Codex、Ollama 等),但将所有繁重任务——过滤、聚合、连接——保留在本地运行的 SQL 中,部署于机器人或边缘服务器。这为你带来:
- 自然语言接口 – 无需了解确切的主题名称或 SQL 语法。
- 透明且可复现的查询 – 你可以看到生成答案的确切 SQL 并进行编辑。
- 边缘端数据缩减 – 一句话即可定义一个在设备上运行的检测器,仅保留相关的时间窗口,并发送一个极小的日志包,而非数 GB 的原始数据。
- 广泛格式支持 – 支持 ROS 1/2、PX4、ArduPilot、Betaflight、汽车 MDF4/CAN、MQTT、PostgreSQL/TimescaleDB、InfluxDB 3 等。
🚀 核心功能(来自 README 列表)
- 自然语言查询 – 无需学习 DSL,即可对日志中的任何内容提问。
- 确定性 SQL 后端 – 每次计算都是你可审计的 DuckDB 查询。
- 自然语言流水线 – 用一句话描述事件驱动的数据缩减,预览流水线,然后在车队或边缘端运行。
- 支持 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 bag 的元数据。” → 返回一份简洁的报告卡。 |
| 故障检测 | “IMU 传感器是否过热?” → 对温度主题运行统计检查。 |
| 事件驱动裁剪 | “在每次减速度超过 –10 m/s² 的前后各保留 10 秒,其余丢弃。” → 创建一个边缘缩减流水线,将 2 GB 日志缩小至约 160 MB。 |
| 跨主题分析 | “/spot/status/battery_states 中电流与电压的相关性是什么?” – 单一 SQL 连接计算 corr()。 |
| 批量处理 | “在这个文件夹 X 中的每个 bag 上运行此流水线。” – 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,拉取本地模型,并运行
ollmcp指向同一 MCP 服务器。
还提供了一行演示命令:
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 接口与机器人、无人机及物联网遥测严格 SQL 分析之间的一座实用桥梁。它让工程师能够提出高层次问题,审计底层计算,并自动在边缘端缩减海量日志,所有操作均在 Docker 隔离环境中完成。
相关
- 项目
- 项目
- 项目
- 项目
- 项目