“生产环境崩溃时,最难的从来不是找数据——而是把它们串起来。”这是Reef团队的亲身体会。你打开GitHub看最近的PR,打开Sentry查报错,翻Slack聊天记录找值班同事说了什么,再去Vercel确认刚刚是不是有部署。四个标签页开着,你盯着屏幕,脑子里拼命对齐每个时间点。这种手忙脚乱的体验,几乎是每个工程师的工伤。

于是,在海盗主题的“Coral-bean”黑客松上,Reef诞生了。它的野心很简单:把这种琐碎的跨工具串联,变成一次自动化调查、一份统一报告。根据故障的严重程度,它甚至还能顺手给出修复建议。这篇文章就像一份船长的航海日志,记录了他们怎么用Coral把多源数据揉成一条SQL,怎么让AI代理自己规划和判断,以及你照搬这套模式需要哪些零件。

打开网易新闻 查看精彩图片

Reef本质上是一个“生产事故情报代理”。触发方式有三种:仪表盘手动点击、Sentry Webhook自动捕捉、Slack对话指令。当你睡觉时,一个“panic”信号被Sentry捕获,Reef就被唤醒了。

它的核心工作流像一场状态机驱动的侦探游戏:先制定查询计划,通过Coral执行SQL,由证据法官判定是否充分,不够就继续迭代,最多跑5轮。一旦收集到足够信心,生成一份结构化的报告。如果是由Webhook触发,报告还会直接推送到Slack频道,让团队秒级看见故障全貌。整个运行流水线可以这样看:触发器 → 调查编排器 → 规划器(Gemini)通过Coral SQL获取数据 → 证据存储和查询引用 → 法官(Groq)判定 → 严重程度闸门 → 报告 → 推送Slack。

没有Coral之前,跨工具的故障排查通常意味着:打开五个页面,手工复制时间戳,在脑子里做一种脆弱的“时序拼接”。Coral把这个模型翻了个个儿。它把GitHub、Sentry、Slack、Vercel都暴露成SQL表。你只需要写一条查询,就能把“PR合并后出现的报错”这种跨源关联瞬间拉出来。比如这样:

SELECT g.title AS pr_title, g.number AS pr_number, s.title AS error_message, s.level AS error_levelFROM github.pulls gJOIN sentry.issues s ON s.first_seen >= g.merged_atWHERE g.owner = 'your-org' AND g.repo = 'your-repo' AND s.level IN ('fatal', 'error') AND g.state = 'closed'ORDER BY s.first_seen DESCLIMIT 20;

一条SQL,两个数据源。不需要数仓,不需要ETL,凭据也只留在你的本地机器上——Coral在查询时即时解析API。那个关键的时间连接条件“s.first_seen >= g.merged_at”正是Reef自动化调查的核心洞见:刚刚合并的PR可能就是这次报错的元凶。

背后的技术栈颇为轻巧:后端是Python 3.11+ 配 FastAPI 和 SQLAlchemy(开发环境SQLite,生产为Postgres);前端用React 19、TypeScript、Vite、Tailwind;数据层靠Coral CLI(coral sql)或者在没有安装Coral时用模拟模式做演示。AI大脑分两块:规划器调用Gemini 2.5 Flash生成查询计划,证据法官用Groq Llama 3.3 70B来做判断。如果没有API密钥,系统会降级到模板规划加规则法官的备用方案。

如果你也想搭一套,流程相当直接。先安装Coral,再把你的生产工具注册进来:brew install withcoral/tap/coral。在后端目录下复制一份.env.example为.env,填入GITHUB_TOKEN、GITHUB_OWNER、GITHUB_REPO、SENTRY_ORG、SENTRY_TOKEN、SLACK_TOKEN、VERCEL_TOKEN。运行一次配置脚本setup_coral_sources.sh,它会把github、sentry、slack和vercel(来自社区清单)全部添加好,并执行一条烟雾查询来验证,比如PR与Sentry的关联查询。最后用一条简单的检查语句确认所有表就位:coral sql "SELECT schema_name, table_name FROM coral.tables WHERE schema_name IN ('github','sentry','slack','vercel') LIMIT 20"。

整个过程就像给故障响应流程装了一个外挂大脑。你不再需要成为那个同时盯着四个屏幕、手动对齐时间戳的焦虑操作员。Reef像一个冷静的同事,在你喊一声“帮我查查这次崩溃”之后,默默把相关PR、报错记录、部署变更甚至对话上下文都拼成一条故事线,配上自己的判断,丢回Slack。而背后的Coral,则把这场跨服务追踪变成了数据库里再自然不过的连接查询。