[BidClub_]
The Cognitive Revolution · · 83 分钟

代码上下文为王:Augment 面向专业软件工程师的 AI 助手,与 Guy Gur-Ari 对谈

Erik TorenbergNathan LabenzGuy Gur-Ari

YouTube
TL;DR
  • Augment 的核心判断是,企业级编程首先是上下文基础设施问题,而不是“从提示词生成应用”的问题。它的目标客户拥有数百乃至数千名开发者,维护着数百万行持续演进的代码;即便上下文窗口达到100万 token,按每行10 token计算,也只能容纳约10万行代码。因此,产品把“完整理解代码库”作为代码补全、聊天和智能体的基础能力。

  • 它的技术护城河,是同时针对相关性、分支级实时更新、安全性和约300毫秒补全延迟优化的检索栈。Augment 每次击键都会发起请求,组合使用自研检索器、静态分析、多个模型和用户引导;由于现有产品无法在不复制代码库的情况下,实时提供每位开发者独立分支的视图,Augment 还自建了向量数据库。Guy Gur-Ari 的限定很重要:精细分块有助于处理尾部场景,但“如果检索器足够强、模型足够强,分块就不该成为瓶颈”。

  • 本期讨论中杠杆最高、甚至低调得近乎可笑的 AI 开发实践是:从10到20个自己深度理解的样本开始。先建立现成方案的基线,必要时手动比较迭代结果,等评估集趋于饱和后再扩展;随后还要结合内部试用和用户反馈,因为没有单一指标能覆盖真实用户的提示词分布和预期分布。目标是把“哲学问题”变成实验。

  • 只要延迟和成本允许,现代 RAG 应优先优化召回率,而不是精确率。Nathan Labenz 的原则是“把超参数调高”,Gur-Ari 表示认同:如今的模型筛选50或100个检索片段的能力远胜早期系统,而强行把答案压进前5或前10个片段,会让检索难度呈指数级上升。例外是指令:上下文越多,模型仍可能跳步骤或忽略要求。

  • Augment 的免费层可能形成有价值的数据飞轮,而企业数据则保持隔离,不得用于训练。IDE 中的活动可以揭示开发者最终选择了哪段代码,从而围绕正确性、风格和代码库惯例,对优劣输出开展强化学习。Gur-Ari 称真实用户数据是“圣杯”,因为它能最大限度缩小训练任务与实际生产使用之间的差距。

  • 代码智能体能创造显著客户价值,却也会冲击传统 SaaS 经济模型。一条指令可能触发10次乃至更多大型模型调用;Gur-Ari 表示,过去几个月里 Augment 的智能体已经替他写下了全部代码,而部分用户在今天的30美元和60美元套餐之上,已经足以证明每月1,000美元的价格合理。Augment 已融资约2.5亿美元,可以承受试错,但随着智能体运行数小时、整夜甚至无需直接用户触发,Gur-Ari 预计按消耗计费会变得更加重要。

  • AI 可能很快生成大多数新增代码行,但不会取代负责决策、引导和监督工作的开发者。Gur-Ari 认为3到6个月的普及预测可能过快,但也不相信转型需要3年:“如果拿走人类,不会发生任何好事。”Augment 仍在招聘优秀的初级工程师,但 Gur-Ari 无法有把握地预测3到6年后的软件就业,并建议自己的大孩子考虑与物理世界联系更紧密的领域。

摘要 · 为研究而整理的核心内容

1. 企业软件开发受制于继承而来的上下文

  • Augment 成立于2022年,早于 ChatGPT 问世,当时自动补全是最直观的产品信号。Gur-Ari 的团队认为模型正在跨过可用性门槛,但选择了更难的市场:服务于维护和扩展既有系统的专业开发者,而不是生成彼此隔离的全新应用。

  • 典型客户拥有数百名开发者,部分客户甚至有数千名。代码库可能采用 monorepo,也可能按微服务拆分,但通常一开始就是数百万行代码,这意味着功能开发无法脱离历史架构、内部 API、组织惯例,以及仍留在代码树中的过时模式。

  • Nathan 的个人工作流是把一个小项目拼接起来粘贴给模型,但到了企业规模就会在数量级上失效。Gur-Ari 估算每行代码约10 token,因此即使上下文窗口达到100万 token,也只能覆盖约10万行代码,“而在行业里,这仍然被视为一个小项目”。

  • 上下文并不只是找到一个函数签名。模型必须在多个可行 API 中做选择,填入正确参数,遵循组织偏好的调用方式,并区分当前示例与过时示例;否则,即使理解了局部任务,也会给出糟糕的补全或聊天答案。

2. 每次击键都会触发意图识别与检索问题

  • Augment 曾通过3个持续数月的研究项目探索代码库理解的3种路径,最终落地于重检索架构。它会上传并索引代码库,使用定制训练的检索模型,再为代码补全、聊天请求和智能体任务选出相关代码。

  • 每次击键都可能启动检索和生成,但 Gur-Ari 希望整条补全链路在约300毫秒内完成。这个预算既包括在大型代码库中识别相关代码,也包括生成答案,因此速度与端到端质量一样,都是“极其重要的功能”。

  • 补全比问答更难,因为用户不会提供一个干净的查询。Augment 需要从光标位置、部分代码以及可能存在的注释中推断开发者意图,然后决定模型需要的是函数签名、当前使用示例、相关实现,还是展示“不该怎么做”的反例。

  • 生产系统混合使用 RAG、静态分析、多个模型,以及通过指定文件或目录实现的显式引导。Gur-Ari 将具体细节称为“秘密配方”,但也降低了一个常见执念的重要性:更好的分块主要解决尾部问题,而“如果检索器足够强、模型足够强,分块就不该成为瓶颈”。

3. 开发者离开代码的速度并不一致

  • Augment 观察到两类相互重叠的开发者。一类仍然紧贴编辑器,高度依赖代码补全;另一类主要通过聊天工作,分配任务、审查提议的修改,而不是亲自编写每个函数。

  • “Next Edit”延续了以代码为中心的工作流,同时扩展了自动补全能力:它可以脱离光标位置运行,删除或修改既有代码,辅助范围也不再局限于追加文本。这种辅助不要求开发者放弃编辑控制权。

  • 智能体模式又后退了一步:它可以编辑多个文件、运行测试、执行命令,并返回一个更大的工作单元。不过在大型代码库中,开发者仍然经常亲自检查并修复代码;Gur-Ari 预计,企业级自主工作流会晚于从零生成应用的场景到来。

  • Augment 支持 VS Code、JetBrains 和 Vim,而不是强迫所有人使用 VS Code 的分叉版本。分叉能带来更深的界面控制,但也意味着要维护更新和安全补丁——这对企业销售尤其关键——同时还要求 JetBrains 用户进行较大的工作流迁移。

4. 实时分支隔离迫使 Augment 自建数据库

  • Gur-Ari 对新鲜度的要求非常具体:开发者或聊天功能刚创建一个函数,下一次编写测试的请求就应该立即检索到它。因此,模型需要的是几乎实时反映每位开发者当前代码的视图,而不只是一个静态代码库索引。

  • 这些视图必须保持隔离,因为出于安全等原因,两个开发者的功能分支不能相互泄漏。同时,Augment 又希望对共享代码库内容只保留一份去重后的表示,而不是为每位团队成员复制一个庞大的索引。

  • 传统的近似向量技术通常会对 embedding 聚类,以降低查询成本。频繁更新会让这些结构难以维护,而带过滤条件的视图又可能导致统计搜索完全错过相关子集;Gur-Ari 表示,Augment 创立时,他们知道的产品没有一个能同时满足这些要求。

  • 数据库建设过程很难,更大客户的代码库也仍在带来持续的扩展工作。Erik 认为它可能成为一个独立产品;Gur-Ari 原则上认同,但表示 AI 实验室反复遇到可以商业化的基础设施,真正困难的战略纪律是专注于“最好的 AI 助手”。

5. 10个样本足以启动严肃的 AI 研究

  • Gur-Ari 在启动检索或模型项目时,默认只使用10到20个经过精心人工标注的样本。先运行最简单的现成基线,判断它能解决20%、80%还是介于两者之间的问题;等这组样本趋于饱和,再加入更难、更多样的案例。

  • 小样本的优势在于研究者对每个案例都足够熟悉,而不在于统计规模有多大。研究者可以把所有案例记在脑中,理解一次改动为何有效或无效。对于本质上主观的任务,真实标签甚至可以后置:让新旧系统并排运行,再手动评判全部10个样本。

  • Nathan 将这种做法与创意工作联系起来:两位评审可能会对哪份剧本、旁白或图片选择最好产生分歧。即便如此,围绕10个“完成得很好”的样本达成共识,也能暴露团队内部未被发现的分歧,为实验提供稳定的起点。

  • 没有任何评估能与用户体验完全对齐。提示词分布、用户预期和质量维度都难以压缩成一个数字,因此 Gur-Ari 坚持认为,系统上线后必须进行内部试用并直接收集用户反馈:评估仍然不可或缺,但不能替代对真实使用情况的观察。

