2024年秋天,我们团队接了一个智能客服升级的项目。一开始大家觉得很简单——把大模型接进去,做一个能自动回答问题的AI客服,不就完事了吗?结果第一个demo上线,产品在测试环境里像个没头苍蝇:用户问一句“我上个月账单怎么多了20块”,它先调了用户接口,又翻订单接口,绕了三圈之后答非所问,最后还把一条未读消息标记成了已读,差点惹出运营事故。复盘的时候大家讨论了很久,最后得出的结论不是模型不行,也不是prompt写得不够好,而是我们的整个系统架构,从根上就不是为“智能体”设计的。
那段时间“agent-native”这个词在圈子里被反复提起,我们踩过坑之后回头看,才发现这个词说的不是某个具体框架或工具,而是一整套以智能体(Agent)为中心来设计系统的架构范式。这篇文章我想把这段时间的真实经历拆开讲清楚:agent-native到底是什么,和普通的“AI接入”差在哪,落地时要怎么设计、怎么选型、怎么避开那些没人告诉你的坑。
1. agent-native不是新名词,是架构范式的转换
1.1 先搞清楚:到底什么叫“以智能体为原生”
“agent-native”拆开看就是“以agent为原生”。这里的“原生”不是说“系统里跑了一个agent”,也不是说“调用了一个大模型API”,而是指:agent是系统的第一公民,系统从一开始就是围绕agent的感知、决策、行动来构建的。
我习惯用一个比喻来理解:传统软件是“图书馆 + 管理员”的模式,数据放在库里,业务逻辑是那一堆检索规则,用户提出需求,系统执行固定流程。而agent-native是“聘用了一群有自主判断力的员工”,每个员工有自己的岗位、目标和权限,他们能自己看资料、查数据、做判断、执行任务,实在拿不准的时候再去问老板——也就是人类。
所以判断一个系统是不是真正的agent-native,标准很简单:如果把系统中的agent全部摘掉,整个系统是不是就塌了?如果塌了,说明agent是核心,是原生;如果系统依然完好运行,只是少了个“AI助手”,那agent只是一个外挂功能,谈不上native。
在我们项目里,最初就是把AI客服当一个“语义搜索”外挂接进来的——用户问问题,这边检索知识库,拼一个回答回去。后来改成agent-native,我们把“理解用户意图、拆解任务、查账单、查订单、退款审批、风险提醒”全部分散给不同角色的agent,每个agent运行在自己的运行时环境里,有自己的记忆和工具权限,系统才能真正自主处理复杂流程。
1.2 AI-native和agent-native,差在“主动行动”这三个字
很多人会混淆“AI-native”和“agent-native”。AI-native指的是系统架构要考虑模型推理能力,比如数据库要为向量检索做优化,接口要设计成方便模型调用的格式,本质上还是“以模型为中心”。而agent-native更进一层,关键差异是三个字:主动行动。
AI-native系统里的模型是被动的,用户问一句,模型答一句,答完之后整个链路就结束了。agent-native把模型放进一个能做事的闭环里——模型不再只是“回答”,而是“规划、调用工具、观察结果、修正策略、继续行动”直到达成目标,或者明确放弃。
用生活里的例子:AI-native像一个知识渊博的顾问,你问他什么他答什么;agent-native像你雇的一个项目经理,他不仅懂,还会主动去协调资源、推进事情。
这个区别带来了一个巨大的架构影响:传统系统的数据流是同步的、线性的、确定性的,而agent-native系统的执行路径是动态的、多分支的、非确定性的。一次用户请求,可能触发几次工具调用,可能需要在多个agent之间反复协作,可能需要等外部事件再继续推进。这种执行模型对基础设施的要求完全不一样了。
2. 为什么原来的架构装不下agent
2.1 传统应用的“请求-响应”模型,逼死了agent
我们第一次改造失败的核心原因,就是传统后端根本撑不住agent的执行模式。一个普通的Web后端,处理流程是:接收请求 -> 参数校验 -> 查数据库 -> 拼装返回 -> 结束。这套模型高度确定,一次进来一个请求,处理完就返回,状态不保留,逻辑链路上没有“半途停下来等用户确认”这种环节。
但一个agent跑起来完全不是这样。拿我们客服场景来说,用户问“我要退款”,agent先要判断这是什么退款、金额多少、有没有违反政策,然后可能需要问用户两个问题确认订单号,调退款接口之后还要监控退款状态,最后再通知用户。整个过程可能持续几分钟甚至几天,横跨多个会话和多个接口调用。
如果继续用传统的“请求-响应”架构,每一个中间步骤都要塞进一次API请求里,状态全部要自己硬编码在数据库里,超时重试逻辑写得人想吐,更别提多agent协作的时候,A agent要和B agent通信,传统架构根本没有这个通路。
所以不是agent“太新”,而是传统架构的假设——同步、短连接、无状态——和agent的执行模型天然冲突。要么你用一个极其别扭的方式硬套,要么你重建外围架构,让agent成为运行时的基本单位。
2.2 agent化之后,系统要回答的新问题
一旦决定把agent当作一等公民,系统架构就要面对几个传统架构完全不用操心的新问题。
第一个是生命周期管理。传统进程生命周期是“启动 -> 处理 -> 退出”,agent的生命周期可能是“创建 -> 挂起 -> 唤醒 -> 继续 -> 完成”,中间可能因为等待用户输入或外部事件而长时间休眠。谁负责唤醒?唤醒的时候记忆怎么加载?
第二个是状态存储。agent不是无状态的,它必须记住对话历史、用户偏好、尚未完成的任务。这个状态不能只放在内存里,服务重启就没了;也不能简单放数据库里,因为agent的“记忆”是上下文的一部分,是复杂的、多类型的。
第三个是工具调用与权限。agent要调用外部API、读数据库、发消息,这些动作必须受控。你不能让一个客服agent顺手把数据库给删了,所以每个agent能调用哪些工具、工具的权限边界在哪,这本身就是一套设计。
第四个是可观测性。传统系统出问题,看日志看链路追踪就行。agent系统出问题,你不知道它为什么选这条路,为什么调了两次同一个接口,为什么最后放弃了。黑盒子式的agent,在线上跑起来就是定时炸弹。
这四个问题,每一项都需要架构层面的设计,不是写几个函数能绕过去的。
3. agent-native系统的五个核心设计决策
3.1 决策一:Agent的“身份”怎么定义
在agent-native系统里,第一个设计决策是“agent的身份”。这个身份包含角色、目标、职责边界和可用工具。
我们给每个agent定义了一套类似“岗位说明书”的配置:
agent_spec = { "name": "billing_agent", # 负责账单相关事务 "role": "账单客服专员", "goal": "准确解释用户账单,处理费用申诉", "allowed_tools": ["get_bill", "get_order", "refund_review"], "can_delegate_to": ["risk_control_agent"], # 需要风控时转交 "max_steps": 8, # 单次任务最大步数,防止死循环 "human_approval_required": ["refund_review"] # 退款审核必须人工确认 }这个“身份定义”不是一个给人看的说明文档,而是agent运行时的行为约束。模型不是凭空自由发挥,而是在这个边界范围内做规划。
这里最核心的原则是:给出明确的边界,而不是给出空泛的自由。“你需要帮助用户解决问题”和“你只能通过这三个工具,最多执行八步,涉及退款时必须转人工”,后者的行为可预期性会高一个数量级。
我们当时给客服agent设计身份时就吃过亏,第一版只写了“帮助用户解决所有问题”,结果它看到用户说“帮我催一下快递”,它真的去查顺丰单号了,查不到就再查一次,陷入了一种偏执状态。后来把工具列表和决策边界写死,这种情况基本消失了。
3.2 决策二:记忆和状态,放哪一层
agent的记忆至少分三层:短期记忆、长期记忆、工作记忆。
- 短期记忆:当前任务上下文,通常就是模型对话的上下文窗口。
- 长期记忆:跨会话的关键信息,比如用户的偏好、之前处理过的问题记录。
- 工作记忆:当前任务的中间状态,比如“已经查到账单号但是还没发起退款”。
传统架构只需要关心数据库,而agent-native系统要把三层记忆都设计好。
我们的做法是:长期记忆放到向量数据库,按用户ID和会话ID做分区,embedding+关键词混合检索;工作记忆放到一个专门的KV Store,key是task_id,value是一段结构化JSON,记录已完成动作和剩余步骤;短期记忆不落盘,直接靠模型上下文。
这个设计有个经验:长期记忆的写入比读取更值得关注。很多agent框架默认把“所有历史对话摘要”写入长期记忆,几个月下来记忆库里全是重复信息,检索精确度急剧下降。我们后来只在任务闭环结束时做一次结构化总结写入,效果好了很多。
记忆这块是agent-native系统最容易做烂的部分,没有之一。
3.3 决策三:工具怎么暴露给agent
工具是agent和外部世界互动的唯一通道,工具层设计决定了agent的能力边界和风险边界。我们的工具层设计遵循“窄接口、细粒度、显式描述”三条原则。
窄接口:一个工具只做一件事,不要一个函数能查账单又能退款。窄接口有三个好处:一是模型选工具的时候不容易用错;二是权限控制好做;三是日志排查时能准确定位。
细粒度:工具的执行单元要小到“不可再拆”。比如“发送邮件通知”和“获取退款状态”是两个工具,而不是一个大杂烩的“管理退款”工具。
显式描述:每个工具的description字段必须写清楚它做什么、什么情况下用、什么情况下不用。模型执行工具选择时靠的主要就是这个描述文本,写不清楚,模型就会在错误的时机调错误的工具。
一个值得一提的点:工具的参数schema要尽量简单。有些后端同学顺手把数据库查询接口包装成工具,参数里有order_by、limit这种字段。大模型在实际调用时确实能填对,但出错的概率会显著提升。我们上线前专门做了一个参数降级——把工具参数缩减到模型最可能用到的三四个核心字段,剩下的内部穷举。
工具层的底层实现是Function Calling机制,选型的时候可以关注框架是否支持并行工具调用(parallel tool call)。实测下来,支持并行调用的框架在处理“同时查订单和查优惠券”这类需求时,能省一半的延迟。
3.4 决策四:多个agent之间怎么协作
单agent系统很简单,一个模型循环就够了。一到多个agent协作,问题就复杂了:消息怎么传?状态怎么同步?谁来决策最终的答复?
前沿的agent-native实践中,多agent协作主要有三种模式:
编排模式(Orchestrator):一个管理者agent分解任务、分发给执行agent、汇总结果。优点是控制强、可预测、适合不出错的场景;缺点是管理者agent会成为瓶颈,任务复杂时容易超时。
协作模式(Peer-to-Peer):agent之间平级通信,谁有能力谁接活。优点是灵活、扩展性好;缺点是没有统一控制点,容易出现多个agent重复干活,或互相等待形成死锁。
层级模式(Hierarchy):类似组织架构,高层agent管理低层agent组。适合大型复杂系统,但设计难度很高,业务调整时维护成本大。
我们的实际选择是最土但最稳的编排模式,而且“管理者”不是一个agent,而是一套固定的编排逻辑:
用户请求 -> router(路由模块,识别意图) -> billing_agent 或 order_agent 或 both(并行) -> 汇总模块统一组织答案 -> 需要确认时转人工这个设计放弃了“让agent自己决定谁干活”的酷炫感,但换来了行为可预期和调试简单。对于大多数企业内部场景,我强烈建议先跑编排模式,等数据积累够了、信心提升了,再尝试更复杂的多agent协作。
3.5 决策五:人在回路(human-in-the-loop)怎么设计
agent-native不是全自动机器,任何真实业务场景,agent必然面临需要人类介入的时刻。人在回路不是“要不要设计”,而是“在哪里设计、怎么设计”。
我们总结了两类必须引入人工的节点:
第一类是高风险操作。涉及退款、删除、发送对外消息等不可逆操作,必须经过人工确认。我们当时的实现是在agent执行到某个工具调用前返回一个waiting_for_approval状态,任务挂起,等到人工审批接口回调后继续执行。
第二类是低置信度场景。当agent对当前步骤的置信度低于阈值,或者连续做了几次尝试都没有成功推进时,应该主动转人工而不是硬着头皮继续。这里要给agent一个明确的“投降信号”工具,比如request_human_help()。
这个决策在架构上的体现是:任务是持久化的、可挂起的。agent的状态可以保存下来,等待人工介入后再恢复,而不是像传统API请求一样30秒超时就一键作废。
踩过一次坑后的深刻经验:人工介入页面会直接影响用户体验,你绝不能给运营人员一个裸的JSON让他自己解读。我们当时做了个简单的审批台,左侧显示agent当前的推理轨迹(调了什么工具、看到了什么结果),右侧是业务操作界面和审批按钮。没有这个推理轨迹,人工介入基本等于盲批,安全性大打折扣。
4. 实操:零到一搭建一个agent-native系统
4.1 第一步:圈定场景,别一上来就重构全部
agent-native是一个系统工程,不要试图把整个平台一次性agent化。选试点场景有三个标准:业务价值明确、流程边界清晰、失败成本可控。
我们当时选的场景是“账单查询与费用申诉”,因为账单数据准确率高、流程相对固定、即使agent出错也最多是查询结果不准,不会造成真金白银的损失。
试点圈定后,要给业务方做好预期管理:第一版不是来“替代人工客服”的,而是来“学会像老员工一样思考”的。这个预期如果没对齐,业务方看到第一个答错的答案就会全面否定整个项目。
4.2 第二步:画agent的“决策边界”
这是我们实操中最重要的一步。不是写代码之前,是做一次“角色剧本推演”,把所有可能的用户问法列出来,逐个走一遍流程,找出不确定、有歧义、需要人工介入的分支。
拿“退款”举个例子:
- 用户说“我要退掉这个订单”——明确退款意向,agent可以直接走退款流程
- 用户说“你们这个产品质量是不是有问题”——有退款嫌疑,但不明确,agent应该先追问
- 用户说“我要投诉你们,再不解决我就去举报了”——情绪化用户,agent应该直接转人工优先安抚
这个推演过程会产出一张“意图-步骤-终止条件”的对照表。这张表有两个用途:一是写prompt和编排逻辑时作为脚本参考;二是系统上线后作为测试用例集。
很多团队跳过这一步直接写代码,后期的prompt调试会非常痛苦,因为你没有“预期行为”作为基准,根本说不清agent做得对不对。
4.3 第三步:选型与搭建最小闭环
这个阶段最关键的是选型。我当时调研了主流的agent框架,简单对比如下:
| 框架 | 适合场景 | 优点 | 短板 |
|---|---|---|---|
| LangChain | 快速原型、工具调用链 | 生态全,文档多,社区大 | 抽象层较重,调试麻烦 |
| LangGraph | 需要精细编排、状态机 | 状态管理灵活,支持复杂循环 | 学习曲线较陡 |
| AutoGen | 多agent对话协作 | 多agent通信能力强 | 行为较难约束、调试成本高 |
| CrewAI | 角色化任务拆分 | 上手快,贴近业务角色 | 重协作但轻运行时,生产级特性不足 |
| 自研编排层 | 生产落地、深度定制 | 完全可控,无黑盒 | 开发量大,需要投入持续维护 |
我们的最终选择是“模型API + 自研编排层 + MCP工具协议”,没有直接用LangChain之类的框架。不是框架不好,而是我们踩过一次“框架锁定”的坑:框架的升级版本可能会改API,你的业务逻辑耦合在框架里,升级一次重构一次。自研编排层的开发量没有想象的大,核心就是一个循环执行器,几百行代码就能跑起来。
编排层核心逻辑大概是这样:
def run_agent(task): state = initialize_state(task) while not state.is_terminal(): # 1. 判断当前是否需要人工介入 if state.requires_human(): return HumanHandoff(state) # 2. 调用模型,让模型决策下一步动作 action = llm.decide(state.context, state.available_tools) # 3. 执行动作 if action.type == "call_tool": result = execute_tool(action.tool_name, action.arguments) state.record("tool_call", action, result) elif action.type == "respond": return FinalResponse(action.content) elif action.type == "request_human": return HumanHandoff(state) # 4. 检查步骤数和时间上限 if state.steps >= state.max_steps: return FallbackToHuman(state)这个循环执行器就是整个agent-native系统的“心脏”,所有agent不管什么角色,都跑在这个循环上。
搭建最小闭环的时候,工具链一定要从最核心的三四个开始。先把“查账单、查订单详情、发起退款申请”这几个做扎实,跑通一条核心流程,验证系统稳定性,再逐步扩大工具库。一次接入二十个工具,模型选择错误的概率会急剧上升。
4.4 第四步:评估与迭代
agent-native系统的评估,说实话是圈内公认的大难题。我们建立了一套自己的评估流程,核心思路是“既看结果,也看过程”。
结果指标:任务完成率、用户满意度、平均耗时、人工转接率。这些很好理解,和传统客服指标对齐。
过程指标:工具调用成功率、工具选择正确率、完成任务的平均步数、死循环发生率、无效工具调用次数。这些指标反映的是agent本身的行为健康度。
我们每周用固定的100个线上真实问题跑一次回归测试,人工标注“正确/部分错误/错误”,持续跟踪趋势。有一个经验:agent系统绝对不能只看上线后的线上指标,因为线上没有对照组,你永远不知道它现在的表现是好是坏。固定的回归测试集是唯一的“体检报告”。
迭代优化的时候,最常见的做法是“改prompt”。但我的建议是一开始先“改工具”→再“改编排”→最后才“改prompt”。工具描述更清晰、参数更简单通常比prompt微调效果好一个量级。
5. 踩坑实录:agent-native落地最常见的七个问题
5.1 死循环与token黑洞
agent死循环是我见过最典型、也最烧钱的线上事故。表现是agent不断重复调用同一个工具或者在同几个步骤里打转,每转一圈就要消耗一次模型调用token,一个晚上烧掉几千块很平常。
我们的对策是三道防线:
- 步骤上限:每个任务最多执行N步(我们设8步),超出直接判失败转人工。
- 重复动作检测:检测到同一个工具参数组合出现两次,强制提醒agent“你已经尝试过这个方案,请换一条路”,再重复一次直接终止。
- token预算:每个任务设置token消耗上限,超出自动熔断。
这三道防线事情很小,但拯救了我们的成本。强烈建议所有做agent项目的人,上线前必须把这三条都配上。
5.2 工具调用的“聪明反被聪明误”
有一次线上事故特别典型:用户问“我的电费账单怎么这月还没出?”,agent居然调用了“create_refund_request”工具,要给用户退款。原因是大模型“发挥创造精神”,看到“账单”两个字就联想到“退款”。
原因是工具描述写得太笼统,而且当时我们让一个agent同时管“账单查询”和“退款”,边界没有分开。后来我们把“查询类工具”和“涉及变更的工具”从描述到参数彻底分开,给查询类agent彻底移除退款工具的调用权限。权限隔离是最可靠的安全网,权限割裂的问题靠prompt是补不好的。
5.3 记忆污染比幻觉更可怕
大模型的“幻觉大家都很熟了”,但agent-native系统里还有个更隐蔽的问题——记忆污染。如果一条错误的上下文记录被写进长期记忆,后面的所有会话都会基于这条错误信息做推理,用户会明显感觉“客服记错了”,而且很难纠正。
我们当时遇到的情况是agent在会话中期把用户的订单号记错了,后续步骤一直基于这个错误的订单号查询,所有结果自然全部错误。更可怕的是,系统还把这个错误的对话摘要写进了长期记忆库。
后来的对策是:写入长期记忆必须经过一个“事实校验步骤”,要么由模型交叉验证关键字段格式,要么干脆禁止agent自动写长期记忆,统一由任务结束时的总结模块写入。
5.4 可观测性:黑盒是agent原生架构最大的敌人
一个agent系统上线后,如果只能看到最终回答,那遇到问题是灾难级的。用户反馈“客服答错了”,你根本不知道是意图识别错了、工具调用错了、还是prompt归因错了。
我们强烈建议上一套专门的agent可观测性工具,业界常用的是Langfuse和LangSmith这类,也可以用自研的日志系统,但至少要包含:
| 观测维度 | 记录内容 |
|---|---|
| 推理轨迹 | 每一步LLM的思考内容、选择的动作、调用的工具 |
| 上下文快照 | 每个任务开始时加载了哪些记忆、哪些工具描述 |
| 工具执行明细 | 工具名称、入参、出参、耗时、错误信息 |
| 成本统计 | 每个任务的token消耗、模型调用次数 |
有了这个观测体系,后面所有调优才有依据。看不到推理轨迹,做agent项目等于闭着眼睛开车。
5.5 安全防线:工具权限的最小化原则
agent-native系统的安全边界和传统系统很不一样。传统系统是“用户越权”问题,agent系统是“agent越权”问题——给agent配的工具权限过大,一旦模型被prompt注入诱导,或者单纯是判断失误,就可能执行危险操作。
我们的做法是:
- 每个agent配置一个权限矩阵,明确“能调用哪些工具、不能调用哪些工具”,默认全拒绝,只放开业务必需。
- 涉及用户敏感数据(手机号、身份证号、余额)的工具,单独加一层访问白名单。
- 工具的入参必须做schema校验,防止模型注入恶意参数。
- 高危工具(退款、修改订单状态)要求二次确认,无论agent还是用户操作都一样。
有同行问过:“这样层层限制会不会把agent的能力阉割掉?”我的观点是:在生产环境,安全和能力之间,永远优先安全。如果agent因为权限边界做不了某件事,它应该明确说“我无法处理这件事,已为您转人工”,而不是越过权限擅自尝试。
5.6 测试和回归怎么做
agent系统的测试是出了名的难,原因在于同样的输入,不一定有同样的输出。大模型有随机性,你是无法完全依赖固定输出做断言的。
我们的实践是把测试分成三层:
- 单元层:单独测每个工具函数逻辑正确性。这层和传统测试一致。
- 场景层:固定业务场景,固定测试输入,人工审核输出准确性。重点看agent能否在正确的时机调用正确的工具、拿到正确的结果。
- 对抗层:故意设计刁钻输入,比如模糊意图、引导性提问、带攻击性的prompt注入尝试,看系统的兜底能力和安全防线是否有效。
场景层和对抗层的测试脚本,我们把所有历史线上问题整理成了一个200+的回归集,每次prompt或工具变更,跑一遍全集才能上线。过程很枯燥,但上线质量是有保障的。
5.7 别高估“自主”,先做“建议+确认”
早期我迷信“agent全自动”的概念,总想着让agent自己把事情全办完。后来被现实教育了:业务方不会接受一个完全黑盒的自动化系统,因为他们要对最终结果负责。
后面我们调整了策略:把agent定位成“高效率的智能助理”,它做分析和建议,把结果呈现给用户或业务方确认,确认后才执行。这个策略对用户体验几乎没有负面影响,反而因为“有确认环节”显得更可靠。
这个决策在架构上反映为:agent的所有“写操作”(create、update、delete)默认走“待确认”状态,只有经过审批回调才能真正生效。等系统稳定运行三个月,业务方对agent建立了信任,再把某些低风险写操作改成自动执行,这个演进路径是很平稳的。
6. 未来走向与落地建议
6.1 agent从“能做”到“稳做”
我们刚跑了三个月,一个很直接的感受是:行业对agent的要求正在从“能做出来”转向“稳定、可靠、受控地做出来”。模型本身的能力已经不是瓶颈,真正决定项目成败的是外围工程——编排、状态、权限、观测、评估。
未来agent-native的方向,我觉得有几个明确的信号:工具协议层会标准化,类似MCP这样的开放协议会逐渐成为事实标准,工具生态会以更低的接入成本繁荣起来;记忆管理会更精细化,短期记忆、长期记忆、工作记忆的分层管理会成为agent框架的标准能力;多agent协作会在更复杂场景里真实落地,而不仅仅是Demo里跑个“三个AI开会讨论方案”的演示。
另外,本地化部署的小模型agent会在特定行业(比如数据敏感、私有化部署要求的金融、政企场景)有快速增长,因为在agent-native架构下,模型可以替换、可以级联,一个小模型负责路由分类+一个中大模型负责核心推理的混合架构,成本和效果会达到一个很不错的平衡。
6.2 给团队落地agent-native的三条现实建议
第一条,不要把agent项目当成算法项目,要当成系统项目来管理。agent的成败不只是模型选得好不好,更多取决于工具质量、观测能力、权限体系这些工程环节。项目的分工至少要包含后端工程、模型算法、测试评估三类角色,缺一个后面都会很痛。
第二条,建立“先跑通,再跑稳,最后跑全”的节奏。第一阶段能够处理60%的常见问题并正确转交人工,就已经是个成功的项目;第二阶段把准确率从60%拉到85%;第三阶段再扩大场景覆盖。我之前见过很惨痛的反面教材:一上来就让agent处理所有业务,上线一周好评率暴跌,最后整个项目被叫停。
第三条,别在这个阶段追求“全自动”。真实业务对错误的容忍度是极低的,agent拿不准就主动转人工,这不是系统失败,而是系统成熟度的体现。把“何时该转人工”设计好,比“让agent多坚持几步”重要得多。
写在最后
回头看我自己的体会,agent-native不是一个能“加”到现有系统上的补丁,它是一种从设计源头就不同的思考方式:它不是问“用户输入了什么,我要返回什么”,而是问“为了实现用户的目标,我的agent需要经历哪些感知、决策和行动”。
这几年技术圈最不缺的就是新概念,但agent-native不是概念泡沫——它是在真实业务场景里被验证过的工程范式。踩过的这些坑、总结的这些经验,希望后入场的朋友能少走一些弯路。如果你正在做agent项目,记住一句话:永远让agent有边界地自由,永远让你自己能看见agent在想什么。