跳到正文
Databricks Blog·· 5 小时前AI 评分22

Hamlet 如何用 Databricks Lakebase Postgres 针对生产数据测试改动

How Hamlet uses Databricks Lakebase Postgres to test changes against production data

AI 导读

Hamlet 借助 Databricks Lakebase Postgres 为每个 pull request 创建独立的生产数据分支,让工程师和 AI 编码代理在不触碰生产环境的情况下用真实数据测试改动,且每次合并仍需人工审批。Hamlet 已索引全美超过 7,200 个治理机构的会议,平均每场会议约三个半小时,AI 负责定位值得关注的时间戳并由视频原文佐证。

正文 · AI 翻译

Hamlet 是一个由 AI 驱动的平台,让地方政府的决策变得可访问、可搜索,它使用 Databricks Lakebase Postgres 为每个拉取请求提供各自的生产数据分支。工程师和 AI 编码代理可以针对真实数据测试变更,而无需触碰生产环境,并且仍由人工批准每一次合并。

我与 CEO Sunil Rajaraman、首席开发者 Erich Douglass 和高级 AI 工程师 Jeff Hui 聊了聊他们的工作方式。

什么是 Hamlet?

Hamlet 是一个由 AI 驱动的技术平台,让地方政府的决策变得可访问、可搜索。通过索引和转录全美数千场市议会、规划委员会和分区委员会会议,Hamlet 让房地产开发商、记者、研究人员和市民能够即时搜索会议记录、追踪地方政策动态,并针对特定议题、地址或企业设置实时提醒。

为什么地方政府数据如此难以标准化?

Sara Steffen:Hamlet 索引了来自各州超过 7,200 个治理机构的会议。这个数据版图是什么样子,为什么如此难以理解?

Sunil Rajaraman:美国有 19,000 个市政府、3,000 个县政府以及大约 80,000 个特别区。随便挑其中两个网站,它们都不会长得一样。这是地方政府与生俱来的原罪。少数几家 CMS 提供商决定了每个网站都应该与众不同,结果就是一个完全割裂的政府互联网。Hamlet 把这一切汇聚起来并加以标准化。

Erich Douglass:你不能只和一家提供商集成。其中七八家覆盖了约 75% 的市场。再往后就是大量长尾的定制化部署。有时是书记员上传议程的 PDF。有时他们扫描纸质副本再上传。你会遇到一些非常奇怪的产物。

公民情报平台与转录工具有何不同?

Sara:Hamlet 自称是一个公民情报平台。这与转录工具有何不同,为什么这一区别很重要?

Sunil:很多政府科技公司本质上是在做市政数据的套利。他们为 1998 年时代的网站编写脆弱的爬虫,再在上面刷一层现代涂料。抓取和存储数据本身并不能增加多少价值。你必须讲出一个故事,而且它必须基于事实。这意味着要知道谁在发言,以及他们对某个议题持什么态度。如果你是开发商,你想知道某位议员是否会批准你的住房项目、原因是什么,以及这座城市有什么历史可能让它犹豫。

看看许可审批。大量风险投资涌入了许可数据领域,而过去十年里许可审批周期却仍在恶化。许多公司为症状建起了纪念碑。我们想触及根本问题,那就是理解人。我们试图回答的问题是城市究竟如何运作。

是什么让杂乱的公共数据如此难以处理?

Sara Steffen:是什么让地方政府数据如此难以处理?

Sunil Rajaraman:随便挑其中两个网站,它们都不会长得一样。Hamlet 把这一切汇聚起来并加以标准化。

Erich Douglass:你不能只对接一家供应商。七八家供应商大约覆盖了75%的市场。再往后就是大量长尾的定制化配置。有时是职员上传一份议程的PDF,有时是扫描纸质副本再上传,你会遇到一些非常奇怪的产物。

客户需要从会议数据中得到什么?

Sara:客户需要从这些数据中得到什么?