6. 现代 RAG 靠检索更多取胜,而不是假装精确率没有成本

  • 现实世界的检索“几乎从来不是单一手段”。Embedding 可以与结构化过滤器及其他有用信号结合,同时向模型提供足够多的材料,确保正确证据在其中;对于现代模型,召回率通常比无可挑剔的精确率更重要。

  • Nathan 的原则是“把超参数调高”:检索更多片段,并围绕每个命中点向更远范围扩展,同时接受一定的延迟和成本。只要这些取舍可负担,Gur-Ari 完全赞同,因为模型处理干扰信息的能力已经大幅提升。

  • 让答案出现在前50或100个片段中的某处是可实现的;但强行把答案压进前5或前10个片段,会让研究问题“难上一个指数级”。Gur-Ari 预计,长上下文检索还会持续进步,因为 Transformer 的注意力机制本来就是为了筛除噪声、聚焦相关材料而设计的。

  • 但指令密度是一个例外。模型可能能够容忍大量检索证据,却仍无法遵循很长的命令清单,跳过步骤或默默忽略要求。因此,检索上下文扩展和指令遵循是两个不同的问题,当前也面临不同的上限。

7. 定制训练必须用更快的实验速度证明其复杂性值得

  • Gur-Ari 反复看到一种倾向:过早转向复杂研究。他的建议是优先保持简单,相信面向任务的评估,先用尽现成模型和检索方法,只有实验显示简单方案仍然不够时才进行微调。

  • 迭代速度影响的不只是何时找到解决方案,也影响能否找到。把一次实验从数小时缩短到数分钟,可能让团队完成100次尝试,而不是10次;这足以发现某个意外的开源模型、SQL 风格过滤器、embedding 或组合方案恰好适合该任务。

  • Augment 本身不预训练基础模型。在 Llama 出现之前、开源模型还很弱时,它押注公开技术和现有专家能力会快速改进这些模型;如今,它会针对检索、补全和 next-edit 生成,对强大的开源基础模型进行后训练。

  • Nathan 提议继续在专有公司知识上进行预训练,但 Gur-Ari 反对,认为这类数据集同时面临两个问题:对提示词来说太大,对高效训练来说又太小。多轮训练可能导致记忆化,持续更新也会制造摩擦,而为每位用户训练 email 模型在运营上并不现实;他会先部署一个智能体,让它反复搜索,直到认为自己已经找到答案。

8. 开发者行为形成罕见的训练数据飞轮

  • Augment 划定了明确的数据边界:企业客户数据不会被查看,并受到审计访问控制的保护。其免费社区层明确面向那些愿意让 Augment 检查自身活动、并将其用于改进模型的用户开放,无论他们的代码是否开源。

  • IDE 提供了普通聊天缺失的信号。聊天系统能看到问题和答案,却很少知道理想的真实答案是什么;而通过跟踪编辑会话,Augment 最终可以推断开发者真正想完成什么,因为实际工作发生在 IDE 中。

  • 强化学习随后利用的是对比,而不是二元的正确答案:一份输出可能因为算法正确性、开发者偏好、风格,或与周边代码库保持一致而优于另一份输出。Augment 最初将这种“从开发者行为中强化学习”的方法用于打造更好的补全模型。

  • Gur-Ari 认为互联网数据基本已经被耗尽,剩下的路径是合成生成、付费人工标注和产品使用数据。用户数据是“圣杯”,因为它与部署任务一致;但要超越人类能力,最终仍需要外部奖励:可执行代码和科学实验都符合条件,而在没有更强评估者的情况下,自主判断一首诗则不符合。

9. 智能体使用打破传统 SaaS 的经济模型

  • Augment 已融资约2.5亿美元,但薪酬并不是唯一重要支出。每次击键都提供检索和推理服务,成本很高,训练还会增加支出;Augment 租用 GPU,而不是运营数据中心。单位价格下跌的速度,跟不上使用量增长和对最新模型的需求。

  • 随着智能体介入,工作量及账单都会上升:一条指令可能触发10次或更多模型调用,包括大型文件编辑、shell 命令及对其输出的解释。价值也同样可观:Gur-Ari 表示,自己“几个月来没有写过一行代码”,而智能体已经写了大量代码。

  • 目前每月30美元和60美元的套餐,与高度分化的使用量分布并存;即使现在,也有部分用户能够证明1,000美元的价格合理。Augment 已经销售仅在开发者实际使用产品时才消耗的 credits,使付费方式比无论是否采用都要购买的传统席位制更贴近实际活动。

  • 本期没有给出明确的定价答案:企业客户重视可预测性,但与使用量挂钩的成本,以及越来越自主的智能体,都在推动按消耗计费。随着智能体运行数小时、整夜乃至数天,并通过 API 发起代码审查而非等待用户直接提示,按开发者订阅的模式可能越来越不合适。

10. AI 会先写代码,再获得完整的软件工程所有权

  • Gur-Ari 对 Dario Amodei 关于短期内出现超人类程序员的判断有一个狭义解读:查看一行新生成的代码,它越来越可能是模型写的。考虑到采用速度,3到6个月可能过快,但他也不认为这一变化需要3年。

  • 生成代码不等于自主软件开发。人类仍然决定构建什么、引导智能体并监督结果;用 Gur-Ari 的直白说法,“如果拿走人类,不会发生任何好事。”模型还无法仅凭产品需求,就可靠地独立构建出完整系统。

  • 更长期的劳动力需求远不确定。企业仍需要理解系统的人,因为“如果你只是凭感觉编写企业软件,最终会遇到麻烦”;但生产率提升后究竟需要多少开发者,没有人知道。Gur-Ari 无法有把握地预测3到6年后的情况。

  • Augment 仍同时招聘初级和高级工程师,筛选标准是卓越能力;Gur-Ari 预计,在转型过程中,从智能体中提取价值的能力会变得重要。但他给14岁孩子的建议是考虑机械工程、机器人或其他与物理世界紧密相关的领域,因为这些领域可能需要更长时间才会受到冲击。

Erik Torenberg

Today my guest is Guy Gur-Ari, co-founder and chief scientist at Augment, a company using the full range of AI strategies—from autocomplete to RAG to chatbots to autonomous coding agents—to transform the practice of software engineering in large enterprise codebases.

While our first episodes in the Software Supernova series looked at vibe-coding platforms that allow anyone to prompt their way from zero to a proof of concept or basic app, Augment, which was founded in 2022, back when OpenAI’s Codex models and early autocomplete tools were still mostly just foreshadowing a very different way to code, is tackling a harder but potentially more economically transformative challenge: How do you 10x productivity for professional engineers who bring their considerable human expertise to bear on vast, messy, legacy codebases, which often have millions of lines of code spread across multiple projects that can vary in age, coding style, and underlying technical infrastructure?

Unlike personal projects, where one can often simply copy an entire codebase into Gemini’s context window, as Guy explains, the enterprise challenge requires serious technical firepower at all levels of the stack. Augment has spent the last 3 years deeply exploring multiple approaches to code understanding and has ultimately developed a sophisticated, retrieval-heavy approach from the ground up. Their RAG stack includes a custom-built vector database capable of real-time updates, proprietary retrieval models designed specifically for large codebases, code search that fires on every single keystroke for every single user, and custom code-generation models trained with a technique they call reinforcement learning from developer behavior. It also includes multiple product paradigms for delivering code to users, all of which are intensively optimized for both accuracy and speed and available across a number of the most popular development environments.

The results are quite impressive. As you’ll hear, Guy reports that he personally hasn’t written a line of code in months. These days, the coding agent, which I had the chance to use in preview and which will be released to the public very soon, handles all of that, leaving Guy to focus on higher-level issues, including how he and the team can continue to improve the agent so that it can eventually run for extended periods, take on larger projects, and even go beyond explicit user instructions to infer and address unstated needs.

The economics of the business are fascinating, too. Augment’s pricing is pretty conventional today, with $30 and $60 per month plans, but Guy was quite candid about the fact that some power users already cost them a whole lot more than that to serve. Especially as workflows consume more and more compute, pricing in the AI space in general is very much a live question. It helps, of course, to design pricing that aligns company and customer interests, but it’s less clear how best to do that, considering that enterprise customers also value stable pricing and predictable costs. The good news for Augment is that, having raised some $250 million in investment capital, they do have some time and financial cushion to figure that out.

