Ship 26 NYC - Automating 90% of support tickets: How we built Vercel's support agent
VVercel
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00It's 2:00 a.m. Your phone starts buzzing. A production bug has completely blocked one of
00:00:15your paying customers. You drag yourself out of bed, make some coffee, and open the support queue.
00:00:22First, you need context. Who is this customer? What plan are they on? What changed? You open tabs jumping
00:00:32between your CRM, your internal dashboard, deployment logs, billing, documentation, and recent
00:00:39incidents, trying to piece together enough context to actually understand what's going on,
00:00:45opening more and more tabs. Now you're 11 tabs deep, and the tab titles have nearly disappeared.
00:00:54You're basically navigating internal systems by favicon alone. Your coffee's gone cold, and the
00:01:00customer's been waiting for 40 minutes. You type out a response and hit send. You look back at the
00:01:08support queue, and there are 14 more. An off-the-shelf chatbot isn't going to solve this. It can't read
00:01:15your logs, it can't access your database, and it doesn't understand your business. This used to be us,
00:01:24so we decided to build our own agent using our in-house Vercel products. The best agents aren't bought,
00:01:33they're built. Hi, I'm Katherine, engineering manager on the Avercell agent experiences team,
00:01:41and I'd like to show you how we completely transformed our support operation
00:01:45to resolve now 91% of tickets, completely autonomously, and how we shipped to production
00:01:52in just three weeks. And that was seven months ago. And since then, it's been running in production,
00:01:59acting as the first line of defense for incoming support tickets. Just last week, it resolved over
00:02:06seven thousand tickets. And in total, it handled over 130,000 cases fully autonomously. This has saved our
00:02:16support engineers over 5,000 hours every month. And to put that into perspective, that's equivalent of
00:02:23adding 31 additional support engineers to our team. As for our 91 ticket resolution rate. To put into
00:02:33perspective, customers whose entire business is building support agents, and that's all they do,
00:02:39typically do resolution rates of 60 to 75%. And we've far surpassed that. With just a sliver of their team,
00:02:48and just two engineers on the project. So I'm going to show you how you can do this too. And deliver this
00:02:55level of impact to your business by building your own agents using features available to every Vercel
00:03:00customer today. We didn't just build this agent to demo on stage, we built it because we had to. Back in
00:03:08October, our off-the-shelf agent provider informed us they were changing their product direction. And we had
00:03:1430 days to be off-boarded. For some, this would have been devastating news. But honestly, we were already
00:03:22hitting a wall with them. We were stuck moving at the pace of their roadmap. Every time a new model dropped,
00:03:29we needed new features for our agent. We had to wait for it to be slotted into their roadmap.
00:03:35We had to maintain complex auth infrastructure to provide external service with access to internal
00:03:41APIs. And we had constant difficulties keeping their agents' knowledge base up to date with our steady
00:03:48stream of docs changes, blog posts, and changelogs. So we spent three weeks building an in-house agent to
00:03:56replace the one we were about to lose. But we didn't want to just build a direct replacement.
00:04:02We wanted to build the ideal support experience. What if we built an agent that reads every page of your
00:04:11documentation, reviewed your user's entire history with your product, understood their specific billing
00:04:18plan plan, knew about last Tuesday's incident, and responded in under 30 seconds, at 2am, in any language.
00:04:28That's what we set out to build. The first version we shipped matched the resolution rate of the
00:04:34provider we were replacing, which low 60s. And then we started integrating it deeper into our systems,
00:04:42giving our agent more and more capabilities that our customer support team used when resolving cases.
00:04:48And the resolution rate just started climbing all the way to where we are now, over 90%.
00:04:54So let me show you exactly how our agent was built and how we were able to get our resolution rate to
00:05:00climb so high. Let's walk first through the moment a ticket arrives in our inbox to the moment it's resolved.
00:05:09So first, a ticket is submitted on our support page for cell.com/help. And here we gather all the
00:05:15contexts that might be relevant to our agent to enrich the ticket: the user's team, plan, recent support
00:05:22tickets, and any ongoing recent production incidents. Anything that will influence how our agent investigates.
00:05:30This is the enrichment step in our support flow. Then the agent kicks off its research loop.
00:05:37First, it determines if it has enough information to correctly and confidently answer the user's
00:05:42query. If not, it begins the research phase. And it performs this research loop until it's confident
00:05:50enough to respond. And finally, it either sends a response, escalates to a human, or takes action on its
00:05:59own using its included tool calls. So each of these steps run on a piece of the Vercel platform. Let me
00:06:06walk you through the ones that we used to build our own support agent. First, the agent needs a model loop
00:06:15to reason and respond, plus an interface that we can quickly test and iterate. Building this from scratch
00:06:22means wiring up model calls, tool execution, conversation state, streamings, and retries. All that time spent,
00:06:31and we haven't even started writing our business logic. Following the same principle we do in front-end
00:06:37development, instead of writing up the DOM manipulation by hand, we like to reach for React.
00:06:44AI SDK does that for agents. It gives us a set of primitives for text generations, tool calls,
00:06:51and human-in-the-loop approval. So we're writing our agent's logic instead of everything else around it.
00:06:58We built the first version of this core agent loop in hours, not days. And if we had Eve back then,
00:07:06which is our new framework that just launched for building agents, it would be minutes instead of hours.
00:07:13So here's our core agent loop. Just a few lines of code. Once we had our core loop written, capability
00:07:20growth was incremental. Define a new tool, add it to the toolset, and the agent starts using it when appropriate.
00:07:30No retraining, no fine-tuning, just a simple JavaScript function.
00:07:37We were able to quickly get off the ground running with a working agent, but then we need to build an
00:07:42interface to observe and debug the agent. Beyond the agent orchestration, AI SDK also provides UI
00:07:50hooks to manage chat streams and text completions on the front end, making it quick to wire up a working UI.
00:07:58Once we've wired up the front end, we were seeing an agent reply in a matter of moments with real-time
00:08:03streaming chat, interactive tool calls, and error states. This here is all you need for a working chat
00:08:12with streaming responses, managed message state, and a single hook connecting the front end to the agent.
00:08:19So now that we've got a working chat streaming, we need our agent's response to be generated by a model
00:08:25to kick off our agentic research loop. Customers reach out when they're already stressed. So answers
00:08:33need to come back, even during model provider outages. One model provider can pile up a backlog of stalled,
00:08:41dropped, dropped, or incomplete replies, and trigger urgent escalations. So if your business has SLA
00:08:48obligations, this is a non-negotiable. So we treat model routing traffic - so we treat model routing
00:08:55like traffic routing. Always send traffic requests to a healthy path, and that's what AI Gateway gives us.
00:09:03One API with automatic failover, low latency routing, and effortless model switching. If a provider degrades,
00:09:13rerouting is automatic and invisible to customers. With how effortless model switching is, with a simple
00:09:21one-line change we switched from Opus 4.6 to Gemini 3.5 Flash. And case resolution increased 5% overnight,
00:09:32with faster answers and fewer escalations.
00:09:37So now when a new model drops, we test it on day one and measure the impact on case resolution and
00:09:44customer satisfaction. And that's the entire migration. The agent can reason now, but an agent without
00:09:52access to your systems is just a chat bot. It can't look up customers' failed deployment logs, nor can it
00:10:00pull up their records or recent activities. The best it can do is guess and suggest how the user
00:10:07can troubleshoot the issue. Like how an API lets your frontend communicate with your backend, MCP's or
00:10:14model context protocol is standard for letting AI models connect to your systems. An API for agents.
00:10:23We connected our agent to Vercel MCP, which enables agents to interact with Vercel's platform features.
00:10:30This gives our agent the exact same tools our support engineers use when resolving tickets.
00:10:36Here's where our agent really begins to excel. By connecting our agent to our MCP, our support agent
00:10:43was able to resolve 15% more cases without any changes to its prompt. So quickly taking a look at our
00:10:53previous agent loop. Here's all it took to wire up the Vercel MCP, giving our agent access to the full Vercel
00:11:02tool set. Customers asking, why did my build fail? And why was I charged more this month? Now get answers
00:11:09grounded in real data from their account. As far as how you can build an MCP for your own internal
00:11:16services, we simply wired up a Next.js app with the MCP handler library. So here's a quick look of what our
00:11:24MCP definitions look like. They simply live in a Next.js route handler file. So inside create MCP handler, we
00:11:33simply provide a couple of tool calls and definitions for agents to discover. Whenever a tool definition is
00:11:40updated on the server, our agent automatically starts using them. By owning both the agent and the MCP layer, we
00:11:48own the full security flow. So no need for complex token exchange systems that you need if you are relying
00:11:54on external systems. That's the kind of simplicity and peace of mind you only get when you build it
00:12:01yourself. Your agent now reasons and can access internal systems. But there's one more thing we need
00:12:10for your agent to answer correctly and confidently. Access to your knowledge base. Your docs, change logs,
00:12:18blog posts, FAQs, everything a subject matter expert for your product would reference. Before the agent
00:12:26can answer a billing question, it needs to check the latest docs to understand your billing policy.
00:12:32When a new feature shifts, the docs update and the agent needs to be able to answer questions
00:12:38right away about what's new. So how do you keep an agent's knowledge current without building complex
00:12:45search infrastructure? This is your run-of-the-mill agent search service, a major distraction from
00:12:51building your business's agent. You know how you can add a database to a project from the Vercel
00:12:57marketplace with just a few clicks? So the same idea applies to search. We use Upsass Search, a turnkey
00:13:05vector search service through Vercel marketplace to turn our search infrastructure from this into this.
00:13:14Zero maintenance burden. And in less than 10 seconds, we have a production-ready search service.
00:13:24And just like that. We simply ingest docs, change logs, and blog posts, and the agent can search through
00:13:32all of them for up-to-date context. Fast to set up, no embedding pipeline to manage, and no infrastructure
00:13:39to maintain. This is all it takes for the agent to be able to fetch its need, what it needs to answer
00:13:46questions about Vercel features within moments of a release. So in the docs update, we just upsert the changes,
00:13:55and the agent can start using that context immediately. So we're using AISDK for our agent loop and UI,
00:14:04AI Gateway for model calls and failover handling, Vercel MCP powered by Next.js and MCP handler to connect our agent to our systems,
00:14:14and Vercel marketplace to set up our search index with just a few clicks. And we use chat SDK to bring our
00:14:22Vercel support agent easily to Slack. And because this all runs on Vercel, when the agent is just waiting
00:14:30for the model to think, the meter stops, thanks to fluid compute. And for an AI agent that spends most of
00:14:37its time waiting for model responses, function costs are barely there. So now that you've seen under the
00:14:45hood, let's see what this looks like from a user's perspective. So here, a customer is asking why they're
00:14:52recently charged a different amount than usual. Maybe they changed their plan or bought an add-on.
00:14:58So we're using the MCP to pull the team's plans details, billing and usage activity.
00:15:05From the knowledge base, we're pulling billing policy and add-on pricing.
00:15:11Next, the customer asks for a downloadable invoice.
00:15:15Here, we use a purpose-built tool to pull it from Stripe, since this is a common ask.
00:15:21Finally, the customer asks for an invoice to be modified, since they changed their address.
00:15:27Since we saw this was a common ask, we custom-built an approval UI, trivial to do since we own the full
00:15:34agent stack. And here, we show a nice confirmation state. This level of UX and polish simply can't be
00:15:43done with just a drop-in chat widget. So when you're back at your desk tomorrow morning, go take a look at
00:15:51your ticket queue. Find the categories of work where 80% of the resolution rate is the same pattern.
00:16:00Pull context from various systems, apply a known playbook, refine until it meets the minimum bar,
00:16:08and then send an answer or take action. That's your first agent. For us, it was technical support.
00:16:16But for you, it might be onboarding, account management, or internal IT. We built the support agent in three
00:16:25weeks with a team of two, using features to every Vercel customer today. If you can write a Next.js app,
00:16:35you can start. Being off-boarded by our provider made us realize just how big of a price we were paying
00:16:44by staying. Our support agent costs us less to run than one additional support engineer, but saves the
00:16:51capacity of 31 full-time engineers. It outperforms the industry by 20 points. And because we built it
00:17:00ourselves, it's deeply integrated into our product than any external vendor could ever be. Because it
00:17:08deeply understands our products and answers questions about our customers' actual projects.
00:17:14So you'll need to do the work to teach it your domains, connect it to your tools and scope permissions,
00:17:19and to refine it based on how it performs. Our first version resolved 62% of tickets.
00:17:27It took iteration to get above 90%.
00:17:31With Vercel, the tools are out there to build agents easily. You don't have to worry about infrastructure.
00:17:38You can just focus about refining your agents and understanding your business.
00:17:44Remember that 2am ticket? 11 tabs, cold coffee, 40 minutes to send to one response, and 14 more open tickets?
00:17:54That doesn't have to be that way anymore. Stop repeating the same tedious work every day and just start
00:18:02building agents. The best agents aren't bought. They're built. Thank you.
00:18:09Thank you.