我们打造了一款“智能体原生”工具,它彻底改变了我们构建软件的方式
原文:https://every.to/p/we-built-our-own-agent-native-tool-it-overhauled-how-we-build-software

那是一个周一早晨,我的联合创始人布赖恩(Brian)正在朗读我们智能体生成的客户探索通话周分析报告。“订阅留存,”他说,“有五个不同的品牌把它列为头等大事,但没有一家相信现有的 AI 工具能搞定它。”
就在几周前,要挖掘出这样的洞察还几乎是不可能的。
在我那家尚未找到产品市场契合点的初创公司里,我们所有人都在跟潜在客户沟通,试图为产品找到定位。但跟踪我们了解到的一切简直乱成一团——信息分散在不同的创始人、平台和媒介里。为了在周一例会上分享我们的发现,布赖恩得先在 Slack 里翻看笔记,从 Granola 里收集通话文字稿,然后试图在 Claude Code 里理出头绪。
我们不能承受如此杂乱无章。我们最近推出了 Hoop,一个帮助订阅制品牌降低流失率的智能体,我们必须尽可能快地学习。所以我们需要跟足够多的潜在客户沟通,然后严谨地记录并为每次通话打分,以便将客气的兴趣与真实的需求区分开来。我们五人团队的每个人都在付出努力,但每个人都有自己的流程、自己的工具,以及自己对每次客户通话的不同解读。
于是,我的两位联合创始人和我——我们三个的头衔里都没有“工程师”这个词——动手构建了一款内部工具来解决这个问题。我们没料到的是,这款工具后来也改变了我们为外部客户构建实际产品的方式。
“我应该为此做点什么”
我们的周一例会之所以毫无章法,是因为客户通话的信息散落在各处,具体取决于谁接了电话,以及他们是否用 Granola 或其他转写工具做了笔记。我们无法看到模式,也无法就潜在客户的需求得出结论。
贾斯汀(Justin),我的联合创始人兼驻场产品专家,在几天里用了不到 10 个小时就构建了第一个版本的整合工具,并把它安排到了其他优先事项之中。
它的工作原理是这样:你上传一份 Zoom 的文字稿,工具会用四五个提示词来处理,然后生成一份结构化的分析报告,并根据“PULL 框架”打分。“PULL 框架”是哈佛商学院开发的一套帮助早期初创公司找到产品市场契合点的框架。这个工具还会把同一潜在客户的所有对话整合成一份摘要,让你看到一段关系的全貌,而不仅仅是某一次通话的快照。有了这个工具,我们不用再去挖掘笔记和文本,每周都能收到一份整合分析,帮助我们看清哪些有效、哪些无效。
贾斯汀用了一些我们以前没用过的工具来搭建这个应用:用 Next.js 框架 搭配 ShadCN 组件 来做用户界面,用 Supabase 做数据库来汇总所有笔记,用 Claude 的 API 做分析。
对学过计算机科学但已经不怎么写代码的贾斯汀来说,这是一个重拾技能、建立对 AI 原生编程信心的机会。他从设计和构建视觉界面开始,因为他属于那种即使软件功能正常,但看上去不顺眼也会感到沮丧的人。他确保工具的观感与我们的品牌一致,并且让按钮、标签、菜单这些组件看起来干净利落,然后才开始处理数据。
直到那时,他才直接扎进数据里。他必须确保工具对客户对话的分析,比大家自己用 Claude 生成的更好。否则,我们永远无法说服整个团队使用同一款工具。因此,他创建了一个提示词,在多次手动审查输出结果后不断微调,并严格遵循了 Anthropic 针对 Claude 的提示词工程最佳实践。
摩擦依然太大
工具的第一个版本生成了高质量的分析,但流程中仍有太多环节需要手动操作。你得先从 Zoom 下载通话文字稿,手动上传到工具里,填写客户名称和通话类型,然后等上几分钟处理完毕。接着,你得创建一个链接,再把分析结果分享到 Slack。
团队可以在工具里搜索文字稿和分析结果,但返回的结果不尽人意。比如,有一次我搜索有哪些潜在客户对 AI 客服工具有过糟糕体验,结果一无所获,尽管我知道一位客户体验负责人曾花了五分钟抱怨,他们因 AI 发送了不符合品牌调性的回复而感到多么尴尬。工具只能匹配我查询中的精确词语,却无法理解其背后的含义。
还有一个我们耳熟能详的经典采纳问题,这来自我们在生产力工具 Trello 工作多年的经验。贾斯汀的工具成了人们必须记得去的又一个地方,与 Slack 和 Notion 争夺着我们的注意力。
走向智能体原生
然后,我们找到了解决这些烦恼的答案。贾斯汀一直在 Every 上阅读关于“智能体原生架构”(Agent-native Architecture)的文章。其理念是,与其硬编码一套按固定顺序运行的提示词,不如给模型一套工具,让它自己推理如何使用。与其构建一个需要人们主动访问的目标应用,不如把工具带到人们已经工作的地方,比如 Slack。
贾斯汀把文章链接发给 Claude Code,说他想构建一个符合这些架构原则的系统。这个智能体需要两个工具:一个用来上传和阅读文字稿,另一个用来添加和编辑合作伙伴资料。有了这些,用户要做的就是在 Slack 里把文字稿发给应用。智能体会确认合作伙伴名称和通话细节,然后上传文字稿,运行分析,创建摘要页面,并把它发布到我们的用户反馈频道。
贾斯汀开始用智能体原生架构指南来审视他构建的每一样东西,而不仅仅是那个产品市场契合度工具。他会进入 Claude Code 的规划模式,提出一个新功能设想,然后连同 Every 的那篇文章一起发回给 Claude Code,问它:“哪些地方符合,哪些地方不符合?”
有时,当他认为某项特定任务不需要用户动用 AI 时,他也会偏离指南。例如,工具会追踪 LLM 的 token 使用量和成本——这是有用的信息,但不是用户需要查询的内容。把这些暴露给智能体只会造成混乱。
轮到我在代码库中大展拳脚
我遇到了另一个问题。我需要一目了然地看到公司的客户开发管线——该跟进谁,每段对话处于哪个阶段——按人物和阶段来组织,而不仅仅是按时间顺序排列的通话记录。
我打开 Ghostty(一款简单的终端应用),把工具的代码复制下来,这样我就能在笔记本上本地工作了。然后——一想到要直接编辑代码,我的手就有点发抖——我启动了 Claude Code。
我让 Claude Code 做的第一件事就是构建一个轻量级的数据视图,好让我能一眼看到管线的不同阶段。讽刺的是,我让 Claude Code 构建的是一个类似 Trello 的信息看板,这样我就能拖着代表通话的卡片到处移动。老习惯真是难改。
我逐步进行构建。我注意到在每张卡片正面显示商机状态会很有用,于是就提示 Claude Code:“确保每张卡片都有一句话摘要,让我一眼就知道进展如何。”部署后,新出现的商机都附带了状态。每次我想要不同的东西,我只需要开口问。
在贾斯汀的鼓励下,我开始直接把代码合并到共享仓库。有时程序会出问题,但没人因此惹上麻烦,因为赌注很小,每个人也都这样看待它。
布赖恩在晚上10点学习智能体原生
下一个上阵的是布赖恩,我们的另一位联合创始人,他负责我们每周的用户学习报告。在有了新工具之前,他常常会忘记做这事,最后只能去翻 Notion,或者凭记忆拿最新鲜的对话即兴发挥。我们的学习洞察偏向于近期的而非重大的,也错过了那些只有纵观所有通话才会显现的模式。
所以,布赖恩构建了一个功能来自动生成报告。他的第一版是个他电脑上的链接,点一下会生成一个 Markdown 文件,然后他再粘贴到 Notion——这确实能用,但只对他一个人有效。他的第二版给工具加了一个“学习”标签页,里面有个按钮可以生成同样的 Markdown 输出,这样任何人都能拉取报告了。
这解决了获取权限的问题,但一个新问题又冒了出来。团队如果想调整报告的格式或重点,就必须叫布赖恩来编辑代码。布赖恩想让报告的提示词变成可编辑的,这样团队就可以不碰代码而调整报告。晚上 9:25,贾斯汀在 Slack 里建议:“你应该把提示词做成一个可编辑的字段,然后传给智能体。”
布赖恩不太明白这是什么意思,于是他把贾斯汀的消息粘贴给 Claude,请它解释。Claude 向他详细讲解了智能体原生架构的哲学,布赖恩开始领悟到:与其给人类一个文本框来编辑提示词,不如给智能体一个工具,让它自己读取和修改提示词。这样任何人只要在 Slack 里跟工具说一声,告诉它要改什么就行了。
到晚上 11:15,布赖恩已经把这个功能做出来了。他通过告诉 Slack 里的智能体把“学习”提示词用克林贡语重写来进行测试,果然,所有报告都以克林贡语的形式输出了。从开始到结束,总共才花了两个小时。
更实际一点说,最近的一份报告指出,我们过去六次通话中有四次都提到了同一个痛点:品牌正在流失那些根本没意识到自己注册了服务的订阅用户。客户常常是为了解锁折扣而订阅,却忘了这是周期性扣费的,当账单来时才惊讶地取消——这正是我们的产品可以介入的时刻,提供一个节省方案或更合适的推荐。我们每个人单枪匹马都无法将这些点连接起来;这种模式只有当工具一次性审视所有通话时才浮现出来。
然后,意想不到的事情发生了。“学习”标签页里出现了重复记录,布赖恩在 Slack 里跟机器人提了一句。机器人查看了两条记录,判断出其中一条是空的,然后删除了它——一个“查找并删除重复项”的功能。他给了智能体对数据库的编辑权限,模型自己推理并解决了问题。那一刻,布赖恩豁然开朗:如果你给一个推理模型简单而强大的工具,它就能处理好那些你从未想过要为之写代码的情境。
我们带回了产品什么
这个工具做的最重要的事,是改变了我们构建外部产品的方式。贾斯汀将那些在内部测试过的智能体原生模式,拿来构建了多个销售工具,其中包括一个帮助台审计功能,我们可以在潜在客户签约前,用它向客户展示 Hoop 的价值。
布赖恩从构建“学习”标签页发展到构建了一个类似内部销售智能体的东西,我们管这个机器人叫“本尼”(Benny)。它住在 Slack 里,接入我们的销售工具,按指令执行任务:筛选潜在客户,根据我们理想客户画像打分,并更新我们的 CRM 系统 Attio。我则从为客户关系管理器构建功能,到对产品架构有了见地深刻的看法。
这也让我们保持诚实。当每一次通话都被自动打分和总结时,你无法逃避数据告诉你的真相。当一周之内就有五个不同的运营人员告诉我们定价不合理时,我们必须正视现实并做出改变,以赢得更多交易。在大公司,会有一个分析师团队基于这些数据编写季度报告。而我们只有五个人,用我们自建的工具每周都在做这件事。
这个工具再过一个月大概又会面目一新,这也没关系。我们收获的流畅感更为重要:知道何时该给模型一个工具,何时该硬编码一个工作流;习惯了发布和失败——然后再试一次。
核心启示:一群非技术背景的创始人,利用 AI 和“智能体原生”理念自建内部工具,不仅解决了自身混乱的客户信息管理问题,更意外地发现了跨对话的数据模式,从而反向重塑了他们对外部客户产品的构建方式。
We Built Our Own Agent-native Tool. It Overhauled How We Build Software. 的发芽报告
材料核心
Stella Garber 的创业团队在没有专职工程师的情况下,用 AI 编码工具搭出了一个内部分析客户通话的工具,随后受 Every 的“代理原生架构”理念启发,将其彻底重写成一个在 Slack 里靠对话驱动的代理。这个过程不仅解决了他们客户发现中的混乱,还意外重塑了团队构建外部产品的方式。
发芽 01:从固定脚本到赋予工具——代理原生架构为何是对“必要多样性”的回应
种子
材料清晰地描绘了一条轨迹:从“让人类把录音上传到工具,由后台按预定顺序跑几个提示词”,演变为“在 Slack 里跟一个代理说一句话,它自己选择何时读取录音、何时更新档案、何时生成报告”。这不仅仅是交互上的便利,而是控制逻辑的根本转移。它回应了控制论中一个古老但被严重忽视的原则:必要多样性定律。
1950 年代,英国控制论学者 W. Ross Ashby 提出了“必要多样性定律” (Law of Requisite Variety),大意是:一个系统要能有效应对外部环境的多样性,其内部机制就必须拥有与之匹配的多样性。传统软件采用固定工作流,本质上是假设设计师能提前穷举所有情景——一旦真实世界的需求多变、模糊,软件就会显得僵硬。而代理原生架构的做法,正是放弃对流程的预先编码,转而给模型一套“基础工具”(读转录、写档案),让模型在运行时用推理能力临时编排应对方案。
文章中最精妙的例子是 Brian 遇到重复记录时,代理居然自行推理出如何查找并删除空记录。这不来自任何硬编码的“去重功能”,而是代理将“读数据库”和“写数据库”的工具组合起来,现场生成了一个去重程序。用 Ashby 的话来说,代理通过内部推理的多样性,吸收了 Brian 这条意想之外的需求的多样性。
Aha 瞬间
“代理原生架构的本质并非更加聪明的自动化,而是将‘如何应对变化’本身交还给具备推理能力的模型,从而在系统层面实现必要多样性。”
发芽 02:AI 时代的公民开发者——从 Excel 宏到代理员工
种子
Stella、Justin 和 Brian 没有一个人顶着“工程师”头衔,却在数小时到数天内造出了具备数据库、API 调用、Slack 集成和自主推理的内部工具。这很容易让人想起 IT 行业长达四十年的“公民开发者”叙事,但这一次的跳跃格外不同。
1985 年,Excel 的宏功能让财务分析师和运营经理可以写代码来自动化报表,催生了“影子 IT”和最早的一批公民开发者。此后,低代码/无代码平台(如 QuickBase, Airtable)让业务人员可以搭类似应用,但核心逻辑仍然需要人预先定义。去年,《哈佛商业评论》发表的一篇案例研究中,消费品公司 Colgate-Palmolive 的市场部人员利用无代码工具,在几周内建出了渠道促销管理系统,但这仍需团队理清所有状态的流转规则。
Hoop 团队做的事情已经跨过了那条界限。Brian 并没有告诉模型“如果出现重复记录,请找出空的那条并删除”——他只是向代理描述了一个现实状况,代理自己分解出了操作步骤。这是从“给业务人员提供高级积木”进化为“给业务人员一个可以独立解决问题的同事”。在这个框架下,不再只是非工程师在开发软件,而是他们在管理一个能够开发软件的系统。
材料中 Stella 复制代码库并在本地开工时“手有点抖”,这真实反映了心智门槛的残留。但历史一再证明:当门槛真实降低,大量被抑制的领域专业知识就会释放成工具。就像当年会计师发明的 Lotus 1-2-3,今天的一线业务专家,很可能正在造出比任何软件供应商都更适配其具体场景的代理。
Aha 瞬间
“此轮革命的关键词不是‘低代码’,而是‘代理’——当建模不需要穷举,而只需对话,公民开发者便不再是编写程序的人,而是管理代理执行程序的人。”
发芽 03:甜蜜的民主化阴影——当所有人都在写代码,谁来维持秩序?
种子
材料中有一处极易被乐观基调掩盖的细节:Stella 开始往共享代码库合并提交,“有时候会出问题,但没人挨骂,因为风险低”。这种低风险、高宽容的氛围恰好是实验能持续的条件,但也让我们必须正视更广泛的碰撞:软件开发彻底民主化之后,技术债务、安全边界和可维护性如何保障?
早在 2012 年,Gartner 就警告过“影子 IT”的成本——当业务部门绕开IT自行采购 SaaS,账面上省了时间,却产生了安全、合规与数据孤岛的巨额长尾成本。类似地,当团队中任何人只需要一台终端和一个语言模型就能构建连接生产数据库、CRM 和内部频道的代理时,风险就不是“出一次错”这么简单,而是可能制造出没人敢动、但极其脆弱的业务核心。
文章并未无视这一问题,它提供了几个非工程化的对冲手段:第一,让代理原生架构本身就接受可读的人类指令,天然形成文档;第二,Stella 和 Justin 仍然对其输出的分析质量做了人工审核和迭代;第三,所有操作在 Slack 公开频道里留下痕迹,而非藏在私人脚本里。这构成了一种新的治理哲学:用可见性和对话替代审批流程。Hoop 团队的做法暗合了网飞“高度一致,松散耦合”的文化——统一的原则是 PULL 框架和架构指南,具体的执行则是每个人与自己的代理共同摸索。
这提示我们:制约公民开发者的传统手段(代码评审委员会、发布窗口)将大面积失效。未来能够健康民主化的团队,必须是那些把“治理”本身也建模成自然语言任务,允许代理参与监督、自动解释每一个改变可能影响哪些业务规则的团队。
Aha 瞬间
“当编码降至对话式,控制也必须从制度审查转变为信息可见性——唯一有效的治理,是让每一次改变都解释自己,并且让这些解释可被所有代理检索。”
你的思考空间
- 如果你的团队中突然多出一个“通过 Slack 操作所有内部数据”的代理,你会最先让它接手哪类任务?你最担心的失控点会在哪里?
- 代理原生架构是否会催生出一种新的岗位,既非产品经理也非工程师,而是“代理设计师”——专门思考应该给模型哪些工具、不给哪些工具的人?
- 文章中 PULL 框架由哈佛商学院开发,被硬编码进早期工具,再被代理自适应使用。当领域专业知识被压缩进模型可以调用的工具,这些框架的权威性会增强还是削弱?
- 如果 Stella 的团队并非 5 人,而是 500 人,他们还能复制“谁都可以合并代码、出错也没关系”的模式吗?如果不能,最优雅的替代方案可能长什么样?