There is a ton of technical depth in this episode, but arguably the most valuable part is Guy’s practical, down-to-earth advice for AI builders. While he and the Augment team have repeatedly invented new technology to solve hard problems, he recommends starting new projects simply by creating small evaluation datasets of just 10 to 20 high-quality, hand-labeled examples that you understand deeply and can quickly test new solutions against. He also recommends optimizing for the speed of iteration by pursuing the simplest available strategies first and then exhausting what’s available in the market before building custom solutions in-house. As regular listeners will know, I wholeheartedly endorse all of that advice.

Toward the end, I asked Guy if Augment is currently hiring junior engineers and, more broadly, what advice he has for today’s early-career engineers and computer science students. His answer, I think you’ll agree, reflects the current moment in the software industry: a sense of excitement and opportunity for the foreseeable future, but also a recognition that nobody can see the future more than 2 to 3 years out.

I hope you enjoy this deep dive into the hard tech powering AI coding assistance for enterprise software engineers with Guy Gur-Ari, co-founder and chief scientist at Augment.

Guy Gur-Ari, welcome to The Cognitive Revolution.

Guy Gur-Ari

Great to be here. Thanks for having me.

Erik Torenberg

My pleasure. I’m excited about this. We’ve been doing a little series that I’m calling the Software Supernova, which is just a nod to how much the software industry is changing. We’re coming at that from a bunch of different angles to try to understand it as deeply as possible.

I think you’re going to provide a really differentiated and interesting angle, because a lot of the stuff that we’ve looked at previously has been people who want to create an app out of nothing. There’s a growing number of products out there now that can take you quite far if you show up with just an idea and want to go from prompt to app in seconds, which is often the promise.

But you guys are coming at the software industry from basically the other end, targeting larger organizations with big codebases and things in production—long-lived projects. I think this will be a really interesting compare-and-contrast to understand the different challenges that poses and the different solutions you’re bringing to the market.

Maybe, for starters, give me a little introduction to the company and that core challenge. Folks who follow this feed are paying attention to AI, but I’m not actually sure how many have been in larger software organizations and would be familiar with the particular challenges that those organizations face.

Guy Gur-Ari

For sure. Augment was founded with that vision of bringing AI to bear on real software engineering challenges that show up when you’re working on a large team and when you’re working on a large, existing codebase, because those are the challenges that the vast majority of professional developers face day to day.

Definitely, the larger the organization and the larger the codebase, the fewer zero-to-one projects people do and the more ongoing maintenance they handle. There’s still feature development and product development, but it all has to work in the context of a large codebase.

Our premise was that we could see AI technology crossing a threshold where it was becoming useful. Back when Augment was founded, autocomplete was a product that was out there, but ChatGPT still did not exist. We could see how these models were getting rapidly better, and we felt that AI could play a big role.

We also felt that, as a startup, if we went after these hard problems of allowing software developers to be productive in their codebases, we could differentiate, because it requires a lot of context understanding. I guess that’s something we’ll dig into more.

Erik Torenberg

There are a lot of dimensions to the problem. Do you want to give me a little sense of how big a typical Augment customer is? You could measure that in employees, number of repositories, or lines of code. How big of organizations are you guys targeting?

Guy Gur-Ari

We typically target organizations that have hundreds of developers. We do stretch higher, so we have some customers who have thousands of developers.

In terms of how many repositories, that really varies from customer to customer. Some customers use monorepos, like we do internally, and some customers use many different repositories, maybe one per microservice. That varies a lot.

In terms of lines of code, I think it starts probably with millions of lines, and then it goes up from there.

Erik Torenberg

That highlights one immediate challenge right off the bat. When I do my own little projects, my default workflow, unless I’m testing something else, is that I’ll usually have the AI write a little script to print the entire codebase to a single file. Then, for a while at least, I can just copy that entire file, put it into the context window, and ask the AI for help.

I’ll take it to o1 Pro to do some planning, or Claude, or now I’ve got Gemini 2.5, which can take me farther, but it still maxes out at 1 million tokens, which obviously isn’t going to handle the whole codebase.

What do you feel isn’t done well, or is sort of missed, by—maybe take Copilot, if we want to pick on one, but you could say other offerings in the market? Maybe you could cash that out in terms of: What are the frustration points, or the places where you see developers just not getting the value that Augment can deliver?

We’ve all seen these one-shot examples: “Oh my God, it wrote this function for me,” and all that kind of stuff. But where does the conventional approach break down in practical terms?

Guy Gur-Ari

From what we’ve seen, if we’re operating inside a codebase that doesn’t fit into the prompt—and today, even if we have 1 million tokens of context length—the ratio is roughly 10:1: 10 tokens per line of code. That only gets us to 100,000 lines of code, which in industry is still considered a small project.

There are other downsides, as the project grows, to actually putting all of that in the context, which we can talk about separately. But I’d say the problem there is that, when you’re working in a large codebase, you really have to keep in mind not just the work that you’re doing as a developer and what you’re focused on, but also the context.

That could be very obvious things, like: I need to call a few APIs, I need to call them correctly, and I need to put in the right parameters. I also need to call them in a way that respects the conventions.

Maybe there are multiple ways to call them. Maybe there are multiple ways to achieve the task that I'm trying to achieve, and we want to be respectful of the conventions that are in the codebase. These are all things that, if you're a developer inside an organization and you've worked there for a while, you're already familiar with—the right way to do it.

But when you ask an AI model to do it and you don't provide it with all of that context, it's going to struggle. Basically, it's going to give you bad predictions, whether it's a bad completion or a bad chat answer. Since at Augment we've prioritized context from the beginning, we have full codebase understanding built in by default to every feature.

If you're getting a completion, it's going to take the context into account, whether that means looking up the function you're calling or looking up other examples of its usage. If you're asking Chat the question, “Where is this function that I used 6 months ago and can't remember what it was?” it's going to search through your whole repository. With agents, we see that this actually matters even more because when you're trying to get these models to achieve more and more complicated tasks in a codebase, context becomes ever more important, simply because there's less supervision from the developer as the agent is working.

Nathan Labenz

Yeah, context, as Tyler Cowen says, is that which is scarce. He said that before we got into the LLM era, but it feels like it's 10 times more applicable to the LLM agents that we're all trying to figure out how to make work for us than it ever was for humans.

I guess I'd love to dig into how you're making this work, because a couple of things have really stood out to me as I've studied the company and used the product a little bit. One is that the blog is outstanding. There's a lot of technical information shared on the blog, and that's an excellent resource for people to get a good sense of what you're doing.

A theme throughout many of those blog posts is really pushing hard on bringing a lot of resources to bear for an individual user. One way in which that manifests, as I understand it, is that, if I'm not mistaken, literally every keystroke that I make fires off a request to the server, which then begins to search the codebase to try to figure out what I'm doing right now, where I am, and assemble the useful context.

So maybe let's get into context management. You could take this in many different directions because I know there's a lot to it. From the second that I open the app—and we could also talk a little bit about how it's an extension of VS Code, not a fork, and there's a whole debate going on as to what's the right way to go to market—maybe you could take that one first if you want.

But when I open the thing and think, “Okay, here's my repository, and I'm new,” what's happening behind the scenes as it's indexing and getting me ready to put me and the app together in a position to really use a lot of compute at runtime?

Guy Gur-Ari

We've actually explored several different approaches to codebase understanding. I think the approach we landed on was the third one that we tried, and each one of these was a multimonth research project to try to figure out whether we could make it work. What we landed on at the end could be described as RAG.

What happens behind the scenes is that we upload the code, we have our own custom-trained retriever models that we train for the purpose of codebase understanding, and then we index the code using these models. That's what happens when you open Augment and it says, “Indexing your codebase.”

Once that's done, on every keystroke and on every chat request, we send a request to the model. Part of processing that request is figuring out which parts of the codebase are most relevant to show to the model so it can make the best possible prediction for the user.

There's quite a bit of speed optimization that goes into making all of that fast. It's one thing to index a large codebase in the background, but it's a whole different story to say, “Okay, this completion request needs to finish within, let's say, on the order of 300 milliseconds.” That needs to account for both retrieving everything that's relevant from the codebase and actually making the language-model call to generate the completion.

We prioritize both quality, so that the retriever is good and, end to end, it actually feels like it understands your codebase, and speed, because to us, speed is a super important feature of the product.

Nathan Labenz

You can obviously calibrate exactly how much you want to share about the details here. I recently did an episode with Andrew Lee of Shortwave, and they have a pretty similar approach. You sign up, and the first thing they do is ingest your entire Gmail history, which can be a lot. Then that goes into their database.

