为什么没人能回答业务问题?—— Garrett Galow,WorkOS
Good afternoon, everyone.
大家下午好。
Now, it's the last day.
今天是最后一天了。
Hopefully, you're still holding on, not too tired of talking about AI yet.
希望大家还撑着,还没有聊 AI 聊到累。
Um
嗯
Yeah, today's going to be a little different.
好,今天会稍微不一样一点。
Um so, I work for WorkOS.
我在 WorkOS 工作。
My name's Garrett.
我的名字叫 Garrett。
I run product for the team.
我负责团队的产品。
Um I'm not exactly talking about our product today.
今天我讲的其实不是我们的产品。
So, I'll do like 10 seconds about WorkOS just to, you know, get that out of the way since um my company cares about that.
我就用 10 秒钟介绍一下 WorkOS,毕竟我的公司在乎这个。
We do enterprise platform features.
我们做企业平台功能。
We're a developer platform.
我们是一个开发者平台。
Uh the quick and easy is if you've ever logged into Cursor, you've used WorkOS.
简单来说,如果你登录过 Cursor,你就用过 WorkOS。
Whether that was like username password or you went through your enterprise IDP.
不管是用户名密码登录,还是走企业 IDP。
We power enterprise platform features for the likes of Cursor, Anthropic, OpenAI.
我们为 Cursor、Anthropic、OpenAI 等客户提供企业级平台能力。
Um today though, I'm going to talk about something a little bit different.
不过今天,我要讲一点不一样的东西。
I'm going to talk about how we operate internally and things that we've built to make ourselves more productive.
我要讲我们内部怎么运作,以及为了提升效率我们构建了哪些工具。
So, um I imagine most of you are probably engineers uh or on the technical side.
我猜在座大多数人应该是工程师,或者技术方向的。
Um you might have questions about things about your company, about how customers are using the product, how things are working.
你们可能会有些关于公司的问题,比如客户怎么用产品、某些功能运行得怎么样。
Uh your go-to-market teams or your support teams definitely have questions about how customers are using your product, trying to figure out uh answers to questions.
你们的市场团队或者支持团队,肯定也有很多关于客户怎么用产品的问题,想找答案。
You might have like retool inside your company.
公司内部可能有 Retool 之类的工具。
You might have built like dashboards and things like that.
可能也搭了一些 Dashboard 之类的东西。
Uh of course, those can be fairly rigid, right?
这些当然可能比较固定,对吧?
You build a very specific thing.
你搭的是一个非常特定的东西。
Someone comes and says, "Oh, actually, but I need this extra bit of data.
然后有人过来说,哦,其实我还需要这一块额外的数据。
I need to find out answer this different question that the dashboard doesn't answer."
我得回答一个 Dashboard 没覆盖的问题。
And so, either you go and build that, you change it, right?
于是你要么去改,要么重建,对吧?
We kind of see like a workflow that looks kind of like this, where someone has a question, often about the business.
我们看到的是这样一个流程,有人有一个关于业务的问题。
They may not be technical enough to go answer it themselves.
他们可能技术能力不够,没法自己去找答案。
Uh they often need something like SQL or someone that has access to the data.
他们通常需要 SQL,或者需要有数据权限的人来帮忙。
They have to explain their question, why they need it answered, the you know, context to answer it.
他们得解释自己的问题、为什么需要答案,以及回答这个问题所需的上下文。
They wait.
然后等。
Someone like you has to go answer the question, provide that data back to them.
像你这样的人得去回答这个问题,把数据给他们。
Did you actually answer the question?
你真的回答了他们的问题吗?
Did you provide enough detail?
你给的细节够吗?
Oh, no, no, that's great, but I actually need the next layer deeper.
哦不不,很好,但我其实还需要再深一层。
Got to go back and forth.
来来回回。
Uh you probably share that in Slack.
你可能在 Slack 上分享了一下。
Sort of a one-off.
就是一次性的。
Doesn't really scale very well.
扩展性不太好。
Um we had this problem.
我们也有这个问题。
If you didn't, we have this problem every day.
如果你没有,我们每天都有这个问题。
And so we built a tool called Studio uh that serves as kind of an internal workspace where people can answer questions and build these kind of apps or dashboards themselves.
所以我们构建了一个叫 Studio 的工具,作为内部工作空间,让大家可以自己回答问题、搭建这些小应用或 Dashboard。
So, I'm going to show you both kind of what it looks like to build this out.
我来给大家展示一下搭建起来是什么样的。
Also show you a few examples of some of the tools that we use every day inside of Studio.
也给大家看几个我们在 Studio 里每天都在用的工具示例。
And then I'll talk a little bit about how it works under the covers.
然后我会简单讲一下它底层是怎么工作的。
So, um so I don't uh get this completely wrong, I have a little prompt here already.
为了避免出错,我这里已经准备好了一个 prompt。
But so, um you know, a common thing we have we do a lot of sub-marketing.
我们做很多渠道营销,这是我们经常做的事。
You know, we're doing podcast advertisements, we're doing Google Ads.
比如投播客广告、做 Google Ads。
We're getting people to come to WorkOS site, whether that's our blog, our docs, or our marketing site.
我们让大家来到 WorkOS 的网站,不管是博客、文档,还是营销页面。
And then we want to know what content are they reading and what's effective, right?
我们想知道他们在看什么内容,什么内容最有效,对吧?
What is someone reading on our dash on our site and then you converting to actually using the app.
有人在我们网站读了什么,然后转化成了真正使用产品的用户。
So, I want to know hey, what content leads to the most new teams.
我想知道,哪些内容带来的新团队最多。
We call our customers teams internally, so leads to the most new team creations.
我们内部把客户叫做团队,所以就是带来团队创建数最多的内容。
So, I can fire this off and we will um Studio starts operating.
我可以把这个发出去,然后 Studio 就开始运转了。
It basically says, "Okay, I want to find this data.
它基本上是说,好,我要找到这些数据。
I need to kind of look at like what, you know, internal resources do I have access to?"
我得看看自己能访问哪些内部资源。
So, it knows that has access to like my linear, my notion, my Snowflake.
所以它知道自己能访问我的 Linear、Notion、Snowflake。
So, we have these data sources that we connect to.
我们接入了这些数据源。
Um and then basically understands how to use these tools and starts to run queries.
然后它大概就知道怎么用这些工具,开始跑查询了。
So, in this case, it's going to run a bunch of Snowflake queries, which is our internal database.
这里它会跑一堆 Snowflake 查询,Snowflake 是我们的内部数据库。
It's where we store a lot of this data.
我们在里面存了很多这类数据。
Um and it's going to go through, figure out the schemas, look at the tables that it needs to, and do it.
它会去梳理 schema、查看需要的表,然后完成查询。
While it's doing this, since it might take just a minute, I'm going to talk a little bit about uh how it works uh kind of under the hood.
趁这个可能要一会儿,我来简单讲一下它底层是怎么工作的。
So, uh you can either go to our internal studio dashboard, or in Slack we have a Slack bot, so you can ask questions of Studio.
你可以进我们内部的 Studio Dashboard,也可以在 Slack 里用 Slack 机器人直接问 Studio。
That kicks off the process.
这就启动了整个流程。
We run a little API behind the scenes that takes that, parses it, and then runs it through Lane Graph, which is an agent that's both tied to uh LLM, which in this case we're using Opus, along with the tools and the guidance layer for how it should interact with these systems.
我们在后台跑了一个小 API,接收请求、解析之后交给 Lane Graph,这是一个 agent,同时接 LLM,这里我们用的是 Opus,再加上各种工具和指导层,告诉它该怎么跟这些系统交互。
So, we have this integration proxy uh to the data sources, primarily like Snowflake, Linear, and Notion are the tools that we use.
我们有一个集成代理连到各数据源,主要用的工具是 Snowflake、Linear 和 Notion。
Um and this guidance layer basically defines rules around how you should query this data, the context you need to successfully query the data.
这个指导层定义了查询数据的规则,以及成功查询所需的上下文。
Right, our Snowflake is a pretty sprawling set of databases, so it needs to like get context around how do I
我们的 Snowflake 数据库相当庞杂,所以它需要获取上下文,比如怎么
What's the representation of a customer inside of Snowflake?
Snowflake 里客户实体的表示方式是什么?
How do I join tables in a way that's effective?
怎么高效地 join 表?
So, the agent drives all of this, uh makes queries that LLM runs, and then of course it provides back answers or uh updates to widgets, which I'll show you in a minute.
所以这一切由 agent 驱动,让 LLM 跑查询,然后给出答案或者更新组件,这个我待会展示。
And then we store a lot of that state today in Convex as a way to locally store this information, so it's preserved over sessions.
我们今天把很多状态存在 Convex 里,用来本地保存这些信息,这样跨会话也能保留。
So, we go back.
好,我们回来。
Um cool, looks like we've actually gotten a bunch of data here.
很好,看起来我们已经拿到了很多数据。
Let me make it a little bit bigger for you.
我放大一点让大家看清楚。
So, we can see obviously like, you know, people go to our home page, people look at the pricing page.
我们可以看到,很明显,大家会访问首页、看价格页。
Um we can see like the blog posts that are most effective for driving team sign-ups.
我们能看到哪些博客文章在推动团队注册方面最有效。
Um change logs and docs.
还有更新日志和文档。
I'm kind of getting the summary.
我大概看了一下摘要。
Okay.
好。
But, this is great, so it's like answers my kind of question, but I want this to be like a long-standing thing that I can
这很不错,它回答了我的问题,但我希望这能变成一个长期存在的东西
So, can you build a table of this that lets me see see this data over various time slices.
所以你能不能做一张表,让我按不同时间切片查看这些数据。
And so here it's not just, you know, run the queries, get the answer.
所以这里不只是跑查询、拿到答案那么简单。
But I actually wanted to build like a reusable tool that I can that I can share with my teammates, that I can use in like our weekly syncs.
我其实想做一个可复用的工具,能分享给队友,能在每周同步里用。
And so it's going to kind of think through how to do this, and then it's going to go and build what we call a widget.
所以它会思考怎么做,然后去构建我们所说的组件。
A widget is in this case, uh, basically like sandbox code that runs.
组件在这里本质上就是一段可运行的沙盒代码。
Um, and it's both the UI, the APIs, and the query necessary to power like, uh, a fully usable tool.
它同时包含 UI、API,以及支撑一个完整可用工具所需的查询逻辑。
Um, so this is going to think for a minute uh, as it actually creates the widget.
所以它要想一会儿,因为它要真正把这个组件创建出来。
Uh, I have another version of it that I can show you.
我这里有另一个版本可以给大家看。
We'll see if they look the same, uh, across instances.
看看不同实例下效果是否一样。
But this is like a one that I had pre-built before this.
这是我之前提前搭好的。
Um, so it basically gives me this data of like teams over different time spans.
它基本上给了我不同时间段的团队数据。
You know, what content is driving those sign-ups.
比如哪些内容在带动注册。
Um, and it it's live, right?
而且它是实时的,对吧?
If I if I run this, it's going to rerun that query.
如果我跑一下,它就会重新执行那个查询。
It's going to give me the data for different time slices.
给我不同时间切片的数据。
I can make it, you know, full screen here, show it.
我可以让它在这里全屏显示。
Um, and so it, you know, it's going to think through this.
所以它会思考一下。