4.15 bubseek —— 让 Agent 的足迹,变成团队的洞察

造一个人人都喜欢的 Agent 很难,但是帮助别人来做一个他/她/它喜欢的 Agent 也很不错~

bub 是什么?

bub 是一个框架,但是框架意味着什么呢?我想可能是:A common shape for Agent,一个相对稳定的基线微框架,支持深度私人定制。这很容易让人想起《红色警戒》里的基地车,收起来能跑,展开能造。bub 就是那个基地车,不是基地本身,而是让基地成为可能的东西。

这个 Agent 内核,要足够稳定,足够容易被理解,由维护者保证质量。而功能插件则利用开放的接口去扩展,可以任意 vibe,甚至直接让 Agent 自己为功能需求生成代码来实现。

现在很火的 OpenClaw 在企业内部基本不可能真正落地,bub 就是把 Agent 中不需要的功能分离出去,变成一个精心设计的轻内核 + 随便 vibe 功能插件的架构。

bub 是一个 hook-first 的 AI 框架,核心保持精简,通过 hooks 和 skills 扩展功能,它的架构非常优雅:AgentLoop 抽象、Tape 记忆系统、Skills 引擎,每个模块都恰到好处。核心理念是 "路由 → 模型 → 工具 → 记忆" 的确定性单向数据流。

框架化链路上的每个主要部分都很容易进行定制,我们希望 bub 是一个没有偏好的 Agent,所有偏好来自于使用方,可以方便地做发行版。

hook(钩子)是 bub 框架的扩展点,框架本身只是一个空壳,所有功能都通过 hook 插件来实现,包括内置功能本身。

小编猜想:这应该就是文章开头为大家展示的 bub 项目 logo 的由来。

欢迎大家关注 OceanBase 社区公众号 "老纪的技术唠嗑局",我们会持续为大家更新与 #Data 和 #AI 相关的技术内容!

bubseek 是什么?

简单说,bubseek 是一个自驱动的洞察 Agent。它建立在 bub 和 OceanBase seekdb 之上,接受提示词,并且将数据转化成可读、可共享的洞察。

更确切地说,它可以根据任务的需求,自主对接数据源,为其定义和定制可视化视图,执行分析动作,并提交对应的分析报告。不需要漫长的排期,不需要跨部门协调,只需要告诉它你想要什么,剩下的交给 bubseek。

如何利用 Agent 进一步满足企业内部对各种数据消费的定制化需求,而当 Agent 的足迹遍布群聊、遍布任务流,我们怎么让这些分散的痕迹,变成团队可以共享、可以复用的洞察?这就是 bubseek 要回答的问题。

bubseek 正是通过上面为大家提到的 hook 机制,向 bub 注册了 OceanBase/seekdb 作为 Agent 后端数据存储组件的方式,不改 bub 源码,只挂钩子。

当然,bubseek 和 bub 一样,也可以看做成一个框架,可以成为你想要的那个。

至于如何成为,每个人对 bubseek 都会有自己的期望和理解。欢迎大家尝试各种不同的模型、提示词工程、拟人化技巧,甚至修改它的代码,直到达到你想要的目标。如果你需要一个起点开始探索 Agent,或许 bubseek 和 bub 一样,也是一个不错的选择。

bubseek 的技术架构和现状

bubseek 接受提示词,根据任务需求自主对接数据源,定义和定制可视化视图,执行分析动作,提交分析报告。它负责"消费"数据,分析、提炼、输出洞察。

bubseek 建立在 bub 和 seekdb 之上:

  • bub 是一个 Agent 框架。它定义了 Agent 的 common shape:有边界、有证据、可交接。它的 tape 设计完整记录了 Agent 的每一次思考、每一次工具调用、每一个结果。
  • seekdb 是一个嵌入式数据库。它专为 AI 时代的工作负载设计,原生支持向量嵌入和 RAG 等能力,能更好支撑 "把数据变成洞察"。

这个架构支撑起了前面的两个能力:对外,bubseek 作为 Agent 消费数据,服务业务需求;对内,它自己的足迹又成为被分析的对象,反哺团队理解。

bubseek 还处在一个比较早期的阶段,但是我们已经验证和跑通了基本的业务流程:从数据接入,到 seekdb 存储,再到 Agent 分析生成 insight。

不过,这可能也是 "深度定制化" 的好时机。

满足定制化数据需求

企业内部的数据消费需求,往往是多样化的、碎片化的、随时变化的。运营想看趋势,产品想追指标,老板要日报------传统的方式是提需求、等排期、上线,周期长、成本高。

bubseek 想换一种方式,让这些小而具体的数据被看见。

把需求变成提示词