He's a database guru, and he told me—and I don't know if you'd feel the same way—“Well, yeah, we can pretty much tell all our secrets because by the time anyone figures out what we've done and tries to recreate it, we'll have a whole new generation.” I'm not sure if you feel quite as confident on that dimension and would be willing to share how things currently work, but to the degree that you can—long preface—I'd love to understand a little bit better how you're chunking code.

I think people have broadly come to frustration with RAG, and there are a number of different reasons for this. Sometimes you can fail at every step. How are you chunking? When you get a hit on a chunk, are you then expanding out to make sure you have the surrounding context that's needed, so it's not just that one function out of a broader class loaded in isolation?

There's context management, and then there's effective context management. I guess that's what I'm really trying to get at. How do you make it not just fast, but actually good, so it has the right information that it needs?

Guy Gur-Ari

I probably can't be as open because I do believe that there's quite a bit of secret sauce in what we do. It is true that getting RAG to work well is very challenging, and in my experience so far, getting it to work well on code is even more challenging than in other domains.

To give an example of why that is, let's say I'm starting to type a piece of code, and let's say there's enough context there to understand what it is that I'm trying to do. Maybe there's a comment or something, although often there's not even that. My cursor is sitting there, I'm trying to get a prediction out of the model, and we need to know which pieces of code are relevant to make that completion.

This is a very different situation from a chat or question-answering system, where the user is asked to provide the context for the request. You start with an instruction or a question. You have a lot of context for understanding what it is that you're going to be looking for in your knowledge base.

With code, at least with chat, you have that. With completions, it's more passive. We're trying to both infer what the developer is trying to do and then figure out which code is relevant.

Let's say we—or the model—figured out that we need to call a function. Then the question becomes, “What pieces of code are most relevant to help the model make that function call correctly?” We could pull up the function signature. We could pull up example usages of that function. We could pull up other pieces of code that maybe serve as counterexamples.

Another thing about codebases is that they evolve over time, and we see a snapshot of the codebase. If we're pulling up examples, those examples could be new, or they could be obsolete and just left around in the codebase. The developer may not actually want to call them that way. So it's an extremely challenging problem.

What I can say is that we use a mix of different techniques. We use RAG, we use some amount of static analysis on code, and there are multiple models at play to provide the best possible context to the model. We also often let the user steer, because these systems are not perfect. We need a way for the user, especially in chat, to say, “Okay, I'm actually pointing at this directory,” or, “I'm pointing at this file.” This can also indirectly help steer the retriever.

There are multiple things at play. On chunking, there are definitely better and worse ways that you can do it, and it's true that code has more structure that you can hang on to. What I can say is that improvements in chunking are more to solve problems that are in the tail. Maybe I can say it like that. If you have strong retrievers and strong models, chunking shouldn't be a blocker. Yeah, I think I can say that.

Nathan Labenz

So, yeah, one thing that jumps out to me there is how you started with the assumption that the user is typing code into an IDE in the traditional way. This may also tie back to the go-to-market as an extension of VS Code, as opposed to a fork.

I'm so AI-pilled myself and always trying to do 2 things at once. Usually, I'm trying to accomplish some goal in a project, but also learn about the latest AI capabilities or use Augment or whatever. I'm always looking for these two-for-ones, and I think that probably puts me in a very different pattern of behavior from what you typically see. As I've been using it over the last few days, I've done it entirely through the chat panel, and I basically don't really—almost never—get in and start typing functions myself anymore.

Where are people on that today, generally? What is the balance of approaches that you're seeing? And, by the way, I'm sort of a mid-programmer, which is maybe why I'm so drawn to the chat experience. For the pros, what's the balance between those who are working the old, traditional way, file by file, and getting this assistance proactively served up to them, versus those who are saying, “Okay, I want to interact with an AI and have it help me, but I'm going to give it an assignment in a sort of chat or agent-type paradigm”?

Guy Gur-Ari

Yeah, there's definitely a distribution. I think when we were talking about completions and chat, we noticed that there do seem to be 2 camps of developers, and of course there's a lot of overlap. I doubt there are many people who only use completions or only use chat, but there are certainly developers with a preference for being a lot closer to the code, I would say, who don't use chat much but really love completions. Now, also, Next Edit is kind of a way to—okay, you get completions; they might be away from your cursor, and they can delete code and edit code, not just add code. But it fits in very nicely with the workflow of developers who want to keep their focus on the code.

Then we see a lot of developers who really only use chat. That is fairly common. The thing that's changing now is that, as we're building agent mode, you can take another step away from the code and really let the model edit multiple files and run your tests. You're taking another step away and supervising everything, and then you can dig into the code when needed.

This is something we've seen: when you work on a large codebase, you pretty often have to go back to looking at the code and making some changes yourself. That's pretty frequent, which is quite different from the zero-to-one experience that I think we talked about before. So, I would say that for large codebases, as far as I can tell, most developers are comfortable being in chat a lot of the time and using completions and Next Edit. The switch, or the move, to a fully autonomous agentic flow will take longer. I think agents and models will need to improve before that becomes the default mode for enterprise developers. Let's say it will take longer, but I feel like that's the direction we're going in.

Nathan Labenz

Yeah, certainly. This can get into almost ideological territory very quickly, but I'm sure for you it's much more a practical question around extending VS Code or doing a fork. Is that a matter of meeting developers where they're comfortable and not asking them to change too much, or are there other big decision drivers that have you in the extension paradigm?

Guy Gur-Ari

Yes, I think it starts from meeting developers where they are. We have a VS Code extension, a JetBrains extension, and Vim support. This is really about not wanting to force developers to change how they work.

I think with the forks, these are all VS Code forks because VS Code is open source. You can say that if you switch from VS Code to a fork, you're not changing your workflow that much. But if you're asking a JetBrains developer to switch to a VS Code fork, that's a pretty substantial change to their workflow. That's one consideration.

I would say there are also other considerations with the fork. Doing a fork means you need to keep up with updates, especially security patches, which becomes extra maintenance work that you have to do. Especially if you're selling to enterprise, these security considerations can matter.

Now, the downside of not having a fork is that there are certain UI things that are harder to do or sometimes impossible to do. Although I have to say that with the VS Code API, we've been able to do a lot within VS Code. I don't think this has been a very substantial limitation. Sometimes we've had to work harder because we can't just go and change the VS Code itself.

This is another place where I suspect that the more we move to agentic flows, the less we have to do inside the text editor. Once you're building an agent inside VS Code, you have a lot of freedom in what to do because you can open panels, put webviews in there, and have full control over what's happening. So, my sense is that this distinction is going to become probably less important over time, but I can't promise we won't do a fork at some point. There's certainly a trade-off there.

Nathan Labenz

Yeah, that's interesting. The point about security and being able to piggyback on all the hard work that Microsoft has already done to establish trust definitely makes a lot of sense. I've had enough experience with the security review processes at enterprise customers—not nearly as much as you've had, but enough to know that it's not where I want to be spending my time. To the degree that you can shorten that process, it certainly has a lot of appeal.

Guy Gur-Ari

Yeah, exactly.

Nathan Labenz

So, going back to retrieval—and again, you can calibrate your answers however you want—but for practical guidance for other people building their own RAG apps, do you have a favorite vector database?

Guy Gur-Ari

So, we actually built our own vector database. I can explain why we did that. There was nothing out there that we found at the time that addressed all our requirements.

What do we want the user experience to be? We want the user to feel like the model understands their whole codebase, and we want it to feel like it understands the current state of the codebase. So, if I just wrote a function in a file, or had chat write it for me, and now I ask chat, “Okay, implement the tests,” or I go to a test file and start typing a completion or a test, we want the model to understand that this is something I recently did and have it all indexed and available.

That means giving every developer—or giving the model—a real-time view of every developer's codebase. It has to be real-time, or feel like real-time, and it also has to be different for every developer, because if I'm a developer on a team, I work on my feature branch and you work on your feature branch. We cannot have those things mix. That's also a security requirement.

In terms of a vector database, you need something that allows almost real-time updates to the index, which is already a significant requirement for a vector database.

And it also needs to be able to have queries based on different views, right? I have a slightly different set of files that I'm retrieving from than you, but we still want to deduplicate. We still want to have one database that captures our repository, and not deduplicate that for every user on a team. We did not know of a product that did all of that.

And there's a technical reason for it. Typically, the way vector databases work, when you query, it's pretty expensive to do a full query every time, and so you apply some kind of statistical algorithm. Maybe you cluster your embeddings and search in the cluster. There are all kinds of ways to do that.

Taking that kind of approach, or one of these standard approaches, means that it doesn't work well both with indexing or updated indexing, because updating the clusters can be expensive. Also, views or queries based on views are hard, because if you're doing a statistical query and you only have a subset of the files that you're retrieving from, you might miss them completely when you're doing a statistical query.

