Building the best agentic analytics harness: Powered by Claude, built with Claude Code
Hey, thanks everybody.
嘿,感谢大家。
Um, great to be here today.
很高兴今天来到这里。
We're Omni is a AI analytics platform and today I'm going to talk a little bit about you know how we build with cloud and you know what we've built with claude and and how cloud powers that.
Omni 是一个 AI 数据分析平台,今天我来聊一聊我们如何用 Claude 构建,以及我们用 Claude 构建了什么,还有 Claude 如何为这一切提供支撑。
Uh so start just with how cloud has enabled us.
从 Claude 如何帮助我们说起。
I'm the CTO.
我是 CTO。
I run the engineering team at Omni.
我负责 Omni 的工程团队。
Uh we have a team of about 25 engineers.
我们有大约 25 名工程师。
Uh this is a slide of our uh commits to the main branch of our repository over time.
这张幻灯片展示的是我们代码仓库主分支的提交记录随时间的变化。
Uh I think it kind of speaks for itself.
我觉得这图说明了一切。
Um one of the things hidden in here kind of a very small piece of that line is my own commits.
这条线里有一小段是我自己的提交。
I think as CTO of a growing company with hundreds of customers, I sort of assume that at some point I'd have to stop writing code.
作为一家服务数百个客户的成长型公司的 CTO,我一直以为,到了某个节点我就得放下编码了。
Uh and I thank Claude very much for making me uh still able to do some software engineering from time to time.
非常感谢 Claude 让我时不时还能做做软件工程。
Uh so that's been a really you know a fantastic sort of unexpected benefit of of this roll out and you know to speak a little bit about how this went earlier in 2025.
这是我们推广这套工具时一个真正意外的惊喜。2025 年初,我们就是这样起步的。
We said to the team, I don't know when and I don't know how, but I know our jobs are changing.
我们对团队说,我不知道什么时候、也不知道怎么变,但我知道我们的工作正在改变。
So, let's just start experimenting, start using these tools, figure out what works.
所以,开始实验,开始用这些工具,搞清楚什么有效。
And we did a bunch of it with some, you know, sort of fits and starts.
我们做了不少尝试,也走过一些弯路。
Uh, and when Cloud Code with the Opus model released, that was when some of our senior engineers said, "Wait a minute, no, this is real.
当 Claude Code 配合 Opus 模型发布时,我们几位高级工程师说,等一下,这是真的,这东西真的有用。
This is actually helping consistently."
它在持续稳定地帮助我们。
And you know, it's kind of been off to the races since then.
从那以后基本上就一路狂飙了。
Uh, and starting around, you know, I I sort of felt like everybody went away for the holidays and then came back in January and had sort of skilled up and figured it out and was ready to start hitting the ground running with cloud code.
大概从那时起,我感觉大家放假回来,回到一月份,技能都提升了,摸清了门道,准备好用 Claude Code 全力冲刺了。
Uh, and you can see the slope of the line from there.
你能从曲线的斜率看出来。
So that velocity is a big part of our culture at Omni.
速度和节奏是 Omni 文化的重要组成部分。
We have a core value called ship it.
核心价值观叫「就是上」。
Uh, we also have a a core value around transparency.
我们还有一个围绕透明度的核心价值观。
Uh so you can actually see uh if you go on our website omni.co there's a topline uh navigation page to our demos.
你可以在我们的官网 omni.co 看到,顶部导航里有一个 demos 页面。
Every Friday at Omni we have an all hands meeting.
Omni 每周五都有全员会议。
It's the most important meeting of the week.
这是一周里最重要的会议。
We do about 10 minutes of announcements, shout outs to each other and then we do 50 minutes or increasingly more than 50 minutes of demos.
我们会花大约 10 分钟做通告、互相喊话,然后用 50 分钟甚至更长时间做演示。
Uh, we record all this and our CEO's favorite job is Saturday morning he wakes up, he cuts those demos, posts them on YouTube and shares them with the world to see.
我们会录制所有这些内容,我们 CEO 最喜欢的事情就是周六早上起来,把那些演示剪出来,发到 YouTube 上分享给全世界看。
So, if you're curious about what we're up to, uh, you can go to omni.co.
所以,如果你好奇我们在做什么,可以去 omni.co 看看。
This has been a really cool way to show our customers, our prospects, the community around us sort of how we're thinking and how we're building.
这是一种很棒的方式,让我们的客户、潜在客户和周边社区看到我们的思考方向和构建方式。
And that speed and velocity has been a huge benefit for us as a company.
这种速度和节奏对我们公司来说是巨大的优势。
So let's talk a little bit about what we have built with claude.
那我们来聊聊用 Claude 构建了什么。
Uh so Omni's AI analytics, you know, we let you talk to your data, right?
Omni 的 AI 数据分析,就是让你直接和数据对话,对吧?
So how does that actually work?
那实际上是怎么工作的呢?
Uh so user comes in and asks a question.
用户进来提一个问题。
In Omni, we're using Claw to actually translate that question into a semantic query.
在 Omni 里,我们用 Claude 把这个问题转化成语义查询。
I'll explain more what that means later.
后面详细解释。
Uh we have a semantic layer and that is think of that as sort of a translation layer that sits on top of your data warehouse database or maybe multiple of those uh to actually you know provide some additional benefit about how to use the data enforce it sort of give it a map for how to actually translate that data or excuse me that query into SQL that then runs against the the warehouse.
我们有一个语义层,可以把它想象成一个翻译层,坐落在数据仓库、数据库,或者多个数据源的上方,实际上是为你提供如何使用数据的额外指导,并将查询转化为 SQL 再去执行。
We'll go into more of this later, but that's just a high level view of kind of how the system works.
后面会深入讲,但这就是系统运作方式的高层视图。
And this is important because Claude is incredible at answering questions, but you need to tell it more about your business if you want it to answer questions about your business, right?
这很重要,因为 Claude 在回答问题方面非常厉害,但如果你想让它回答关于你业务的问题,你得告诉它更多关于你业务的信息,对吧?
Can tell you incredibly deep insights about how businesses work generally.
它能给你讲述关于企业普遍运作方式的深刻洞见。
But if you wanted to know about how your business works, you need to tell it not only, you know, how the business works, the terminology you use, and then of course, if you're asking a a data question, you need to tell it how your data looks and how that works.
但如果你想了解你自己的业务,你得告诉它业务怎么运作、你用什么术语,如果是数据问题,还得告诉它你的数据长什么样、怎么用。
And so that's where we come in.
这正是我们切入的地方。
That's the problem we're solving.
这是我们要解决的问题。
And it's subtly difficult, right?
而且这个问题是微妙地难,对吧?
Like even last quarter means drastically different things at different companies.
就拿「上个季度」来说,在不同公司含义完全不同。
Even in our our own company, you know, in the product and engineering organization, last quarter refers to the calendar year in our sales team, it refers to our fiscal quarter.
就算在我们自己公司,产品和工程团队说的「上个季度」是日历年,销售团队说的是财务季度。
So all of that needs to actually get coded in to the context and awareness and even the the sort of data layer and definitions of the data so that it can be used appropriately to ultimately get you the right answer to your question.
所有这些都需要编码进上下文和感知里,甚至要写进数据层和字段定义里,这样才能被正确使用,最终给你一个准确的答案。
So this semantic layer, what's it doing?
那这个语义层在做什么?
So it's like I said it's a translation layer that sits on top of the database.
就像我说的,它是坐在数据库上方的一个翻译层。
Uh it's doing a few things.
它做几件事。
It's very easy to sort of come up with a toy demonstration of how an LLM or frankly a human can get correct answers on top of you know 10 data sets in a database.
想出一个玩具演示,让 LLM 或者说人类也好,能在数据库里 10 个数据集上答对问题,其实很容易。
Real company data warehouses and databases are not like that.
真实公司的数据仓库和数据库不是那回事。
They have tens of thousands, hundreds of thousands of data sets, sometimes more.
它们有几万、几十万个数据集,有时甚至更多。
Uh, and all of them, you know, have there's a hundred revenue tables, right?
而且所有这些里面,可能有一百张营收表,对吧?
There's a hundred opportunity tables.
有一百张机会表。
It's very unclear how to actually stitch those things together and use them in the correct way.
如何把这些东西拼接起来并以正确的方式使用,非常不清晰。
So, this is one of the benefits that our semantic layer provides is it allows you to sort is define how to use these things together and also curate it.
这正是语义层的好处之一,它让你能定义这些东西如何配合使用,并进行筛选整合。
Say, hey, listen, this is the one that matters.
这张才是关键的。
Ignore those other 10.
其他那 10 个就忽略掉。
With that, it it's a way to encode the context.
有了这个,它就是一种编码上下文的方式。
I think one of the things that we've learned is that context is great, but context localized to what the actual definition that the context refers to makes it all the all the better, right?
我们学到的其中一件事是,上下文很好,但把上下文放在它所对应的定义旁边,效果会更好,对吧?
And so I think about this, we're at code with claude.
所以,我们在 Code with Claude。
If you use Claude Code, which I assume most of you do, you have your cloud.
用 Claude Code,你会有 CLAUDE.MD,对吧?
MD files, right?
MD 文件,对吧?
And sort of the more you can do to sort of localize that that context next to the parts of the code that it applies to, the better results you're going to get.
你越是把上下文放在它所适用的代码旁边,得到的结果就越好。
That's what our semantic layer does as well is it helps you provide that context next to the field definition that it applies to rather than in a separate file over somewhere else.
我们的语义层也是这样,它让你把上下文放在它所适用的字段定义旁边,而不是放在另一个单独的文件里。
Uh and then finally permissions, right?
还有最后一点,权限,对吧?
It's a permissions layer.
它是一个权限层。
Make sure that people see the data they're supposed to see and don't see the data they're not supposed to see.
确保用户只能看到他们应该看到的数据,看不到不该看的数据。
And inside of our application, this feedback loop is an important part of how this stays current and accurate because guess what?
在我们的应用里,这个反馈循环是保持系统实时且准确的关键,因为猜猜怎么着?
In a real organization, this stuff changes constantly.
在真实的组织里,这些东西一直在变。
And so our application provides a feedback loop where you know the next question that gets asked of the data can then be fed back into the definitions into the context for a continuous learning loop.
所以我们的应用提供了一个反馈循环,对数据的下一个问题可以反馈回定义和上下文里,形成持续学习的闭环。
So this is our agent name is Blobby.
我们的智能体叫 Blobby。
Uh if you look at Blobby you could probably see this is you a mature professional refined data analyst.
看 Blobby 的样子,你大概能看出来,这是一位成熟、专业、精炼的数据分析师。
Uh and that is what Blobby is today.
这就是 Blobby 现在的样子。
But Blobby hasn't always been that refined.
但 Blobby 并不是一开始就这么精炼。
Uh started building Blobby let's say about 18 months ago and we've learned a lot along the way.
我们大约在 18 个月前开始构建 Blobby,一路上学到了很多。
Uh you know Blobby's grown up quite a bit in the past 18 months.
Blobby 在过去 18 个月里成长了不少。
So what I want to talk about is a little bit of you know how we develop the different phases and also what we learned uh along the way that kind of helped increase the quality and capabilities of Blobby.
我想讲一讲我们如何开发各个阶段,以及我们在过程中学到了什么,这些帮助提升了 Blobby 的质量和能力。
So just to ground this conversation, I just want to show you a really quick demo video of what Blobby does in real life.
先说说背景,我给你们快速看一个演示视频,展示 Blobby 在实际中是什么样的。
So if we can cut to the video quickly,
可以快速切到视频吗,
right?
好的?
And so what we're going to see here is like I said, ask questions of your data.
我们将要看到的就是我说的,向数据提问。
Blobby's sitting there dutifully waiting to answer your question.
Blobby 在那边尽职等待,随时准备回答你的问题。
Uh, and as we do this, you'll start to see some of the phases that we go through to actually break down the question and then answer it.
在这个过程中,你会开始看到我们经历的几个阶段,先是拆解问题,然后回答它。
So, right, the first thing Blobby's doing is saying, "All right, you're asking about PRs.
首先,Blobby 在说:「好,你在问关于 PR 的事。
Blobby's very smart because Cloud's very smart.
Blobby聪明,Claude亦然。
It knows that PRs refer to GitHub pull requests.
它知道 PR 指 GitHub PR。
let me go find that in your semantic model and figure out what data you're actually referring to.
让我去语义模型里找一找,弄清楚你实际上在说哪个数据。」
Uh then it goes and looks up the values of the data set because we said we only wanted it from a particular repository.
然后它去查这个数据集的字段值,因为我们说只想看特定仓库的数据。
So it has to apply a filter.
所以要加一个筛选条件。
It needs to know what that filter value is.
它需要知道筛选的值是什么。
And guess what?
猜猜怎么着?
When I type out questions to an LLM, I make typos all the time.
我打字给 LLM 的时候,经常打错字。
So it needs to do a little bit of fuzzy matching to make sure that it's actually finding the right thing.
所以它需要做一点模糊匹配,确保找到的是正确的东西。
And then right it goes through it generates a query runs that query against the data warehouse gets the results provides a nice visualization and then does a nice little summary at the end to tell you what you're seeing.
然后它生成一个查询,对数据仓库执行这个查询,获取结果,给出一个漂亮的可视化,最后做一个简短的总结告诉你看到了什么。
Cool.
很好。
So just grounding you a little bit in what the actual experience is like.
先让你感受一下实际体验是什么样的。