在 bubseek 里,你不需要写复杂的查询语句,也不需要画繁琐的报表。你只需要告诉它你想要什么:

  • "帮我建一个看板,跟踪这周 AI 领域的新项目,每天更新"
  • "分析一下 vllm 为什么突然 trending,出一份简报"
  • "看看过去一个月团队最常讨论的技术话题有哪些"

bubseek 接到提示词,自己去做剩下的事:对接数据源(GitHub、Slack、内部系统......),定义视图,执行分析,生成报告。

没有排期,只有迭代

因为整个过程是 Agent 驱动的,需求的响应速度从"按周排期"或者"分配人天"变成了"即时响应"。不满意?改个提示词再来一次。想要新的维度?加一句话就行。数据消费不再是"提需求等交付"的重型流程,而变成了轻量对话。

把 Agent 的足迹变成团队洞察

当 bubseek 被团队用起来,它自己就会产生大量数据------每一次交互、每一个查询、每一份报告,都以 tape 的形式存进 seekdb。这些数据本身,就是洞察的矿藏。

分析 Agent 就是在分析团队

bubseek 可以像分析任何数据源一样分析自己:

  • 哪些类型的查询最多?------反映团队最关心什么
  • 哪些任务经常失败?------反映 Agent 的能力边界,也可能反映业务的难点
  • 哪些需求被反复提及但没被满足?------反映产品的机会点

这不是传统的"可观测性"(看系统健康度),而是更深一层的"可理解性"------通过 Agent 的足迹,理解团队在想什么、在做什么、卡在哪里。

不需要专门的分析工具

因为所有数据都在 seekdb 里,分析本身就是 bubseek 的工作。你想了解团队过去一周的动向?问 bubseek 就行。它自己去查自己的 tape,然后给你一份报告。

这就形成了一个闭环:bubseek 服务团队,产生数据;这些数据又被 bubseek 分析,反哺团队对自身协作的理解。

bubseek 关键特性

接下来,为大家介绍 bubseek 的几个关键特性。

多渠道支持

Agent 需要入口来接收需求。bubseek 内置了五个常用的即时通讯渠道:飞书、钉钉、微信、Discord 和 Telegram。安装后配置对应的环境变量即可使用,无需额外开发。这些渠道遵循 bub 的 channel 扩展规范,便于自行开发扩展或者引入其他第三方实现。

此外还有一个 Web 入口:marimo channel。启动后访问 http://127.0.0.1:2718 ,除了一个基本的会话界面之外,还包含简单的数据分析可视化示例和用于内部服务数据呈现的一些看板。

轻量化数据消费

Agent 接到需求后执行任务,输出结果。

企业内部的数据消费需求往往是碎片化的:运营想看趋势,产品想追指标,技术想了解开源动态。传统的方式是提需求、等排期、上线 BI 报表。周期长,成本高。小需求排不上,大需求做不完。

bubseek 想换一种方式:不需要部署独立的 BI 系统,用 notebook 就能承载看板、图表、分析脚本。不满意改个参数再来,想要新维度加一句话就行。响应速度从"按周排期"变成"即时迭代"。

marimo notebook:marimo 是一个响应式 Python notebook。bubseek 预置了 dashboard.pyindex.py 两个模板。用户可以在 insights/ 目录下添加自己的 notebook。Agent 可以根据需求动态生成或修改 notebook,数据消费变成对话而非排期。

GitHub 仓库卡片:内置 github-repo-cards skill。给定 org/repo ,生成包含基本信息、星标趋势、贡献者的卡片;或抓取 GitHub trending,生成趋势列表。输出 SVG 和 PNG 格式。把 GitHub 上的数据变成可分享的图片,是一个具体的数据消费场景示例。

当然,这些工具如果非必须,也可以通过摘除钩子,快速清除。

调度任务:内置 bubseek-schedule 。Agent 可以通过 schedule.addschedule.listschedule.remove 管理定时任务,支持 cron 表达式、间隔触发、延时触发。用户说"每天早上 9 点提醒我查看数据",Agent 就能创建对应的调度任务。周期性的数据需求也可以被即时满足。

内生可观测性

Agent 执行过程中会产生大量数据。这些数据不是副产品,而是理解 Agent、理解团队的素材。

传统的可观测性是外挂的:部署监控系统,收集指标,看仪表盘。Agent 的可观测性可以是内生的:Agent 运行时自然产生数据,这些数据存入 seekdb,可以被 Agent 自己分析。