And so it was certainly a difficult engineering problem to build a vector database for us. We still keep iterating on it, especially as we have customers that have larger and larger codebases. We need to keep scaling up solutions. So there's a project ongoing right now addressing scale requirements with repositories for us. But, yeah, we ended up building our own.

Erik Torenberg

It's fascinating. I guess you started in 2022. Is that right? Yes. Yeah. It may or may not be different today. I wonder, this sometimes strikes people as crazy when I float ideas like this, but that almost sounds like a product unto itself. Have you thought about that?

Guy Gur-Ari

It's come up. The thing is, when you build an AI lab and then an AI product on top of that, you run into many things that can become a product on their own. One of the challenges is to stay focused and have a concrete vision of what we're trying to accomplish.

So this comes up as, “Oh, this could be a product.” This comes up as, “Oh, should we fork?” And then, well, who are our users really? Who are we catering to? Are they going to want to fork, or are they going to want to prefer their IDE? There are questions like this that come up all the time, especially with something like AI, where it's a completely new technology that keeps improving rapidly, and you have to keep up with what's happening and make the right bets.

Short story: yes, I think this could be a product, but we're trying to stay focused on building the best AI assistant we can for developers.

Erik Torenberg

Are there any—you probably haven't kept up with the evolution of other vector databases—but for people who are trying to pick one, so many people right now are at the stage of either embarking on a sort of RAG app for their business, probably for internal use, or maybe they've made one and it's not quite working well enough, and they want to take the next step with it. Are there any general guidelines that you would give people for how to make this part of the system work?

One that I have in mind—it sounds like you kind of have a version of it—is that I personally would almost always insist on some sort of hybrid, like structured query plus vector. At the beginning of this RAG wave, people were just doing pure vector search, and that seemed to be kind of a mess. Having some ability to do a classic SQL-style WHERE clause along with the vector similarity, whatever, seems important to me. But I wonder what your lessons or guidance for the masses would be based on all this experience.

Guy Gur-Ari

Yeah. I would treat this as a research problem and start with some off-the-shelf vector database, unless there are pretty clear engineering requirements that would preclude that. We have, I'd say, pretty special requirements, because it all has to be low latency and so on. I don't think most RAG implementations need all of that, and so I would probably start with some off-the-shelf vector database.

I would focus more on the quality. For the quality, one thing that's pretty important is to have an evaluation dataset that you trust. It doesn't have to be a huge dataset. You can start with even 10 to 20 samples labeled by hand. That's how we start most projects.

Actually, most research projects will start with collecting 10 to 20 samples labeled by hand and then start with some baseline. Take an off-the-shelf retriever—whatever is easiest to use—run it on your evaluation, and get a baseline of how we're doing. Are we solving 20% of samples? Are we solving 80% of samples? Probably it's going to be somewhere in between. Is that good enough?

Start iterating from there and hill-climbing on your evaluation dataset. When the evaluation gets saturated—basically, when you've managed to solve it—expand it. Add more samples, make them more diverse, and make them harder. I think coming up with good evaluations and being diligent about running those evaluations is, in some sense, one of the hardest things to do in research—not because the work is so hard, but because it can be pretty tedious. This is the way to get to good results.

Starting with that, things become straightforward in terms of, “Should we just do vector? Should we do structured queries?” Well, let's try it. Everything becomes an experiment. Let's try it on the eval set, and the eval set will tell us, because we're basically reducing the problem to hill-climbing on an eval set. That is the ideal situation.

I will say, certainly, doing pure vector—let's say it like this: real-world retrieval systems are almost never a single thing. It's almost never, “I'll just do embeddings, and I'll work on the embeddings really hard, and I'll get the best embeddings, and they will solve the problem.” That almost never happens. It's usually a mix of different techniques. Vector and structured search could be combined with any other signal that you can bring to bear on the problem.

The models today are good enough that you can actually throw a lot at them in the context, and they will deal with it. In some sense, recall becomes more important than precision. You want to make sure that the right chunks are in the context. That's really, today, with modern models, the thing to prioritize.

Now, I described the ideal situation where you can come up with a dataset that you trust, and all you're doing is hill-climbing on that dataset. It's very important to start like that, but at some point, necessarily, your evaluation dataset is going to diverge from optimal user experience.

I've never seen it otherwise. This has happened in every one of the projects that I think we've done. It's really hard to capture user experience and map that to one number. Not just because there are multiple axes, but also because we don't really know how users use AI products. There's a whole distribution of what they put into the prompt box, and there's a whole distribution of what they expect to get out. You can't really boil it down to a number. And so once you have something, dogfooding is crucial for understanding where you are.

And then once you have users, user feedback is crucial. You have to take all these things into account. I would recommend starting with an eval set, but then understanding that you also need these other sources of feedback to iterate. That, I think, is a quick summary of best practices for how to go about this. Once you're able to reduce all these questions—basically, the place you want to get to is: can you turn all these questions of what to do from philosophical questions into experimental questions that you go test? Then that's when you can iterate and really move fast.

Nathan Labenz

Yeah, that's great. It is striking to me. For whatever reason, I find myself doing more projects where there isn't quite a ground truth that's so easy to hill-climb on. With my company, Waymark, we do video creation for small businesses, and there isn't a single answer to what the right or best script or voiceover script, or selection of images, is for a particular small business. There are definitely better and worse options, and sometimes it's very obvious; other times, it's the subject of disagreement.

We've definitely had plenty of cases where we ask 2 different people, and they see that one is better than the other. It's not unanimous in most cases, but it is definitely enviable, from that perspective, to have these almost irreducibly vibey tasks. The idea of being able to just climb a hill is quite attractive.

But in both cases, I do think it's really important for people to keep in mind that you can start, and you should start, with a pretty modest-sized data set. I have a whole presentation that's much more about the social side than the technical side of getting your team on the same page about what 10 instances of a task that are really well done look like. It's amazing to me how often that ends up becoming the stumbling point.

I think it is often because of what you said: that's just tedious, and they also don't have any chain of thought, which is sometimes really helpful if you want to do a supervised whatever. I'm on the verge of the soapbox. But, yeah, 10 examples will take you far. If it's objective, great. Even if it's just a vibe task and you're demonstrating what a job well done looks like, 10 examples is the first place to get to. From there, the world can open up a lot more.

Guy Gur-Ari

Yeah, just to add to that, 100%. The big advantage of having these few examples before you go to hundreds, if you can, is that you become very familiar with them. You can hold them all in your head, and so the labels—the ground truth—is less important. I'd say you can still hill-climb on 10 samples even if the evaluation procedure is completely manual.

I just trained a new model, or I have a new RAG setup. I will run it through the 10 samples. I will run the before model and the after model, and I will compare them by hand. I don't have to boil it down to a number, but I can also go based on vibe. So I agree with you that the real minimal thing to start with is 10 samples. The number can come later. I totally agree with that.

Nathan Labenz

One other thing you said that I thought was worth re-emphasizing, too, is that the key thing is to make sure the model has what it needs. Worry less about other considerations, like distracting it with wrong information. This is, of course, evolving quickly, because that used to be a much bigger problem not too long ago. As you said, modern models—the word “modern” is important—are what everybody should be using, but our expectations aren't necessarily always keeping up with what the latest models can do.

One way I generalize that for people is: turn your hyperparameters up. In general, you typically have a choice in a lot of these RAG-type setups of how many chunks you're going to take. Are you going to take the top N chunks? Or, if you're going to expand out from a chunk, how much should you expand out?

From what I see developers doing, they're leaving all those settings too low. The right thing to do is usually turn them up. Yes, that might make it slightly slower. It will make it a little more expensive, but I don't know if I can think of any exception where turning those things up didn't more than pay for itself, even with those marginal cost increases, in the sense of the time savings you get from getting to something that's working better.

So I don't know if you have any exceptions you would put on the “turn your hyperparameters up” rule of thumb. From the blog, it does seem like you guys are definitely asking, “How can we use all these things to roughly the maximum?” But I'm interested in your take on any nuances you would add to my simple rule.

Guy Gur-Ari

No, I fully subscribe to that rule. You just have to be aware of the trade-off between latency, cost, and quality. It's really as simple as that. If you're okay with the extra latency and cost in a RAG context, it's just better to show more, because these days the models have been trained to deal with it.

It didn't used to be the case—definitely not 2 years ago, maybe not even 1 year ago. I'm not sure, but roughly around that time is when models got the RAG training to be able to deal with a lot of distracting information. And so that scales really well. I expect we'll just continue scaling, because the attention mechanism in transformers is basically built to do that. It's built to sift through all the noise and focus on the relevant parts. With sufficient training, it makes sense that it will work.