Sunil:我们的客户是私营企业,比如房地产开发商、数据中心开发商和零售商。他们几乎都想更快地让项目获批,或者找到新的机会。没有 Hamlet,就得有人花几个小时旁听会议,等自己的项目被提上议程,还要观察官员的肢体语言。我们会识别是谁在发言,带你跳到对应的时间戳,并给你看证据。

Erich:他们还想要先例。类似的项目以前获批过还是被否决过?为什么?市议会要求做了哪些修改?如果我们能展示真实情况,那价值就很大。

Hamlet 如何让 AI 的回答与来源挂钩?

Sara:你们如何帮助客户信任他们找到的洞察?

Jeff Hui:我们几乎在流程的每个环节都用它。早期 Hamlet 是人工完成这些工作的,但那无法扩展到成千上万个地方。对很多这类政府机构来说,视频是主要的事实来源。把它转换成我们可以使用的结构化形式是最重要的部分。平均一场会议大约三个半小时,没人想全部看完。AI 会把人指向值得花时间的部分,而视频始终在那里作为佐证。我们可以准确展示说了什么,这是很多 AI 系统难以做到的。

上下文决定差异

Sara:你们如何在成千上万场会议中准确识别发言者?

Jeff:上下文带来的差别最大。对于发言者识别,我们知道是哪个市议会或委员会在开会,以及当时谁是成员。这有助于确定姓名,而姓名即使对人听录音来说也很难弄对。你不能把一段视频丢给模型然后指望它表现良好。你必须收集周围所有能帮助它做出正确判断的信息。这是一个永无止境的挑战。

核查 AI 的理解

Sara:你们如何核查 AI 对官员发言的理解?

Sunil:准确的转录是第一步。对于情感倾向,我们用多个 AI 模型来确认某条评论确实关于某个给定话题,比如数据中心。然后它们查看周围的上下文,判断是支持还是反对。

你还必须在提问之前定义好支持和反对的含义。以警务为例,支持它意味着什么?我们在这些问题上非常用心。现在有多个模型会在我们发布每一项情感倾向数据之前进行审核,而且我们要求高置信度。

Hamlet 如何使用 Lakebase Postgres?

Lakebase 是 Hamlet 使用的托管 Postgres 数据库,它为每个拉取请求提供一份生产数据的独立分支。工程师可以针对引发缺陷的数据测试改动,而不触碰生产环境;同时 AI 编码代理运行流水线并在人工批准合并之前检查其工作。该团队表示,他们之前的测试数据设置每周每位工程师可能要花上几个小时。

Hamlet 如何使用 Lakebase 的数据分支?

Sara:你们为什么选择 Lakebase,这对你们的团队带来了什么变化?

Erich:我们在 AWS RDS 上的配置相当标准,一个生产实例和一个预发布实例。我们的很多工作都是针对非常特定的数据来调优数据管道。每个拉取请求,我们都要花 15 到 30 分钟把预发布环境调整到正确状态,然后才能运行验证。我们是个小团队,速度对我们来说比几乎任何事都重要。

数据分支是打动我们的功能。现在每个拉取请求都会获得自己的一份生产数据分支,并连接到它的预览环境。预览部署时,数据就已经就绪。我们可以针对生产数据进行测试,甚至写入数据,而不会触及生产环境。

自动扩缩容也有帮助。在 RDS 上,换更大的实例意味着一次可能耗时数小时的迁移。现在我们拖动一个滑块,就能得到两倍大的实例。

Jeff:15 到 30 分钟还是最好的情况,前提是你恰好复制了完全正确的数据。每位工程师每周可能都要花好几个小时来保持测试数据最新,包括在本地克隆部分生产数据来排查问题。现在遇到 bug 时,我们拥有导致该 bug 的确切数据,并且可以针对同一份数据验证修复。

AI 编码代理如何在 Lakebase 分支上进行测试?

Sara:Lakebase 如何改变你们 AI 编码代理的工作方式?

Jeff:分支让我们的工作流更适合 AI 编码代理。每个拉取请求都与生产环境隔离。我们让 Claude 或 Codex 这样的代理访问其分支,并让它运行自己的检查。它会将数据管道运行到完成,并查看变更是否达到了预期效果。每个拉取请求都会先由代理完成第一轮检查。等到人来查看时,我们已经相当确信它能工作。最终合并仍由人批准。其余环节越来越多地实现自动化,而 Lakebase 是实现这一点的关键部分。