tape:bub 的核心设计。完整记录 channel 的聊天会话、Agent 的每一次思考、工具调用、结果。这些记录以 tape 的形式持久化,不可篡改。tape 本身就是 Agent 工作的一部分,不是事后追加的日志。所有数据都会持久化到 seekdb,后续可以让 Agent 分析 tape 从而了解:哪些问题被频繁提及?哪些任务经常失败?团队最关心什么?

marimo 看板:bubseek 预置了看板模板,用于展示 Agent 的运行数据。tape 记录、会话历史、任务状态都可以在 marimo 界面中查看。不需要部署独立的监控系统,Agent 的足迹本身就是可浏览、可查询的数据。

这形成了一个闭环:Agent 服务团队,产生数据;这些数据存入 seekdb,通过看板可视化,或被 Agent 分析,反哺团队对自身协作的理解。

当然,用户也可以通过自然语言和 bubseek 进行交互,让其对 seekdb 存储的任意 Agent 数据信息进行分析和生成看板。

例如:

或者:

生成的看板会类似于:

统一的数据底座

上述记录都存入 seekdb。

seekdb 是 OceanBase 面向 AI 场景的轻量化版本,原生支持 SQL、向量、全文等多路检索能力,并提供混合搜索策略,能够适应多样化的数据处理和消费需求。bubseek 通过 pyobvector 驱动连接,并针对 OceanBase 的特性做了兼容处理。

配置方式:

plain 复制代码
bub_TAPESTORE_SQLALCHEMY_URL=mysql+oceanbase://user:pass@host:port/database

一个数据库,承载 tape、会话、任务三类数据。并且,如果 seekdb 无法满足业务的增长,也可以无缝切换到 OceanBase 这样久经考验的分布式数据库。

快速开始

部署 seekdb

部署 seekdb 的步骤详见: ** https://docs.seekdb.ai/seekdb/zh-CN/deploy-overview ** 。

可以通过上面的文档,直接在您正在使用的本地 linux、mac、windows 环境中,快速部署服务器模式的 seekdb。

CPU 最低要求 1 核,可用内存最低为 2G。

部署 bubseek

plain 复制代码
git clone https://github.com/ob-labs/bubseek.git
cd bubseek
uv sync
uv run bub --help
uv run bub chat

配置 seekdb:

plain 复制代码
export BUB_TAPESTORE_SQLALCHEMY_URL=mysql+oceanbase://root@127.0.0.1:2881/bubseek

说明:还需要配置适合 Agent 使用的模型的 API KEY,参考: ** https://github.com/ob-labs/bubseek **

写在最后

做 bubseek 的初衷,不是想做一个"大而全"的数据平台或者通用 Agent,市面上已经有太多这样的东西了。

我们想做的,是一个真正能够理解自己、理解团队、理解数据的 Agent。当 Agent 成为团队的协作成员,它们的足迹不应该散落在各个地方无人问津。这些痕迹里,藏着团队的知识、流程的瓶颈、甚至 Agent 自己的能力边界。

更重要的是,企业内部对数据消费的需求是多样化的、定制化的。传统的方式是提需求、等排期、上线,周期长、成本高。bubseek 想提供另一种可能:告诉 Agent 你想要什么,它自己去对接数据、定义视图、执行分析、输出报告。

没有排期,只需要迭代。一切自然发生。

bubseek 0.1.0 是一次尝试,尝试把 bub 的能力打包成一个面向数据消费这个领域的发行版,同时也验证了 seekdb 作为 Agent 数据底座的可行性。

它还不成熟。但基本的流程已经跑通:从入口接收需求,到执行输出结果,到记录存入 seekdb。

后续,还会继续迭代。

参考资料

相关推荐
Greyson12 小时前
TensorFlow中如何冻结模型层_设置layer.trainable等于False实现微调
jvm·数据库·python
m0_748839492 小时前
SQL视图在ETL流程中的作用_数据清洗与标准化接口
jvm·数据库·python
2401_832635582 小时前
JavaScript中字符串toLowerCase与toUpperCase规范
jvm·数据库·python
Magic-Yuan2 小时前
如何提高AI落地的成功率 - 成功率函数
大数据·人工智能
Wyz201210242 小时前
如何在 Discord.py 中实现按钮权限控制:仅允许特定角色点击
jvm·数据库·python
Chasing__Dreams2 小时前
Mysql--基础知识点--100-- insert VS select...for update 加锁
数据库·mysql
2301_777599372 小时前
golang如何实现WebSocket断线重连_golang WebSocket断线重连实现要点
jvm·数据库·python
ZeroNews内网穿透2 小时前
ZeroNews安全网关接入企业微信自建应用
网络·数据库·安全·云计算
开开心心就好2 小时前
经典塔防游戏移植移动端随时畅玩
java·前端·科技·游戏·edge·django·pdf