I think I've also seen this bias toward putting less in there, especially if you're coming from a background of using models the way they were 2 years ago or before. You had to be a lot more careful with your tokens, but that has changed. If we're focused on RAG, then, yeah, I think that's just the right answer, and it also certainly makes the research much easier, because improving the recall—that is, improving the ability of the model to find the right chunk within the first 50 or 100 or something like that—is doable.

Improving the recall if you have fewer chunks—if it needs to land in the top 10 or something, or top 5—that task becomes exponentially harder, basically, the less context you have. So if you can give it the room to do it, then the research task becomes much easier.

I can say the place where adding more context doesn't seem to scale yet is with instructions. Giving the model tons and tons of instructions that you expect it to follow, in my experience so far, doesn't scale that well. It will start ignoring instructions if there's too much in there, skipping steps you asked it to do, and things like that. But that's not a RAG problem. That's just a different kind of prompt-scaling problem where models are not yet good enough.

Nathan Labenz

Yeah. Okay, that's a good point. You mentioned training. You've trained your own retriever models. This is something that I think—I don't want to bias your answer too much—but my sense is that a lot of software engineers and AI engineers are attracted to the notion of, “Well, of course we're not going to pretrain from scratch, but we'll grab some off-the-shelf thing and customize it for our own purposes.” I wonder what guidance you would give people on when that is, in fact, a good idea.

I once made the bell-curve meme of what's genius, what's dumb, and what's in the middle. My thing was that, on the extremes, you should just use OpenAI embeddings, and in the middle was, “Oh, well, we'll do this complicated thing. We'll fine-tune our own blah, blah, blah, blah, blah.” It's worth it for some. You're in that situation where you have a lot of resources and a very ambitious project, but where do you think it starts to become worth it to take on that sort of challenge versus just using the best off-the-shelf thing you can find?

Guy Gur-Ari

Yeah, that is a very task-dependent question. Anytime you do research, I think there is just a general human tendency to reach for complicated solutions too quickly. My recommendation would be to try hard to bias toward simplicity. The simpler, the better, and rely on your evaluation—either vibes-based evaluation or numerical evaluation—to guide you.

I'd say, again, it's hard to give general answers, because the answers are going to be task-specific. So I'd rely more on establishing a solid process for finding the right answers for your particular use case. That starts with an evaluation set that you're comfortable with, that you mostly trust, and that you can run through different iterations of your model or your system to test.

The other thing that I think is important to optimize for is iteration time. The faster you can run experiments, the more likely it is you'll find something that's good enough or something that's better than what you currently have. So experimental iteration time is something that's very much worth thinking about.

Taking experimental time down from hours to minutes can have a lot of impact on not just how fast you get to a solution, but also whether you even get to a solution. Cranking through 100 experiments versus cranking through 10 experiments, the chances of you finding the right thing in those 100 experiments is just much higher.

It's kind of like the RAG problem. What's your chance of finding the right chunk in the top 100 versus the top 10? It's just much higher. It's also like that with experiments. So if you can afford to run 100 experiments, then you're going to try 100 different simple things.

Maybe you're going to try SQL-style queries. Maybe you're going to try 5 different open-source models, and maybe you'll try OpenAI embeddings plus other things. You'll find that one of them, for some reason that was really hard to predict, actually works better for your use case. So I'd prioritize experimental iteration time and being able to actually trust the result of an experiment, with an eval set to tell you the answer.

And once you've tried some simple things and nothing seems to work, I think another thing that process gives you is a kind of feel for, “It looks like nothing out there is really doing what I want. Maybe I should start thinking about fine-tuning an open-source model.” Or, “Okay, this isn't exactly there, but it's kind of close. It's not that far. Probably, if I keep going this way, I will be able to make it good enough without fine-tuning.”

That's the sort of information you get by doing a lot of experiments. So my suggestion would be to do that and then let the experiments tell you which way you need to go and when.

Erik Torenberg

Okay, cool. That's great. There is so much that I wanted to cover, and I don't think we're going to get to all of it. So I'm going to have to start to pick and choose, and then I'll refer folks to the blog for some deeper dives on stuff we don't get to.

But one thing I definitely want to cover is reinforcement learning from developer behaviors. Obviously, reinforcement learning on language models in general is having a moment. The floor is yours. Tell us about reinforcement learning from developer behaviors.

Guy Gur-Ari

One advantage that we have as a company that both does research and builds a product for users is that we are very close to our users. We get feedback from them on Slack and Discord, and they also send us their data.

Now, for enterprise customers, we do not look at that data. Of course, everything is audited and behind access controls and so on. But we do have a free community tier that's for anyone who wants to use Augment. It could be on open source; it doesn't have to be on open source. Anyone who's comfortable with us looking at their data and also using it for improving our own models can use it. So there's a very clear separation between those two things.

But on our free tier, certainly, we find value from that data because one of the things that's universally challenging about building AI products is that we don't really know the, let's call it, input distribution or task distribution. What do users want to do? How are they trying to use the product? What do they expect to get out of it? By collecting this data from the free tier, we get a glimpse into that.

And in fact, for coding, we get more than a glimpse. That's one of the nice things about coding: it's quite different from a chat interface, right? In a chat interface, the user asks a question or assigns some task, gives an instruction, and gets an answer. They can continue steering, but we don't know what the ground-truth answer was. By comparison, if they're working on code in their IDE and we follow what's happening in the IDE, we eventually know what they were trying to do, because this is where they actually work.

The way this connects to reinforcement learning is that the idea with reinforcement learning is that you're not just training the model by showing it examples of what to do. You're actually showing it contrasting examples. Every sample contains an input, and then it contains a better and a worse output. The model learns from that contrast to do better over time.

This is a very powerful paradigm because it means that it's not just that there are correct and incorrect answers. There are better and worse answers. You see that in coding just like anywhere else. The answer could be correct in the sense that the algorithm is correct, but it could have the wrong style. Maybe that's not what the developer prefers, or maybe the style does not align with the rest of their codebase.

There are actually multiple axes on which a sample can be better or worse, and that's the kind of signal that reinforcement learning tries to capture. We've applied that technique initially to the completions feature. That was kind of our first reinforcement learning project, where we used examples from the model and what we know from the user in order to improve the model and align it better with what users expect through reinforcement learning.

We ended up with a better completion model because of that. I mentioned that we train retrievers, but we also train the generation models that we use for completion and next edit.

Erik Torenberg

Yeah, there's a lot that I'm interested in digging into more deeply there. I guess, for one thing, have you benefited from DeepSeek and other recent algorithm releases? I think it's safe to say that GRPO broadly has blown a lot of people's minds. Did it blow your minds, or did you feel like you already had a pretty good read on what was working such that it wasn't such a revelation for you?

Guy Gur-Ari

The algorithm itself, I don't think, was—I'd say there were known problems with existing RL algorithms that every subsequent iteration addressed. So I don't think GRPO for us was a revelation. It was more of an iterative improvement.

I think the DeepSeek work was remarkable. They actually implemented chain-of-thought reasoning training. It was super impressive work and a very nice paper. I wish they shared more details on how they did it, but I still enjoyed reading the paper.

We do benefit a lot—not from that particular work, but I can say that we don't train models from scratch. We made a bet very early on that open-source models would rapidly become better. That was at a time when open-source models were really not good. This was long before Llama.

I previously worked at Google and worked on some of the training of large models. It was clear that this is something open source could do, because at least at the level of training base models, and now also beyond base models—actual instruction-tuned models—there is almost a playbook for how to do it.

If you have the resources and the people who know the basic techniques, which are for the large part in the literature—you can read papers and learn how to do it—then you can train very good models. So we made that bet early on. We don't train from scratch. We do a lot of post-training on models for retrieval and generation, and we definitely benefit from open-source models coming out. We generally try to keep up by basing our models on the best available open-source model that's out there.

Erik Torenberg

This particularly caught my interest, this reinforcement learning from developer behaviors, because I've been looking for something like this to emerge for a while. My sense is that the compute requirements for reinforcement learning aren't so crazy, and the datasets don't even have to be so huge. It seems like a lot of product user bases, or just communities in general, if they're passionate about a certain subject or whatever, could gather enough feedback or behaviors from people to power this sort of thing.

I haven't seen too much of it, and I was wondering why it wasn't happening. Now it seems like it is happening. I wondered, though, if you could shed any light on where you think it's going in particular.

One might think that the fact that there's not a true, absolutely canonically right answer, as there is in a math problem with a numerical answer, would suggest that maybe this process would top out at human level and might not go past human level. How would it go past human level if it's learning from humans?

The flip side of that also would be that it would seem like this approach would be very extensible to reinforcement learning from lawyer behaviors, or reinforcement learning from doctor behaviors, and other—basically anything where you can gather enough data that's pretty trusted, even if it's not absolute bedrock ground truth.

