最近一直在折腾 Agent 架构,越折腾越觉得现在的大多数 Agent 缺的不是执行能力,而是“判断能力”。一个 Agent 工具链再全,模型再大,如果它不知道什么时候该调用工具、什么时候该停下来、什么时候该换一条路走,那它本质上就是个自动化的 if-else 脚本。于是我给自己的 Agent 加了一个“判断器”,专门负责干这件事。聊到判断器,就绕不开 Laya 和 Jev 这两个名字。Laya 是一个相当轻量、开源、能塞进小设备的模型,适合做前置判断;Jev 则更像是重量级选手,擅长处理复杂推理。这篇文章我就把 Laya 和 Jev 的定位、部署方式、选型逻辑和一些实际踩坑记录都摊开聊一聊,给正在搞 agent 开发、或者在纠结怎么部署大模型的朋友一个参考。
先说清楚一个事:判断器不是某个特定的产品,而是一个架构组件。你的 Agent 可以没有判断器照样跑,但有了它之后,你会发现同样一个 Agent,在任务成功率、延迟、token 成本三个维度上完全不是一个量级。Laya 和 Jev 只是我目前用得最顺的两个选择,一个管快和轻,一个管准和深,组合起来刚好覆盖了绝大部分场景。下面我会从为什么需要判断器开始讲,然后拆解 Laya 和 Jev 的差异,接着给完整的部署流程,最后聊聊选型建议和常见问题。如果你正在用 Jetson Orin、RK3588 这类边缘设备,或者正在纠结怎么给个人电脑本地部署大模型,这篇文章里也有对应的实战记录。
1. Agent 的“判断器”到底在解决什么问题
1.1 Agent 缺的不是手,而是脑子里的闸门
大多数 Agent 框架的逻辑是这样的:用户给一个目标,框架拆解任务,模型生成步骤,然后执行工具调用。听起来很美,但实际跑起来你很快会发现一个问题——模型在执行过程中完全失控。举个最简单的例子,我给 Agent 一个任务“帮我订一张北京到上海的机票”,它会先查航班,查到之后按理说应该列出选项让用户确认。但很多 Agent 会直接自作主张选了第一班飞机,然后调用下单接口。你要是不加判断器,它可能就直接付款了。
判断器干的事就是在关键节点插一道闸门。它看的是当前上下文中发生了什么:用户是否确认了要下单?工具返回的数据是否符合预期?当前是否已经达成了任务目标?如果判断结果是不应该继续,它就会拦截住主模型的下一步动作,让 Agent 停下来问用户,或者切换策略。没有这个闸门,Agent 就是一辆不带刹车的车,能跑,但你不敢让它上高速。
我打过一个比方:没有判断器的 Agent 像一个只会按脚本执行的机器人,遇到电话忙音就一直重拨;有判断器的人会等几秒钟,换个时间再打。区别就在“要不要继续”这个决策上。这个决策说起来简单,但真做起来非常困难,因为它要求模型具备对全局状态的感知能力,而不是只看当前一步的 prompt。
1.2 判断器的三种实现路线
判断器不是只有一种做法。我实际试过三种路线,各有各的适用场景。
第一种是纯规则型判断器。用状态机、决策树、正则之类的硬编码规则去判断状态转移。比如“如果工具返回 error 字段,就重试不超过三次”。这种做法的好处是稳定、可预测、没有额外推理成本,坏处是覆盖面非常有限,现实中 Agent 面对的情况千奇百怪,硬编码规则永远写不完。
第二种是模板化判断。用一套固定的 prompt 模板,让主模型自己输出一个 JSON 格式的判断结果。很多 agent 框架内置的 reflection 机制就是这么干的。它的好处是不用额外部署模型,坏处是你要么牺牲主模型的速度,要么就等于没加判断器——同一个模型,让它既干活又挑自己的毛病,效果通常一言难尽。
第三种就是我现在推荐的做法:独立部署一个专门用来做判断的模型。这个模型不负责执行任务,只负责读上下文、输出决策。这就是 Laya 和 Jev 的定位所在。它们一个站在“前置拦截”的位置,判断用户意图、判断上下文是否完整、判断该不该调用重量级大模型;另一个站在“深度推理”的位置,处理那些需要长链条逻辑判断的场景。
说句实话,三种路线没有绝对的好坏,关键是你要清楚自己的 Agent 卡在哪。如果是任务边界清晰、工具调用次数少,纯规则判断就够用了。如果任务复杂、工具链长,那独立模型型判断器基本是必然选择。这也是为什么我聊 Laya 和 Jev 的时候,一定会带上部署——因为判断器一旦是个模型,它就一定引出一堆关于部署、并发、延迟的问题,而不只是写几行 if-else 那么简单。
2. Laya 和 Jev:两条不同脾气的判断器
2.1 Laya:轻量级选手,负责 Agent 的“前置拦截”
先聊 Laya。这个模型第一次让我觉得“判断器可以单独做成一个服务”,就是因为它足够轻。它的参数量不大,开源可下载,量化之后的内存占用在一个很舒服的范围。这意味着你可以用一个很便宜的个人电脑、一个 Jetson Orin 开发套件,甚至一块 RK3588 的开发板把它跑起来。
Laya 最适合的位置是 Agent 链路的最前端。它处理的是那种频率特别高、但逻辑相对简单的判断:用户这句话意图是否清晰?这句话需要工具介入还是闲聊?当前的上下文信息是否足够支撑主模型做出决策?如果要调度的外部模型,用轻量的还是重量级的?
我做一个类比:Laya 就像公司前台。访客来了先经过前台,前台判断这个人是要见销售、见技术还是来面试的,然后指引到对应的会议室。如果前台判断失误,把所有访客都塞给 CEO,那 CEO 就不剩任何时间处理正事了。放到 Agent 架构里,CEO 就是那个重量级大模型,Laya 的价值就是替它挡住那些不值得动用它的事情。
实际用下来,Laya 还有一个好处:它对中文的意图识别做得不错。虽然它是通用模型,但在“判断意图是否明确”这个任务上的表现,比我预期的好很多。我猜原因是判断意图本身不是一个需要大量知识的任务,它更看重模型对语义边界的理解能力,而 Laya 在训练时被打磨出来的正是这种能力。
2.2 Jev:重量级选手,负责复杂场景的“深度推理”
再聊 Jev。如果说 Laya 是前台,那 Jev 就是会议室里的那个资深顾问。它负责的是那种需要长上下文推理、多步逻辑判断的活:代码重构时判断两个模块之间的依赖冲突是否真的存在;数据分析时判断一个结论在统计学上是否成立;Agent 在工具链中执行了五步之后,判断当前的结果是接近目标还是跑了偏。
Jev 的参数量比 Laya 大不少,推理能力更强,对长上下文的支持也更好。代价是部署成本明显上了一个台阶。如果你打算本地部署 Jev,一台带独立显卡的机器基本是必须的,如果用 CPU 硬跑,速度会让你怀疑人生。我见过有人在 Jetson Orin 上试图跑 Jev,结果生成一个判断都要十几秒,这在实时交互场景里完全不可接受。
顺便说一个有意思的现象:Jev 在 codex 这类编程工具中经常被用作辅助模型。很多人以为它的作用是直接写代码,但实际用的过程中我发现在一个 Agent 体系里,Jev 更合适的工作是当“检察官”。它读代码上下文、读运行结果、判断下一步是继续测试还是回退重来。换句话说,它不是那个写代码的执行者,而是那个盯着执行者看的人。这一点和结论正好呼应了标题里“给 Agent 加一个判断器”这个动作——判断器并不需要替代执行者,它只需要知道执行者的操作对不对。
2.3 对比一下:Laya 和 Jev 的关键差异
把 Laya 和 Jev 放在一张表里看,差异会清晰很多。
| 维度 | Laya | Jev |
|---|---|---|
| 参数量级 | 轻量级,量化后适合边缘部署 | 重量级,需要独显或云端算力 |
| 推理速度 | 快,亚秒级响应 | 慢,秒级到十几秒 |
| 擅长任务 | 意图判断、前置拦截、意图清晰度评估 | 长链条逻辑判断、代码冲突分析、结论验证 |
| 部署硬件 | Jetson Orin、RK3588、个人电脑 CPU | 带独显的服务器、云主机 |
| 开源授权 | 开源,可直接下载权重 | 需要申请访问权,有授权流程 |
| 最佳搭档角色 | 前台/闸门 | 检察官/顾问 |
| 典型调用频率 | 每轮请求都调用 | 仅在关键决策点调用 |
这张表不是让你二选一,而是告诉你它们本来就不是一类东西。很多人在部署的时候纠结“选 Laya 还是选 Jev”,我的建议是别选,两个都上,各干各的活。具体怎么组合,后面第四部分会展开讲。
3. 部署实战:把判断器从“模型名”变成“服务”
3.1 本地部署的第一步不是敲命令,而是选底座
很多人一上来就问“怎么部署 Laya”,其实这个问题应该反过来问:“我手里的机器是什么配置,我需要在什么场景下使用它?”因为不同的底座对应着完全不同的部署路径。
如果你的机器是个人电脑,内存 16GB 以上,没有独立显卡,那最简单的方法是直接用 ollama 跑量化版。Laya 的 GGUF 版本下载下来之后,ollama create 一条命令就能加载起来,对外暴露一个 OpenAI 兼容的接口,用起来非常顺。我试过在这个配置下跑 Laya 7B Q4 量化版,内存占用大约 5GB 左右,推理速度大概每秒钟 20 到 30 个 token,对前置判断这种短请求完全够用。
如果机器有独立显卡,比如 24GB 显存的 RTX 3090 或者 4090 这一类,那我建议直接用 vllm 来做服务化。vllm 的 continuous batching 机制能在高并发下保持稳定的吞吐,这对 agent 架构里“多个会话同时请求判断器”的场景特别重要。你只需要把 Laya 或 Jev 的权重放到 vllm 的 model 目录里,然后启动一个服务,指定 --port 8888 之类的参数就行。
举个例子,我部署 Jev 到一台双卡机器上的时候,用的是 vllm 的 tensor parallel 模式。两张卡各占 24GB 显存,合起来 48GB,跑 Jev 的 FP16 版本非常稳。关键参数大概是这样:
python -m vllm.entrypoints.openai.api_server \ --model /path/to/jev \ --tensor-parallel-size 2 \ --gpu-memory-utilization 0.9 \ --max-model-len 8192 \ --port 8888这里有两个容易踩坑的参数。一个是 --max-model-len,这个值决定了模型能处理的最大上下文长度,如果你把 Agent 的完整历史都喂给 Jev 去判断,这个值最好设到 8192 以上;但设得越大,显存占用越高。另一个是 --gpu-memory-utilization,默认是 0.9,但如果你的机器还跑着别的服务,最好降到 0.7 左右,留出缓冲。
3.2 边缘设备部署:Jetson Orin 与 RK3588 的量化之路
再把视线放到边缘设备上。很多人搞 agent 开发不是只跑在云服务器上,还有大量场景是把 agent 嵌入到机器人、智能盒子里,这时候 Jetson Orin 和 RK3588 是最常见的两块板子。
先说 Jetson Orin。以前大家在这类设备上跑得最多的可能是目标检测模型,yolov8 那一类的,但我要说的是,deploy Laya 到 Orin 上的思路和 deploy yolov8 是完全一样的,核心就两个字:量化。Jetson 平台有 TensorRT,但 TensorRT 不是直接吃 PyTorch 模型的,你得先把模型转成 ONNX,再用 TensorRT 做 engine 导出,导出的时候顺手做 INT8 量化。
我第一次在 Orin Nano 8GB 上跑 Laya INT8 量化版,每秒钟大概能处理 40 到 50 个 token,内存占用控制在 2GB 以内。这个速度做前置意图判断绰绰有余。有个细节需要注意:TensorRT 的 INT8 量化需要标定数据,不能直接拿就转,你得准备一小批代表性的输入样本,量化的效果才会好。我当时用的是从真实 Agent 日志里抽出的一千条用户输入做标定,效果比随便找的文本好很多。
再说 RK3588。这块板子的情况略有不同,它用的是 RKNN 工具链,不支持 TensorRT。转换流程大概是:PyTorch 模型转 ONNX,然后 RKNN-Toolkit2 将 ONNX 转成 rknn 格式,再做 INT8 量化。整个流程跑通之后,Laya 在 RK3588 上的效果让我有一点意外——速度居然比 Jetson Orin 还快一些,大概每秒钟 50 到 60 token,但显存占用更高一点。后来查了一下,RK3588 的 NPU 对 transformer 结构的算子支持比 Orin 的 TensorRT 更激进,所以速度上有优势。
不过这里有个大坑:RKNN 工具链对模型算子的支持有限,Laya 的某些结构,比如某些 position embedding 的实现,在转换成 rknn 格式的时候会报“unsupported operator”的错误。我当时卡了一下午,最后通过改写模型定义里的 Tokenizer 部分才绕过。这个经验说起来简单,但如果没有实际踩过,你根本不会往那个方向去想。
3.3 扛住并发:判断器服务化的关键配置
聊完单机部署,得聊聊更高一层的场景:当你的 Agent 上线了,有成百上千个用户在同时使用,判断器服务怎么扛住并发?这个问题在热词里反复出现,说明它是大家普遍关心的问题。
我的方案分两层。第一层是模型服务层,用 vllm 或类似的推理框架来管理模型本身。vllm 的 continuous batching 可以在请求动态到达时自动做批处理,吞吐量很高。我给 Jev 配置的是最大并发 64 个请求,实测在 8 卡 A100 的机器上,每个请求的平均首 token 延迟压在一秒以内。
第二层是业务接入层。判断器不应该暴露给业务方直接用原始模型接口,而是要包一层你自己的服务,里面做三件事:请求鉴权、限流、日志。很多人在部署的时候省掉了这一层,直接把 vllm 的端口暴露出去,结果遇到流量高峰时模型服务被冲垮。我说一个具体的配置案例,用 FastAPI 包一层,内部用一个 asyncio.Queue 做请求排队,队列长度超过阈值时直接返回 503,而不是把请求全部怼到模型服务里。
另外,并发场景下有一个非常重要的细节:判断器请求必须做幂等化处理。也就是说,同一个请求重试两次应该拿到一样的判断结果。模型推理本身是有随机性的,如果你在业务层做重试,重试两次可能得到完全不同的判断,导致 Agent 行为不可控。解决办法是在请求里带上一个 session_id,然后在业务层做缓存,同一个 session_id 的同一个请求只让模型推理一次,后面的重试直接返回第一次的结果。
顺带提一嘴云部署。我看到很多人把判断器部署到 Railway 之类的平台上,图省事。如果你只是做原型验证,这没问题;但生产环境我建议还是用自己可控的服务器,或者至少用带有 GPU 的云主机。原因很简单:判断器是模型推理服务,它对 GPU 的需求是刚性的,Railway 这类平台的免费实例没有 GPU,CPU 跑 Laya 都费劲,更别说 Jev。
4. 怎么选:没有最好的判断器,只有最合适的判断器
4.1 做选择之前,先回答五个问题
每次有人让我推荐“到底选 Laya 还是选 Jev”,我都不急着给答案,而是先让他回答几个问题。因为选型这件事,选的不是模型本身,而是你整个 Agent 架构的约束条件。
第一个问题:你的 Agent 跑在哪里,用户的手机、云服务器,还是一个边缘盒子?如果是手机端,你基本只能考虑 Laya 这类轻量模型。如果是云服务器,两个都在选项里。
第二个问题:判断的频次高不高?一个 Agent 任务会产生多少次判断请求?如果每轮对话都要判断,那判断器的延迟和成本就会成为瓶颈,这时候 Laya 几乎是必然选择。如果判断只发生在任务的关键转折点,比如执行五步工具调用之后做一次复盘,那一秒钟的延迟完全可接受,可以直接上 Jev。
第三个问题:延迟敏感吗?你的用户能等多久?如果是聊天机器人,用户能接受两三秒的响应,那 Jev 判断一下完全没问题。如果是自动化交易的 Agent,一个判断多花两秒可能就错过了最佳时机,这种场景 Laya 都嫌慢,你可能得考虑更极端的方案,比如把判断逻辑下沉到规则里。
第四个问题:团队的开发能力偏向哪边?如果你们是 Python 为主,那 ollama 加 vllm 这条路很顺,没什么壁垒。如果你们做嵌入式开发,那 RKNN 工具链这一套也还好,只要你有耐心看文档。但如果你既不懂深度学习推理优化,又不想用云 API,那无论选哪个都会很痛苦,因为本地部署的关键不在于模型本身,而在于你能不能搞定量化、算子兼容这些底层问题。
第五个问题:你在意成本吗?Jev 的部署成本比 Laya 高一个数量级,这里不光是钱的问题,还包括运维精力。Jev 需要更频繁地处理显存不足、算子库版本冲突、容器化部署时的驱动问题。如果你的 Agent 本身还在快速迭代,我建议先用 Laya 把整体流程跑通,再在关键节点引入 Jev。
4.2 组合拳:Laya 做前置,Jev 做兜底
在真实的 agent 架构里,我最推荐的组合方式是:Laya 站在入口,Jev 站在关键决策点。整个调用链是这样的:
用户输入进来,先不算 token 成本,先交给 Laya 做一个快速判断,输出一个 JSON,里面包含三个字段:意图类型、是否需要外部工具、上下文完整度。Laya 说“需要外部工具”,Agent 才去调度工具。如果 Laya 判断意图不明确,Agent 就直接反问用户,而不是浪费一次重量级模型的调用。
当工具执行完,拿到一堆中间结果之后,主模型可能意识到“结果有点不对劲”,但说不清楚哪里不对劲。这时候 Jev 出场,把所有上下文打包给它,让它做一次深度判断:当前结果是正确路径上的一个中间态,还是已经完全偏离目标、需要回退重来?Jev 的这个判断往往非常准,我实测下来它对代码依赖冲突的判断准确率远高于普通的大模型直接判断。
这套组合的好处是显而易见的:速度和成本。Laya 的一次判断只要几百毫秒,Jev 的一次判断要好几秒,但 Jev 只在关键转折点出现,所以整体链路还能保持在可接受的延迟范围内。成本上,Laya 的 token 消耗很低,Jev 的 token 消耗虽然高,但因为次数少,总成本反而比把每一个请求都发给大模型要低得多。
4.3 判断器和 Agent 框架怎么融合
聊了这么多,还有很多人会问:判断器和现有的 agent 框架之间到底是什么关系?这个事我得先澄清一个概念:harness 和 agent 是两回事。harness 是底层的执行环境,负责工具调用、沙盒隔离、上下文管理等基础设施;agent 则是那个做决策的实体。判断器属于 harness 层的一种特殊插件,它嵌入在 agent 决策循环里,但不属于任何具体业务。
举个实际的例子。你在用 Codex 或者 Claude 的工具时,经常会遇到沙盒更新失败的现象。看起来是环境问题,但根子在于 agent 在拿到工具调用权限之后就直接执行了,没有做任何前置判断。如果 harness 层接入了一个 Laya 判断器,它可以在调用沙盒之前先看一下环境状态是否正常,再决定要不要执行。
我在接入 deerflow2.0 这类可视化编排框架时,发现它们对这种“判断器”的支持其实很弱,要么是内置一个固定的 reflection 步骤,要么就是提供一个让模型自评的节点。我的做法是自己写一个自定义节点,包一个 HTTP 请求,指向 Laya 或 Jev 的服务,这样编排流程不变,但判断能力就插进去了。这个思路同样适用于其他框架,关键是理解判断器是一个独立服务,而不是某个框架内置的固定功能。
5. 踩坑记录:那些我以为没问题的地方,最后都炸了
5.1 坑一:判断器比主模型还慢,拖垮了整个 Agent
这个坑应该排在第一位,因为我一开始就对“判断器”存有一个错误的假设:判断是轻量级的,所以它应该很快。结果我把 Jev 放在每一轮对话的判断节点上之后,整个 Agent 的响应时间直接从 2 秒涨到了 15 秒,用户根本等不及。
排查过程倒是很简单,我打印了每个节点的耗时日志,发现 Jev 单次推理要 6 到 8 秒,加上网络传输和上下文组装,整个链路就没法用了。解决方法是分层:高频、轻量的判断全部走 Laya,Jev 只处理长上下文的深度判断。调整完之后,高频判断的响应时间回到了一秒以内,Jev 只在真正需要的场景出现,整体体验立刻恢复了。
这里一个教训是:判断器是额外的一跳,如果你在每一轮都安排重量级判断,那他本身就会成为新的瓶颈。架构上一定要先想清楚,什么层级该用多重的判断。
5.2 坑二:上下文截断,长对话后判断器突然“失忆”
另一个让我印象深刻的坑是:当 Agent 的会话进行到了比较长的位置,对话历史加起来超过八千 token,我用的是 Laya,它的上下文窗口比较小,输入超过上限后会被截断。截断后的结果就是判断器突然“失忆”,完全不知道之前发生了什么,输出的判断开始胡说八道。
这个问题不是靠调参能解决的,而是要在架构上做取舍。我的做法是:给 Laya 的判断只喂“最近两轮对话 + 工具调用结果摘要”,而不是全量对话历史。摘要由主模型负责生成,每完成一步就更新一次。这样 Laya 始终在它擅长的短上下文区间工作。如果需要看全局状态,再交给 Jev,让 Jev 读完整上下文来做判断。
这种“分工”思路值得拿出来强调一下:不是所有判断器都需要理解全局。轻量级的判断器,你只需要给它局部状态;重量级的判断器,才给它全局状态。用错了,模型能力再强也白搭。
5.3 坑三:并发上来之后,重复调用把成本拉爆了
第三个坑出在并发场景。Agent 服务上线之后,我设了一个简单的超时重试机制:判断器请求超过 3 秒就重试一次。结果在流量高峰的时候,同一个判断请求被重试了四五次,每次都是对一个重型模型发的,token 成本直接翻了几倍。
这个问题的根子在于我没有做请求的幂等和去重。修复方式也很简单,如前面提到的,在业务层加一个以 session_id 加请求指纹为 key 的缓存,已经处理过的请求直接返回结果,再设置一个短 TTL,比如 30 秒。这样即便是网络抖动了,重试也不会再次打到模型上。
写这段的时候我想起一个更深的坑:判断器的高并发还有一个隐蔽问题,就是 batch 和请求长度。如果你把很多超长上下文的判断请求同时发给 Jev,GPU 显存会瞬间被撑爆。建议在服务层给请求按上下文长度分级,把短上下文的请求优先处理,长上下文的往后排或者走另外的队列,避免短请求被长请求堵住。
5.4 坑四:Jev 的授权申请流程比想象中复杂
Jev 官方提供了一个申请访问权的流程,最初我以为填个表单、留个邮箱就能拿到权重,结果实际操作下来,要填的信息比我预想的多很多,还涉及到一些用途相关的说明。整个过程大概花了一周时间才拿到授权下载链接。
在等待授权的这段时间里,我一开始没想好替代方案,整个开发节奏都被打乱了。后来我学乖了,开发阶段先用一个替代模型把逻辑跑通,等 Jev 的授权下来再替换模型权重,做最后的效果验证。这里一个小建议:在系统设计时一定要把模型服务抽象成接口,别把某一个模型写死在代码里。这样换模型的时候,改一行配置就够了,不用动业务逻辑。
5.5 一个让我省下无数时间的小技巧:结构化日志审计
最后一个部分,想聊一个很多人都忽略的细节。判断器这种东西,它的价值在于“决策质量”,而决策质量是需要被持续评估的。如果判断器做出了一个错误判断,导致 Agent 任务失败,你需要能够从日志中还原出判断的过程、输入的上下文、输出的决策、以及后续的执行结果。
我的做法是让判断器服务把所有输入和输出都记录成结构化日志,用 JSON 格式,包含字段:请求 ID、模型名、输入上下文摘要、输出判断结果、耗时、命中哪一个分支。然后我会定期抽查这些日志,统计 Laya 和 Jev 的判断准确率。有一次我发现 Laya 对“用户是否明确表达了拒绝意图”这个判断经常出错,后来定位到原因是输入里缺失了用户最近一次消息的语调信号。改了输入截断策略之后,准确率立刻提升了。
这个小技巧看起来不起眼,但它是优化整条 Agent 链路最有效的切入点。日志没有,你只能靠感觉去调 prompt;有日志,你就能靠数据去指导优化。
我给自己的 Agent 加判断器的第一个版本,说实话,非常简陋,就是一个用规则写的 if-else 判断模块,只能处理几种固定情况。后来换成 Laya 做前置拦截、Jev 做关键节点深度判断之后,整个 Agent 的稳定性和成本控制都上了一个台阶。如果你也在折腾 Agent,我的建议是别一上来就追求两套模型完美配合。先从一种判断器开始,比如先用 Laya 把入口判断做好,跑一段时间看日志、统计错误的判断类型,再在需要重推理的节点引入 Jev,一步步加。另外,日志和幂等这两个工程问题,一定要从第一天就开始做,晚了你会付更多学费。