刚刚过去的这两周,跟几个做AI应用的朋友聊天,大家嘴里冒出来的高频词不再是“大模型”“RAG”,而是变成了“agent-native”。这个词乍一看有点拗口,但你要是把它翻译成“把智能体当成应用的一等公民来设计”,很多之前卡住不动的思路一下就通了。群里有人开玩笑说,上一波是“AI套壳”,这一波是“AI换个骨架”,虽然话糙,但理不糙:agent-native不是给现有软件贴一个聊天机器人皮肤,而是从架构层面把“自主规划、工具调用、记忆复盘”放进应用的六缸引擎里。这篇文章就是想说清楚,agent-native到底在解决什么问题、它和传统架构的本质区别在哪、一个最小可落地的智能体应用该怎么搭,以及我们在真实项目里踩过哪些坑。适合正在做AI应用架构、LLM产品落地,或者对智能体工程化感兴趣的人,读完之后你能拿到一套可以直接开跑的参考设计,而不是又一轮概念科普。
1. 什么是agent-native:从“给AI套壳”到“让Agent当主角”
1.1 为什么这个词最近突然被反复提起
这两年的大模型应用开发,大多数人走的是同一条路:拿一个聊天界面,接上大模型API,再塞一个system prompt,就算上线了。这种模式没法说它错,很多内部知识库问答、营销文案生成,确实靠它撑起了业务。但问题也很快暴露出来:一旦任务涉及多个步骤、需要查数据、调系统、做决策,这种“单轮问答”式的架构就撑不住了。
比如用户问一句“帮我查一下这个订单为什么还没发货”,传统问答架构只能把上下文甩给大模型,大模型胡编一个原因出来,因为它根本不会去翻订单系统。你要么得提前把所有数据喂进去,要么得写死一堆if-else去判断该查哪个接口。前者不可持续,后者绕回了传统软件的老路。
agent-native就是冲着这个痛点来的。它的核心思路是:不要再用“用户输入一句话,模型吐一句话”这种模式去设计应用,而是把这个应用本身看作一个能干活、会规划、能调动工具的Agent。用户表达目标,Agent自己拆步骤、自己选工具、自己执行、自己校验结果,最后把结果交给人来做判断。这个词最近频繁出现,本质上是AI应用开发从“模型能力展示阶段”进入“系统稳定性竞争阶段”的标志。
1.2 agent-native和传统架构的核心分界线
有一回我在团队分享会上画了一张对比图,把三类应用并排放在一起看,大家对“agent-native”的理解立刻拉齐了。这里我把同样一张表格放出来,基本能说明它们的分界线:
| 维度 | 传统SaaS应用 | AI增强型应用 | Agent-Native应用 |
|---|---|---|---|
| 用户入口 | 表单、按钮、菜单 | 聊天框 | 自然语言目标输入 |
| 流程决策者 | 程序员预设的代码分支 | 大模型生成回复内容 | Agent自主规划并调用工具 |
| 数据获取方式 | 前端请求后端接口 | 模型凭训练知识作答 | 按需调用工具获取实时数据 |
| 失败处理 | 异常捕获重试 | 回复“我不知道” | 反思、纠错、换一种路径再试 |
| 状态记忆 | 数据库持久化业务数据 | 单轮对话无状态 | 有工作记忆、可跨步骤延续 |
| 系统扩展方式 | 加接口、加表 | 换Prompt、换模型 | 注册新工具能力强 |
举一个更直白的例子。传统CRM里“创建一张商机”是一个填写商机名称、金额、负责人、预计成交日期的表单页,用户必须按字段填。AI增强型CRM里,用户可以说“帮我建一张跟张三的商机,金额大概20万”,大模型会把这句话转成JSON塞进接口,确实省了一步操作。但这里决策权还在人手里——填什么字段、什么时候填、要不要看历史往来,都是人来决定。
agent-native的CRM就完全不一样了。用户可以说“跟进一下跟张三的那张商机”,Agent会自己先去查商机当前处于哪个阶段,去翻往来邮件、会议纪要、跟进记录,再自己判断:这个阶段应该做一次方案报价,还是推一个高层互访,还是把赢单概率下调。主动调用“写跟进记录”工具记录自己的决策依据,然后生成下一步建议给用户确认。这种应用里,Agent不是在给业务流打下手,它本身就是那个业务流的执行者。
这也是我在内部反复强调的一句话:agent-native不是聊天界面,也不是工具调用,而是应用的控制权发生了转移。控制权从“程序员写死的流程”转移到了“Agent自主决策的循环”上。为了让这套东西真正能跑、敢跑、跑得好,我们才需要讨论架构、工程、可观测性、护栏这些问题。
2. agent-native架构的核心组成:一个最小可落地的设计参考
2.1 架构分层:不要一上来就写Agent循环
很多人看了一些智能体Demo之后,第一反应就是:我也可以写一个while循环调大模型,里面塞一堆Function定义,不就是Agent了吗?技术上确实可以这么做,但现实世界里这么干的项目,十有八九在第六次tool call之后就失控了。
我目前在团队里推广的分层方式是这样的,把agent业务代码和模型调度解耦开。你们会发现,真正让一个Agent稳定跑起来的,反而是那些“不直接调模型”的层:
- 模型接入层:负责管理不同供应商的模型API、key、路由策略。不是所有节点都需要上最强的模型,分类、抽取这些脏活用性价比型号就够了。
- 智能体内核层:这是Agent的大脑调度区,负责解析用户目标、编排多步任务、维护对话状态、决定何时结束。内核层不应该感知具体业务。
- 工具层:把用户系统里的API封装成标准工具,注册给Agent调用。这一层我后面单独讲,它是工程量和坑最多的。
- 记忆层:管理短期工作记忆和长期业务记忆。短期记忆是当前任务上下文,长期记忆是把用户偏好、历史决策存起来,做Embedding和检索。
- 护栏层:所有工具调用的权限检查、敏感操作审批、最大步数限制、内容安全过滤,全部在这一层处理。
- 可观测层:记录每一轮推理、每一次工具调用、每一步token消耗,方便复盘和评测。
最初我们的第一个版本把所有逻辑塞进一个Agent类,模型调度、工具注册、权限判断全揉在一起,改一个需求要翻八百行代码。后来发现跑起来最稳的项目,全部是分层清晰的。尤其是“工具层”和“护栏层”独立出来之后,很多安全问题其实在架构层面就被挡住了。
2.2 工具层设计:Agent的四肢怎么接才不容易崴脚
工具层是agent-native架构里最像“接口设计”的地方,也是传统后端工程师最能接手的地方。但这里有一个大坑:大多数后端工程师习惯了设计REST API,但Agent工具接口的设计逻辑完全不一样。
REST API面对的是程序调用者,你要保证参数是明确的、返回是结构化的,调用出错返回4xx/5xx。但工具接口面对的是大模型,大模型不会像程序员那样仔细读你的API文档,你给它的字段名、描述、示例,决定了它能不能正确调用。我举一个真实的教训:一个技能我们用的时候,把工具参数里的日期格式写成“unix时间戳”,字段描述里写了一行小字注释。结果Agent用的时候一会儿给“2025-06-01”、一会儿给“1717171200”、一会儿给“6月1日”,三次调用两次失败。后来我把时间参数拆成“date”和“timestamp”两个可选格式,并把格式要求直接写在参数描述的第一句话里,成功率才上来。
工具层的第二件事是“Agent可感知性”。给Agent注册工具,不能只给它一个函数名,要把以下信息作为工具元数据一起提供给模型:
- 工具名称与别称:名称最好符合自然语言的动词习惯,比如“查询订单”而不是“query_order_info”。
- 参数定义、类型、必填项、取值范围,尤其要写清楚格式示例。
- 工具使用场景说明,什么时候该用这个工具、什么时候不该用。
- 返回结构说明与可能出现的错误状态。
我用工具元数据模板做过一次系统性补全之后,Agent第一次调对工具的比例从52%提升到了接近80%。这一步几乎不需要算法能力,就是纯工程功夫,但收益立竿见影。还有一个容易被忽略的点:工具层必须支持“同步”和“异步”两种模式。有些工具接口要跑几十秒,比如生成报告或者触发一个审批流。如果Agent卡在那儿等,整个对话体感会非常差。异步模式下,Agent可以先把任务挂起,去做别的步骤,后面再回来取结果。这个特性在最新一轮架构迭代中帮我们扛住了不少真实场景。
2.3 路由与工作记忆:Agent循环的“状态管理”怎么做
Agent循环的伪代码看起来很简单,无非是“模型推理->选工具->执行->观察结果->再推理”。真正难的是状态管理。有一个问题几乎所有Agent应用都会遇到:用户和Agent进行多轮对话,中途Agent自主调了五个工具,执行到第三步出错了,这时候这个“对话+执行状态”怎么保存?
我们的做法是引入一个“任务画布”(Task Canvas)概念。它本质上是一份结构化的工作记忆,里面包含:
- 用户原始目标。
- Agent的当前计划(plan),每一步是待执行、执行中、已完成还是失败。
- 已收集到的关键事实(fact bank),按照来源、可靠程度、时间戳记录。
- 已经执行过的工具调用记录,包含输入输出摘要。
- 当前需要用户确认或提供的信息清单。
这个“任务画布”会作为系统状态,每次Agent推理前重新注入Prompt。千万别把整个历史对话一股脑塞进去,那样既费token,又容易让模型注意力涣散。我们的做法是维护一个压缩过的“事实摘要”,比如“用户已经确认订单归属地是上海,金额为1890元,需要走退款流程”,而不是把十几轮对话原样带进去。
工作记忆设计完,还要处理好“什么时候要反问用户”的问题。很多Agent翻车是因为它碰到一个小歧义就开始连环追问,非常烦人。实际经验是,只要当前信息足够支撑完成目标的85%,就大胆继续往下做,把不确定的地方写进最终报告里让用户自己确认。比如目标是“查询所有未发货订单并统计金额”,Agent不知道统计范围是“本月”还是“全部”,这时候默认“全部”并累加,报告里写“统计口径为所有未发货订单(未限定月份)”,这套做法在真实场景里的接受度远高于反复确认,用户反而觉得你靠谱。
3. 实操记录:把一个工单系统改造成agent-native的全流程
3.1 场景选择:为什么拿工单系统开刀
纸上谈兵聊了这么多,拿一个具体项目做拆解会更直观。我们团队最近把一个轻量级的客服工单处理系统,从传统表单式流程抽象成了一个agent-native应用。选这个场景有三个原因:第一,工单处理天然是多步任务,涉及读取工单、查用户订单、判断售后服务政策、生成回复、发送通知等动作;第二,它有清晰的成功指标,比如工单解决率、平均处理时长,方便评估Agent到底有没有带来收益;第三,它属于企业内部工具,即使Agent抽风了,也不至于直接面向公众用户造成负面影响。
原来的系统是怎么跑的呢?用户提交一个工单,字段包括联系方式、问题分类、问题描述。后端把工单丢进一个队列,售后客服打开工单,自己切换三个后台去查下单记录、查物流、查退款规则,然后在工单里填写回复。整个流程不算复杂,但特别耗时间,一个熟练客服处理一张标准工单也要5到8分钟,而且需要熟悉内部多套后台系统的操作路径。
改造目标定为:让Agent自动完成“信息收集-政策匹配-方案生成”这三步,人工客服只做“审批发货/退款动作+处理很特殊的异常”。量化的指标是:零手工输入的工单处理比例要达到60%以上,单张工单的平均处理时长降到2分钟以内,同时不增加客诉率。
3.2 第1步:把工单处理能力封装成五个工具
我按前面说的“工具层设计”原则,先把原来客服需要手动操作的内部系统能力封装成了标准工具。第一批一共注册了五个工具:
- 查询工单详情:输入工单ID,返回标题、描述、当前状态、优先级、创建时间、自定义字段。
- 查询用户订单:输入用户ID或手机号,返回该用户近半年的订单列表,每笔订单包含金额、商品、支付时间、发货状态。
- 查询售后政策:输入商品类目与问题类型,返回适用的售后政策文本及关键规则。
- 生成回复草稿:输入工单ID与处理建议,调用大模型生成面向客户的温和回复文本,支持中英文。
- 提交工单处理结果:输入工单ID、处理动作(退款/补发/换货/驳回)、处理备注,最终将结果写回工单系统。
这里面有一个设计细节,可以体现“agent-native”和“AI辅助”的区别。我们没有把“查询订单”和“查询售后政策”两个动作合并成一个工具,而是故意拆开。因为合并之后,Agent很容易在一个工具里只根据“用户ID”就做判断,缺少“问题类型”这个关键条件就去查政策,结果非常不精确。分开之后,Agent必须自己组合这两个工具,它反而会更有逻辑。
还有一些情况下,Agent会面对一个没有用户ID的工单,只有一串订单号。为了兼容这种情况,我们特意在第一个版本让“查询用户订单”工具同时支持“订单号直接查询”和“用户ID查询”两种模式。用工具描述告诉模型“两者任选其一即可”,又在返回结构里同时输出订单号和所属用户ID。这个看似很小的兼容设计,实际跑的时候避免了将近1/5的工具调用失败。
3.3 第2步:用“Plan-and-Execute”的式子写Agent调度
工具定义好之后,Agent的内核调度逻辑我用了一个比较经典的Plan-and-Execute变体。核心想法是:先让Agent基于用户目标生成一个行动计划,再把计划里的步骤逐一执行,每执行一步根据观察结果更新计划。
这里给出调度器的简化代码,你可以看出核心循环并不复杂,复杂的是每一步对结果的处理逻辑:
class TicketAgent: def __init__(self, llm, tools, executor): self.llm = llm self.tools = {tool.name: tool for tool in tools} self.executor = executor self.canvas = init_canvas() def run(self, ticket_id): # 第一步:读取目标,生成初始计划 ticket = self.call_tool("查询工单详情", {"ticket_id": ticket_id}) self.canvas.add_fact("ticket", ticket) plan = self.llm.plan(self.build_plan_prompt(ticket)) self.canvas.plan = plan # 第二步:执行计划,每次执行后更新工作记忆 for step in plan.steps: if self.executor.need_confirmation(step): return {"status": "waiting_user", "question": step.confirmation_question} result = self.call_tool(step.tool_name, step.arguments) self.canvas.add_fact(step.tool_name, result) # 根据新事实,让模型决定是继续执行、调整计划还是终止 decision = self.llm.decide(self.build_decision_prompt(self.canvas)) if decision.action == "terminate": break elif decision.action == "revise_plan": self.canvas.plan = decision.new_plan # 第三步:汇总生成处理建议 suggestion = self.llm.summarize(self.build_summary_prompt(self.canvas)) return {"status": "suggest", "suggestion": suggestion}注意,我这里的“工具调用”全部走了一个执行器(executor),这个执行器承担的是“护栏”功能:检查Agent是否有权限调用这个工具、参数是否满足格式要求、最大步数是否超限。因为工具调用本身是真实的业务动作,不能裸奔。尤其是“提交工单处理结果”这个工具,我把它标记为“高危动作”,每一次调用前,执行器会要求Agent返回完整的参数解释,只有确认无误才放行,同时记录操作人、工具名、入参出参,给到审计日志。
在实践中还有一个细节:Agent在计划里写了“调用查询用户订单”和“查询售后政策”,但两个步骤谁先谁后是有讲究的。我们通过Prompt里的一个示例路径去引导它:先查工单详情,再查该用户订单,确认购买记录之后,再查售后政策,最后生成建议。这种“路径示范”比直接约束规则更有用,模型能通过示例学会业务处理上的顺序偏好。
3.4 第3步:接入记忆层与人工审批节点再说结果
我们在线跑了两周,重点观察两个核心数据:工具调用成功率和端到端工单解决率。下表是迭代前后的一组对比:
| 指标 | 初版裸奔 | 优化工具元数据后 | 加上记忆层后 |
|---|---|---|---|
| 首次工具调用成功率 | 52% | 78% | 81% |
| 单张工单平均处理时长 | 4分36秒 | 3分12秒 | 2分45秒 |
| 需要人工介入的工单占比 | 41% | 33% | 27% |
| 零修改直接可发送的回复草稿占比 | 35% | 52% | 64% |
“加上记忆层”这一步我们做了什么?主要是两点。第一,把用户历史工单处理偏好存进了长期记忆,比如“该用户偏好不接受自动扣款,所有退款都需要人工确认”。下一次同类工单进来,Agent会把这条偏好直接列入计划约束里。第二,我们给Agent设计了“人工审批节点”——处理建议中如果包含退款金额超过500元、自动补发高价值商品、或者需要联系其他部门等高危动作,Agent不能直接执行,而是生成方案后挂起,等待人工客服点击确认。这个节点的存在让我们敢真正在生产环境放权给Agent,不怕它偶然“自作主张”。
两周跑下来,系统平均每天处理42张工单,其中约73%的工单做到了“零人工输入,Agent直接给出可发送的回复和可执行的处理动作”,剩余部分要么信息不足需要补充,要么触发了人工审批规则。整体客诉率没有上升,处理时效比原来提升了一倍以上。这个结果不算惊人,但足够给团队信心继续走agent-native路线。
4. 关键工程问题与避坑指南:那些跑生产环境才暴露的坑
4.1 幻觉与误判:工具返回结果不等于事实
第一个要单独拎出来说的坑,是Agent把工具返回值解读错。明明工具返回“该用户近90天无任何订单”,Agent在处理建议里却写“该用户近期购买过多次,建议优先处理退款”。第一次看到这种输出我以为是随机抽风,后来统计了一下,这种“对工具返回结果的误读率”竟然有5%左右。
原因倒也不复杂:工具返回值通常是结构化的JSON,字段名、嵌套层级一多,模型在长上下文里的提取注意力会下降。我们的解法是给工具返回值增加一个“summary”字段,让后端程序根据业务逻辑生成一句人类可读的自然语言概要,比如“该用户近90天无订单记录,历史购买3次,最近一次为8个月前”。Agent优先读取summary,原始JSON只在必要时使用。加上这一步之后,误读率降到了1%以内。这是投入产出比极高的优化。
严禁指望模型“看懂所有字段”。它毕竟不是程序员,不要用传统API对接的思维要求它。给模型的返回结构要极简,一层嵌套不要超过两层,能平铺就平铺,多余字段一个都别给。
4.2 死循环、空转与成本失控:护栏不能省
Agent应用最常见的技术故障,不是模型不听话,而是陷入死循环。现象很简单:Agent调用工具A得到一个结果,然后调用工具B,B的结果和A冲突,Agent就在脑子里转圈,反复重试,不断消耗token和API额度。我们有一次事故就是Agent循环了37次,花费相当于正常处理的15倍,最后还生成了一个错误的结论。
护栏层的几条硬规则,建议写死:
- 单次任务最大工具调用次数设为10次,超过即强制结束并转人工。
- 同一个工具连续调用3次且结果未变化,允许Agent重试一次,然后立即标记异常并收集轨迹复盘。
- 当Agent连续两次调整计划但仍无法完成目标时,直接终止,生成“当前卡点+已获取事实”的报告给用户。
这些数字你不需要完全照搬,但规则本身的思路一定要有:Agent必须知道自己“何时该停止”,并且这个停止的条件不能由Agent自己判断,而是要由外层执行器以硬代码形式强制执行。否则你就是在赌模型的判断力,赌注定会输。
4.3 可观测性:Agent的每一次思考都要能复盘
传统应用的bug好查,因为它是确定性的:入参确定,出参就能复现。Agent应用不一样,同样的输入,两次运行可能走完全不同的工具路径。上线第一天我们就发现,出了问题你根本说不清是哪一个决定错了、哪一段上下文污染了、哪一个工具返回误导了。
所以在搭建agent-native系统的第一天,就要把可观测性设计进去。每一轮推理至少记录下来:
- 用户原始目标。
- 当前工作记忆的内容(尤其是事实摘要)。
- 模型产出的计划或决策。
- 工具调用输入输出摘要。
- 模型决策动作与原因。
- token消耗与单轮耗时。
这些数据主要用来做两件事。第一是出问题追责,回放进单个任务轨迹,一眼就能看出是哪一步走形了。第二是沉淀评测集,把线上失败的轨迹变成测试用例,加上正确路径,形成Agent回归测试集。我们一开始没钱没精力搞专门评测平台,就用一个简单的SQLite把轨迹存下来,再定期抽样生成报表。跑了一段时间之后,这条轨迹数据成了整个项目最宝贵的资产。没有这套记录,后面想做任何Agent效果优化都是盲人摸象。
4.4 权限与安全:工具必须有边界,Agent不能绕过
最后是最容易被低估的安全问题。一个agent-native应用里,Agent能调的工具有可能越来越多,从查订单到发邮件到改数据库。如果没有权限管控,它的能力边界会变成攻击者的攻击面。我们用的是一套“最小权限+分级动作”方案:
- 只读工具(查询订单、查政策)默认放行,但记录审计日志。
- 普通写操作(更新备注、生成草稿)需要Agent提供参数合理性说明,执行器做格式校验。
- 高危写操作(退款、删数据、审批)强制人工确认,且限制Agent最多只能生成建议,不能直接执行。
这套权限模型还有一个隐藏好处:它能让业务方放心批准Agent接入更多系统。你的运维或安全同事一听“高危动作不会自动执行”,审核意愿明显高很多。所以这不是拖延开发的枷锁,反而是推进落的加速器。
5. agent-native带来的连锁影响:从产品形态到团队分工
5.1 对产品设计的影响:界面从“填表”变成“表达意图”
agent-native对产品设计最直观的影响,是传统的导航菜单、表单页、操作按钮会被大幅压缩。用户不再需要在十几个下拉框里选条件,而是直接说“帮我找一下上个月上海所有金额大于五千但还没审核通过的报销单”。Agent去拼接条件、过滤数据、展示结果,并追问是否需要生成汇总。
这种变化意味着产品经理的思考方式要转一个大弯。过去做设计想的是“用户流程有几步、每步什么字段、分支条件怎么写”。现在要想的是“用户表达目标时可能有哪些句式、Agent需要哪些工具来满足这些目标、哪些目标可以合并处理、什么时候需要人的介入”。界面退居二线,能力编排才是产品骨架。
5.2 对后端架构的影响:API从“流程接口”变成“能力注册”
传统后端API设计面向业务流程,一个“创建退货单”接口背后是完整的状态机。在agent-native架构里,这些能力会被拆成细粒度的工具,然后交给Agent编排。还是退货单的例子,新的架构下可能是:
- “查询订单信息”工具负责获取上下文。
- “校验退货条件”工具负责判断是否符合政策。
- “计算退款金额”工具负责算钱。
- “发起退货流程”工具负责最终动作。
每个工具都保持简单和独立,Agent来决定调用顺序和触发条件。接口的语义不再是为某个业务流程服务,而是成为Agent“能力圈”的一部分。这有点像一个高度模块化的中台,但消费者从前端页面变成了智能体。对后端工程师来说,这意味着接口设计要考虑“机器可读性+模型可理解性”双重标准,描述写得清不清楚,直接影响线上成功率。
5.3 对团队结构与研发流程的影响:Prompt、评测、轨道工程成为新工种
团队里开始出现几种以前没有的岗位分工。第一种是“Agent轨道工程师”,专门设计Agent的思维流程、工具调用路径、工作记忆格式,把模糊的业务目标翻译成Agent可以执行的逻辑链。第二种是“测评工程师”,负责维护线上轨迹回放、构建回归测试集、统计工具调用成功率和任务完成率。第三种是“护栏工程师”,理解安全审计要求,介入工具权限体系设计,保证Agent释放能力的同时不失控。
这倒不是说每个团队都要马上招这三个岗位,而是说做agent-native应用的团队必须有人能承担这三类职责。哪怕是一个人兼职干,也比完全没人关注强。我们早期就是三个人轮流承担,每次迭代谁改的工具层谁写对应评测用例,上线前互相交叉检查护栏规则。这个流程撑过了两个大版本迭代,没出过大事故。
6. 我的一些经验总结,以及下一步可以做的事
做了这么几轮agent-native项目改造之后,我个人最深刻的体会是:不要把agent-native当成一种技术炫技,它本质上是一种新的系统设计责任。你交给Agent的每一个工具、允许它做的每一个决定,都是在把你的业务规则委托给一个永远不可能100%稳定的模型。正因如此,架构分层的清晰度、工具元数据的完整度、护栏规则的强制力、可观测数据的沉淀量,这些“不那么性感”的工程活,反而决定了项目能不能活过第一个月。
如果你准备在下一个项目里尝试agent-native,我建议从一件小到不能再小的业务场景开始,比如“自动查询订单状态并生成客服回复”。先别想着造一个万能智能体,把工具层做扎实、把工作记忆设计好、把审计日志跑通,一两个场景打透之后,再横向拓展能力圈。等你的Agent能够稳定解决第一个业务目标的80%场景,再回头看最初的Demo,你会清楚地感受到,从“调用模型”到“运行一个Agent系统”,中间隔着一整个工程化世界。
沿着“工具层标准化”和“评测集自动化”这两个方向继续深挖,是我最近的重点。等我们下一轮迭代跑出更完整的数据,第一时间来分享。