What do you think? Is there a top-out that we should be thinking about, and is there any sort of limit on the breadth of how far these sorts of approaches could generalize?

Guy Gur-Ari

I guess I have a few thoughts. First, if we think about the trends we've seen in the beginning—start with GPT-2 and then GPT-3 and the scaling loss trend—what was the trend? There was a whole lot of data out there on the internet. Let's get as much of it as we can, process it properly, clean it up, and filter it, because there's also a lot of garbage out there. But basically, that was the first resource that large language model training reached for.

I think at this point that data resource is more or less exhausted. So what can we do? There are roughly three things we can do, let's say. One is synthetic data. We know that we can generate more data out of these models to train new models, so that's certainly one approach.

Another approach is to pay contractors to give us the data that we need. That's how most RLHF works. That's how you train something like ChatGPT, essentially, if you don't have any other data sources.

And the third is user data. If you have real user data, if you can figure out how to use data from users who are using your product to do real work, that's in some sense the holy grail, because that is the closest you're ever going to get to the actual distribution of what users are trying to do. It is what they're actually trying to do.

So there's no distribution gap in that case, if you can do it well, between the data you're training on and the data you're going to encounter in the wild at test time. I think the reason we haven't seen more of that is that there aren't that many products that are amenable to it.

So I think if you imagine beyond coding—doctors, lawyers—what do they do where you can actually get the ground truth? If they're editing a document, you can get the ground truth just like you can from an IDE. If they're using a chat interface, it's a lot harder to get the ground truth. Maybe you can guess at the ground truth because maybe they tell you, "No, no, no, that's not what I meant. Do this or that." And then you can, but there's a lot more work that you have to do to extract the ground truth from something like that.

I do believe that as we exhaust the available information on the internet, user data is just going to become a lot more valuable, and people will pay more attention to it.

In terms of tapping out, I would just say that everything we've done so far has been training models based on human data. There's nothing really new here. All the data from the internet is human-generated data. RLHF is human-generated data. We can automate some of it, so we can throw models in there and let humans supervise at a higher level, but human supervision is always there so far. In the future, if we want to break away from that, we need some other source of signal. We need some other source of reward for these models.

That's where I think code is probably the place where it's going to come first, because the thing that's special about code is that you can execute it and get feedback from that. So I can see how, in the future, we'll be able to do that, and some of it is still happening. If you look at the way DeepSeek was trained, they don't say a lot about how they did it, but they do get feedback from code execution for RL purposes. It's a very natural fit.

For code specifically, I think we'll be able to do a lot more of that. For other domains, we'd have to find something else. If you're asking the model to write a story or a poem or an essay, how are we going to automatically assign a reward to that if we don't already have a better model that can judge what this model did? Right? So that's where I can't think of a way to go beyond human capabilities there.

But when you do have a ground truth that's separate from humans—code execution, maybe for science this could be experimental validation, things like that—then we'll be able to, at some point, shift away from humans and rely on these other reward signals.

Erik Torenberg

Have you seen any reward hacking in your reinforcement learning from developer behaviors?

Guy Gur-Ari

In our reinforcement learning? No, I can't think of an example. There was nothing as spicy as that. The mistakes were just not understanding what the user wanted; that was, I think, the most common mistake.

Erik Torenberg

Okay, we'll keep an eye out. We're all looking for reward hacking. We should be these days, I think. So let's see—just prioritizing, kind of triaging a little bit. Maybe shorter answers, if that helps.

Guy Gur-Ari

No, you're doing great.

Erik Torenberg

Maybe a minute on just the economics of businesses like this. It's public, and again, you can go into as much depth as you want. It's public information that you guys have raised $250-ish million. I looked on LinkedIn; I saw 100 employees. Perhaps not everybody's listed there.

But if I were to just do traditional SaaS app math and take a multiplier of employees times some Bay Area salary and then try to calculate a runway, I get to a really long runway. And that's before any revenue, and it sounds like there's quite a bit of revenue. So what are you doing with the money? Are you burning a lot on training models? It sounds like if you're not pre-training, that doesn't seem like it would be. Are you subsidizing users? You are subsidizing open source.

So, yeah, maybe to the degree you can, I'd be really interested to hear about the economics. And then a slight extension of that would be: Is there a 10× more expensive version of the product that you could dream of or imagine? What might that look like?

Guy Gur-Ari

Yeah, it's a great question. One thing we've learned is that AI is different from the SaaS businesses we're all used to thinking about. You're developing in your basement, you set up a Google Cloud project, you start serving users, and it's all very—it's pretty cheap, I would say. Your main cost is salaries and so on. But AI is more capital-intensive. There is the training, but inference is also very expensive. Serving all those requests at every keystroke, then the chat requests, and now the agents—it gets expensive quickly.

There's some amount of subsidizing users, like in the free plan, and I think everyone in the space is trying to figure out the economic model right now. On the one hand, usage is exploding, and I think it's going to accelerate dramatically. Models are getting cheaper, but they're not getting cheap. It's not matching the pace at which usage is growing. A given model is getting cheaper, but people always want to be on the latest model, and that's not getting cheaper as quickly.

All these factors combined mean that running an AI company, both if you're training your own models and if you're not, can get pretty capital-intensive. That's the short answer.

Now, on a more expensive product, if you look at the shift, we're launching our agent feature. The cost of agents compared to chat, for example, is a substantial jump, because with agents you give it one instruction and then it goes. That will probably generate 10 or more language-model calls, including large calls for editing files and running whole commands, then parsing their outputs and doing all those things, all from a single user instruction. And that's at a point where we are giving users a single agent in their IDE. So it's just going from chat to one agent.

On the other hand, the value is clearly there. I can say personally, I have not written a line of code in several months. I've been using our agent; it has written a lot of code. I personally have not had to. The value is very obvious with these things, and it's super early.

I expect usage of agents to explode over the next year and, with it, the cost. If you're talking about a large jump in cost going from chat, let's say, to agents, I expect there to be a jump that's at least as high once we're able to unlock the full value out of agents. I don't think that cost decreases in models are going to keep up with that. So cost does become a challenge. The whole thing is just very capital-intensive, and cost is actually a major factor, unlike traditional SaaS businesses, I think, where it's not as much of a factor.

Erik Torenberg

Are you managing your own clusters? Are you actually buying all the GPUs and managing them in-house, or are you leasing or renting from someone else?

Guy Gur-Ari

No, we're leasing. We're not in the business of managing data centers. We're leasing the GPUs.

Erik Torenberg

So does that translate to a higher price point at some point in the future? My rule of thumb has been that I think companies should expect to spend $1,000 a month on AI to augment their employees—no pun intended—in the not-too-distant future.

I personally am probably halfway there just with stuff that I've signed up for. Your prices are $30 and $60 a month, and it feels like, if I'm right, you should probably be 5× to 10× those prices. But I don't know. Is that where you think it goes or not?

Guy Gur-Ari

I don't have definitive answers. To me, these are open questions. There's even a question of whether it should be a fixed subscription price or more of a consumption model.

Our current pricing model is somewhat consumption-based. We sell credits, and if a developer uses the product for a given month, they consume a credit; if they don't, they don't consume a credit. That's different from the more common seat-based pricing, where you just sell seats and pay no matter whether users use it or not.

So we already took a step in this direction of consumption-based pricing, which was meant to really align our interests with those of the users: you use it, you pay; you don't use it, you don't pay. I expect, because of the cost, we're probably going to lean—my guess is more heavily—into that model, but I'm not sure yet.

So this question of whether it's going to be $1,000 a month—maybe we'll end up there—or maybe we'll end up with a different model that's more aligned with how users actually use it. What I can tell you is that there's a very wide distribution in how users use these things. There are absolutely users who will justify a $1,000-a-month price point even today, and then there are users who don't. They just don't use it as much. So I think we and everybody else are trying to figure that out.

Erik Torenberg

Let me throw another thing in there. I think right now we're all just thinking about user-driven agents, let's call them, or interactive agents, where the developer is kind of there. Maybe they go get a coffee and come back because it takes the agent a few minutes, but it's a few minutes, and the developer is kind of staying up to speed with what the agent is doing.

I think things are going to evolve rapidly over the next year, and it's not even clear to me if that will continue to be the dominant use case.

Guy Gur-Ari

I'm pretty sure we will have agents that run for hours, overnight, or over days to accomplish tasks. I'm pretty sure we will have agents that work on non-user triggers. Maybe it's API calls, or maybe it's an agent that goes and does code reviews for you and things like that that are not just run automatically. If you're in that world, then you're not even talking about per-developer pricing exactly anymore, right? You're kind of putting intelligence into a lot of tasks that are not triggered by the user, or maybe there's a wide variance in the cost of what the user triggered.