Hamlet 接下来在探索什么?

Sara:你们接下来会借助 Lakebase 探索什么?

Erich:目前我们的大部分数据都在关系数据库中,搜索则运行在单独的向量数据库上。两者会逐渐不同步。测试搜索又变成了过去那种预发布环境的问题。我一直在试用 Lakebase Search,它在 Postgres 中结合了向量搜索和文本搜索,把所有东西放在一个地方一直很棒。

Sara:除了搜索,你们接下来还想简化什么?

Erich:分支功能效果非常好,我们希望对象存储中的大文件也能有同样的能力。每个开发者都有测试桶,旁边是一个共享的生产桶,跨这些桶管理状态很难。

Jeff:我们也在研究在哪里运行更长时间的代理任务。我们的一部分数据摄取使用 AI 驱动 Web 浏览器,在政府网站上找到正确的内容。有些运行只需几分钟。另一些需要 30 或 40 分钟,而我们目前的 AWS Lambda 设置有 15 分钟限制。

Lakebase 如何加速从证据到洞察的路径?

Hamlet 的工作始于原始会议录音,因此客户可以将 AI 洞察追溯到某位官员说过的话。Lakebase 支持这一体验背后的工程工作流:生产数据分支让开发者和编码代理在不触及生产环境的情况下测试变更,同时仍由人批准最终合并。对于一个小团队来说,要处理数千个管理机构,这意味着更少时间准备测试数据,更多时间改进产品。


常见问题

如何为每个拉取请求创建并自动删除 Lakebase 分支?

在持续集成(CI)流水线中添加两个步骤:当拉取请求(PR)打开时从生产环境创建一个分支,并在 PR 合并或关闭时删除该分支。你可以使用 Databricks CLI 为这两个步骤编写脚本,并从 GitHub Actions 等工具中运行它们。创建分支时设置过期时间(TTL),这样即使清理步骤从未运行,分支也会自行删除。完整示例请参阅基于分支的开发工作流教程。

Postgres 中的数据库分支是如何工作的?

Lakebase 分支是一个独立的 Postgres 环境,它以父级分支的架构和数据为起点,并通过写时复制与其共享存储。只有分支上所做的更改才会被单独写入,因此创建分支不取决于数据库大小。标准 Postgres 通过复制现有数据库来创建新数据库,这会复制数据。Lakebase数据库分支避免了这种复制,并且子分支中的更改绝不会影响其父级分支。

如何向开发团队推广数据库分支?

从每个拉取请求一个分支开始(即 Hamlet 使用的模式),然后将分支扩展到工作流的其余部分。每种模式都用隔离环境取代共享的暂存数据库。

  • 每个拉取请求一个分支:CI 在 PR 打开时创建分支,并在 PR 关闭时删除它。
  • 每位开发者一个分支:每位工程师都会获得一个带有类生产数据的隔离环境,你可以从父级分支重置它,以获取最新的架构和数据。
  • 每次测试运行一个分支:每次 CI 运行都从一个全新的、隔离的数据库开始,没有残留状态。

Lakebase 分支的费用是多少?

费用取决于计算和存储。每个分支都有自己的计算资源,空闲时会缩容到零,因此你只需为活跃的计算小时付费。在存储方面,有过期时间的分支仅对其上发生变化的数据计费,而没有过期时间的永久分支则按其完整数据大小计费。请为短生命周期分支保留过期时间。有关选项,请参阅分支过期。

AI 编码代理能否在 Lakebase 分支上进行测试而不接触生产环境?

可以。每个分支都与生产环境隔离,因此代理可以应用迁移、运行测试,并在完成后停用该分支。合并仍由人工批准,架构变更通过代码中的迁移移动到父级分支,而不是通过合并分支来实现。

要了解有关 Lakebase 的更多信息,请访问 Lakebase Postgres 产品页面。

来源:Databricks Blog · databricks.com