I think the pricing model is going to have to adjust to that, at least in the short term, until all this stuff becomes super cheap. So, yeah, it's a complicated question, and I don't have a good answer for it. All I can say is, it's a good and complicated question that we're definitely thinking about.

Nathan Labenz

Yeah, I think it feels to me like aligning interests with users is hard to go wrong when you're generally keeping that in mind as a true north. The thing that I am always allergic to is when I feel like the product is not performing as well as it could for me because I've got some fixed price, and they're trying to keep my cost to them under that price to maintain a margin. And it sounds like you're not doing that by basically accepting the fact that you'll have some $1,000-a-month-cost users and figuring you'll figure that all out later.

But, yeah, I definitely want to be that $1,000-a-month user, even if I do have to pay for it. What frustrates me is when I can't be, because I'm locked into a more conventional price point. So, okay, time is short. Maybe 2 more questions if we can fit them both in.

One is that you guys have a blog post on why you think RAG. It's multiple predictions, but the one that jumped out most to me is why you think RAG will trump fine-tuning. And here I wanted to just super quickly sketch an idea that I've been chewing on for what the drop-in knowledge worker of the future might look like and kind of get your reaction to it. Then the last one is just the future of the software industry: What should junior developers do as well?

So, drop-in knowledge worker. We've covered the RAG stuff: What's hard for the models today? They don't have context, and I always feel bad for them in some ways, because when I'm searching through my Gmail or my Drive or my codebase, one huge advantage I have is that I kind of know what's in there, and I know when I've found it. In contrast, the models today just get what they get, and they sort of have to do the best with whatever is returned, right? You can turn up hyperparameters, and that helps, but they don't know in general, “Have I found the right thing? Should I keep searching?”

And so I have this sense that continued pre-training is maybe one way to describe it on a company's proprietary data. Basically, try to get to the point where the model knows the company from an inside perspective as well as the models today kind of know the world at large, and then continue with your post-training, your behavioral refinements. But try to get to a point where the model knows, “Yes, I actually found what I'm looking for. This is the ground truth that I needed to go on this task,” or not, and therefore I'm going to keep searching and maybe using different tools until I get there.

What do you think? Does that seem too far-fetched, or how would you generally react to that vision of continued pre-training, so I know, “Yes, I found it,” or maybe that is not necessary for some other reason that I don't see?

Guy Gur-Ari

Yeah. So, I can say there are a few challenges with that approach. One challenge with continued training is that, even though training is very sample-inefficient in that you need a lot of data for the model to learn something, typical company knowledge bases are too big to put in the context window, but they are not large in the sense of training data sets. They're actually typically pretty small. So, if you think of a typical code repository, it's not a lot of data to train on.

If you want the model to pick up on what's there, you're going to need to do multiple epochs, probably train on it multiple times, but then you quickly overfit, which you also don't want to do. You don't want it to just memorize what's in there. You want it to actually learn from it. So, I'd say one challenge is that the amount of data for this to be effective is typically too small.

Another challenge is keeping it up to date. You can work hard to make your RAG solution instantaneous, or you can reduce the delay as much as you want. Training models has more friction there. If you want to do it for email, for example, every user has their own email store. So, if you're going to be training a model for every user and keeping it up to date, there's not that much data, and the logistics of doing that separately for every user are tricky.

I think it used to be like, do you do RAG or do you do this? These days, I would honestly try to solve this problem with an agent who tries several approaches until it thinks it finds the answer. It doesn't have to be just, “We'll do retrieval, and did it get it or not?” You can do a lot more now, and so we've actually built a lot of that into the product.

The more advanced versions are not just a one-shot retriever. We do more to give you the best retrieval quality we can. In the interest of simplicity, models are so good now that I would reach for solutions like that and try them definitely before doing fine-tuning.

Nathan Labenz

Yeah, interesting. So, you think you can basically, in short, get good enough performance without ever having a model that really knows, in a confident, intuitive sense like I do, that it actually has found the right thing?

Guy Gur-Ari

Yes, I think so. I'm saying that based on the evidence we're seeing, at least as I interpret it.

Nathan Labenz

Okay, cool. Last one, and it's not necessarily an easy one. We've got people talking about superhuman coders within this calendar year or into next year. I'm referring to, obviously, Dario Amodei, who said that repeatedly recently. I guess I wonder: Do you buy that that soon, or even if you extend the timeline a little bit? And if so, what do you think that means, or what advice would you give to people who are especially early in their software career today?

From what I see on the internet forums, it seems like people who are just coming out of school with a CS degree are sort of like, “Yikes, this is not what I thought I signed up for.” Not everybody can just pivot into being a machine-learning all-star. That's a great option if it's open to you. But for the rest who are like, “I did this because I thought I was going to have a nice, stable career with a solid income and never have to worry about my employment status,” where do you think we're going, and what advice would you give them for navigating the challenges that might be coming for them soon?

Guy Gur-Ari

Yeah. So, first, I think it's good to separate the short term from the longer term. In terms of what Dario said, the way I understood it is: If you look at what actually happens in the near term, you go to a new line of code and ask, “What actually generated this line of code I'm looking at?” His statement very likely is going to be that it was a model or an agent that did that, rather than a developer.

I buy into that. Maybe it's not in the 3-to-6-month timeframe he mentioned. That's probably too quick based on the adoption that we're seeing, but not 3 years. I think it's shorter than that.

However, that doesn't mean that the model decided on its own what to do. It doesn't mean that it supervised its own output. It doesn't mean that it's fully autonomous. I expect that for a long time there's still going to be a developer there steering the model, and I expect that because this is how I work.

This is how I see people who are picking up agents work. You look at their code: Once they pick it up, the code was almost entirely generated by an agent. But if you took away the human, nothing good would happen. You wouldn't get anything useful out of it, because the models are nowhere near that good. They're not even good enough to say, “Here's the product requirements; go build this.” We're definitely not there yet.

So, I think I buy into that statement, but that doesn't mean we don't need software developers in the next year. In terms of advice, I have 2 kids; they're 7 and 14, and we're having discussions with the older one about what to go for. My advice is to go for a career that's more tied to the physical world.

It could be mechanical engineering or robotics or something like that, where it feels like it will take longer to be disrupted, because it's very hard for me to predict what software development is going to look like in, let's say, 3, 4, 5, or 6 years. That's very hard with the rate things are changing. I don't know where it's going to land.

I think we'll still need developers who understand the system, because if you're just vibe-coding your enterprise software, you will run into trouble. I can already see it happening with the code that I'm writing. It will get better, but I don't think it's going to get better at that scale. But then the question is, well, how many developers do we need, and how much software do we need to write? And I don't know.

So those are the discussions we're having with my older one. With my younger one, we have a bit more time to figure this out. Maybe at that point we have AGI and everybody can just do art. I don't know. But I'm glad we have a bit more time to figure it out with him.

Nathan Labenz

Yeah. Yeah. Well, the local artisanal economy could be a beautiful future, as long as everybody has their basic needs met. How does this get operationalized for you in terms of your hiring? Are you hiring junior developers at all? Is there any on-ramp for somebody out of a CS program to get into a frontier company like yours?

Guy Gur-Ari

Yes, there is. For sure. We look for excellence. We hire junior and senior developers. I think this is still a time where there's going to be a learning curve in knowing how to extract the value out of these models. Even if you're using agents, getting value out of them takes time, especially in an enterprise environment or in a codebase like ours.

But we're small—I wouldn't call us an enterprise—but even in our codebase, which is, let's say, small to medium size, using agents to navigate that codebase requires some skill. So I think for a while there's going to be ramp-up time, where it seems that, as always, people with less experience are also quick to jump on new technologies. I think we're going to see a lot of that in the near future, but the short answer is that we certainly still hire junior developers.

Erik Torenberg

Great. Anything else you want to leave folks with before we break?

Guy Gur-Ari

Uh so augment is is out. It's really good at understanding your codebase. So, I encourage you to download it, give it a try and really feel the power of an excellent AI assistant that that fits into how you work.

Erik Torenberg

And I would definitely encourage people also to check out the blog for a bunch of deep dives. We didn't even get into the inference optimization work and all the detailed analysis of batch sizes, which I did think was super interesting. And there's a great write up of the next edit feature as well. So, there's plenty more to be unpacked from the augment team than we've had time for today. But nevertheless, this has been a great conversation. I really appreciate it. For now, Guy Gur-Ari, co-founder and chief scientist at Augment, thank you for being part of The Cognitive Revolution.

Guy Gur-Ari

Thank you so much. This was a lot of fun. Thank you.

Erik Torenberg

Thank you.