做Agent开发这两年,我最大的感触是:很多项目的瓶颈根本不在模型能力,而在决策质量。模型再强,如果不知道什么时候该快、什么时候该慢,Agent就会在简单任务上绕圈子,在复杂任务上翻车。我们团队做企业级客服Agent的时候,最头疼的不是某个Prompt写不好,而是整条决策链路一团乱麻——所有请求都往大模型上怼,简单问题也要3到5秒才返回,复杂问题反而没有时间做多一步验证。后来我重新翻了《思考,快与慢》,突然意识到Agent缺的不是更强的推理,而是把System1(快速直觉)和System2(深度推理)结合起来的一套认知工程设计。
这篇文章我会结合项目里的实际落地经验,把Agent认知工程、决策链路设计、System1模型构建这些概念讲透,会给出具体代码和实测数据,也会分享我们踩过的坑。适合正在做Agent应用开发、想从0到1搭建Agent、或者单纯对Agent决策机制感兴趣的朋友,读完你至少能知道:为什么Agent需要双系统决策,怎么构建一个毫秒级响应的System1层,以及怎么用动态决策快照让系统可解释、可优化。
1. 为什么Agent要谈认知工程
1.1 认知工程不是概念包装,是Agent走向实用的必经之路
我先说个结论:Agent的实用性,八成取决于决策架构,而不是模型选型。模型是核反应堆,决策架构才是控制棒和冷却系统,没有后者,能量越大越容易出事故。
认知工程这个词听起来学术,落到工程上就是三件事:怎么接收信息、怎么决定下一步动作、怎么从结果中学习并调整后续行为。传统软件是人工编排好的状态机,每一步都是确定的;而Agent面对的是开放世界,输入形式五花八门,目标也可能模糊。这时候如果只靠"提示词+工具调用"的叠加,系统很快会失控。
我们第一版Agent就犯了这个错误,所有意图都靠大模型判断,结果线上每天几千个请求,大模型响应慢不说,还会在简单分类上互相矛盾——同一个用户说"我要退款",今天路由到售后,明天路由到财务,业务方完全没法信任这个系统。后来我们把认知工程方法引进来,把决策链路拆成感知、识别、路由、执行、评估五个环节,才逐步解决了稳定性问题。
1.2 System1和System2不是心理学名词,是两套可落地的决策路径
丹尼尔·卡尼曼把人类认知分成两套系统:System1是快速、自动、直觉式的,比如你看到红灯会下意识刹车;System2是慢速、理性、分析式的,比如你算一道复杂微积分题。Agent要高效运转,也必须拥有这两条路径,而不是只用一条。
我这里画一个对照表,帮助大家理解这两套系统在Agent里对应的工程实现:
| 维度 | 人类System1 | 人类System2 | Agent System1(快路径) | Agent System2(慢路径) |
|---|---|---|---|---|
| 处理速度 | 毫秒级 | 秒到分钟级 | 毫秒到几十毫秒 | 数百毫秒到数秒 |
| 计算成本 | 低 | 高 | 规则命中、向量检索、本地小模型 | 大模型多步推理、工具调用 |
| 典型任务 | 识别熟悉场景、快速反应 | 解决复杂问题、规划推演 | 意图分类、关键词路由、缓存命中 | 复杂问答、多步规划、自我反思 |
| 出错特点 | 大概率正确,但会有系统性偏见 | 更准确,但容易疲劳和延迟 | 依赖规则覆盖度,未覆盖场景会误判 | 需要更长逻辑链,Token耗尽可能断链 |
| 是否可预测 | 一般 | 较高 | 确定性高,可单元测试 | 确定性低,难以完全复现 |
我见过很多团队把全部决策都交给System2,也就是所有请求都进大模型,最后交付给客户的Agent延迟高、成本高、行为不可控。也见过另一类极端,就是写一堆死板规则,覆盖不了真实场景,用户一句话换个说法就"听不懂人话"。真正可用的Agent,一定是在两条路径之间做聪明切换的:高置信度、低风险的请求走快路径;低置信度、高风险的请求走慢路径。
2. Agent决策架构的整体设计思路
2.1 一条决策链路的五个环节拆解
理解了为什么需要双系统之后,问题是决策链路具体怎么串起来。我们项目里最终沉淀了一套五环节结构,几乎适用于所有信息型Agent:
第一环是感知层。原始输入可能是用户消息、传感器读数、系统事件,这一层要做输入规范化和上下文补全。比如用户只发一句"太慢了",系统要结合上一轮对话判断"慢"指的是快递慢、响应慢还是系统处理慢。
第二环是意图识别与分类。这里不一定用大模型,FastText、BERT蒸馏后的小模型、甚至规则表达式都可以。关键在于产出结构化标签,比如"物流查询"、"退款申请"、"人工转接",并且附带置信度。
第三环是决策路由。这是整个认知架构的核心,也是我们的System1层真正干活的地方。路由模块拿到意图标签和置信度之后,决定走快路径还是慢路径,选哪个工具,调哪些参数。
第四环是执行与工具调用。工具可能是查订单API、发消息组件、数据库查询、外部搜索引擎。工具调用在现实世界中经常失败,所以这层必须设计重试、退路和错误捕获机制。
第五环是结果评估与记忆更新。这一步很多团队做得非常弱,甚至完全跳过。实际上Agent每次决策后都应该有一个反馈信号:用户有没有再次追问?工具调用是否成功?最终方案是否被采纳?这些反馈会写进记忆系统和决策快照,用于后续行为调优。
我们在设计这套链路时最纠结的是第一环和第五环,因为系统边界外的信息很难结构化。最后的解决方案是:感知层不做完整语义理解,只做"信息包装",把原始输入的脏数据清洗成统一Schema;评估层不追求精确打分,而是采集三类信号——业务结果信号、用户行为信号、系统自检信号。
2.2 动态决策快照:让每次决策都有据可查
我会在任何Agent项目里强制推行一套机制:动态决策快照。这个词听上去很高大上,实现起来就是一个结构化事件日志,但它是Agent能不能"被信任"的分水岭。
决策快照的核心价值是让Agent的每步行为可回放、可评测、可优化。之前我们的Agent出了问题,只能靠翻聊天记录、凭记忆猜测哪一步出了错,效率极低。上了快照后,每个决策点都记录输入上下文、候选动作列表、真实选择路径、置信度分数、工具调用参数、执行结果、耗时、错误信息。当线上出问题,直接按trace_id拉出整条快照链,几分钟就能定位。
下面是我们在生产环境使用的快照数据结构核心字段:
{ "snapshot_id": "uuid-xxx", "timestamp": 1730000000000, "session_id": "sess-001", "input": { "raw_text": "我的订单三天没到了", "normalized": "order_shipping_delay_query" }, "intent": { "label": "logistics_query", "confidence": 0.93, "model": "distil-intent-v2" }, "route": { "path": "fast_path", "matched_rule": "rule_shipping_delay_v3", "latency_ms": 32.8 }, "execution": { "tool": "order.queryByUserID", "params": {"user_id": 12345, "date_range": 30}, "status": "success", "error": null }, "feedback": { "user_followup": false, "task_resolved": true } }很多团队做Agent只在控制台print几行日志,这远远不够。快照应该是结构化的、带检索索引的、能批量回放的。我们把快照存到ClickHouse,每个Agent实例每秒可以写入上千条,完全不是性能瓶颈。
注意:快照是调优的地基,没有它,后面所有基于统计学做决策优化都是空中楼阁。我在另一个接手项目里,光是补历史快照就花了三周,痛不欲生。
2.3 主流Agent框架选型:从拿来主义到自研取舍
聊架构设计,绕不开框架选型。目前主流Agent框架各有优势,我是从LangChain入门的,中途换过AutoGen、试过CrewAI,最后沉淀出一套适合自己的组合方案。先放一张比对表:
| 框架 | 擅长领域 | 多Agent协作 | 可定制性 | 学习曲线 | 适用场景 |
|---|---|---|---|---|---|
| LangChain / LangGraph | 通用编排、工具链丰富 | 中等 | 高,但抽象层多 | 中等 | 快速原型、标准工具流 |
| AutoGen | 对话式多Agent、研究探索 | 高 | 中等 | 中等 | 科研、复杂对话协作 |
| CrewAI | 角色扮演、任务分解 | 高 | 中等 | 低 | 内容创作、流程化任务 |
| 自研轻量决策框架 | 生产环境、高并发、强管控 | 视设计而定 | 极高 | 高 | 企业级Agent、实时决策 |
我的建议是:第一版用成熟框架跑通业务闭环,但一定要把决策路由从框架里抽象出来,不要和框架的编排逻辑深度耦合。我们踩过的坑是早期用LangChain的Router硬编码意图,后来业务意图从十几个涨到几百个,框架层被塞得越来越臃肿,一升级LangChain版本就各种接口报错。最后我们把决策路由独立成一个子系统,用规则和模型混合驱动,框架只负责调用,整个系统才稳定下来。
另外多说一句,现在社区里讨论很多的Agentic Design Patterns、MCP协议等,本质上都是在为认知架构的某一层提供标准化方案。比如MCP(Model Context Protocol)是工具层的事实标准,吴恩达参与的Agent教程也一直在强调设计模式,但我始终觉得工具可以换、协议可以换,认知工程的决策骨架才是核心资产。
3. System1模型的构建与实现
3.1 快路径的三层落法:规则、启发式与模式匹配
System1听起来很玄,实现起来其实就是三种技术的混合:确定性规则、启发式搜索、模式匹配。别小看这三板斧,组合好了效果惊人。
规则层是最基础的,我们把高频意图、强业务约束都写成确定性规则。比如用户输入里出现"退货"加"钱",且用户角色是买家,就直接路由到退款申请流程;出现"人工"、"投诉"、"升级"这类关键词,直接转人工通道。规则层的优势是确定性,可以写单测,出了事故能追责。
启发式层处理规则覆盖不到、但又可以用轻量逻辑解决的场景。比如基于用户历史行为的优先级判断:一个用户一周内连续三次发起相同请求,优先级自动提高;基于向量相似度的缓存命中:把高频问答对语义向量化,用户问题来了先做余弦相似度匹配,命中0.9以上就直接返回预置答案。
模式匹配层则用小模型做意图分类和实体抽取。我们用了蒸馏后的MiniLM模型,参数量只有几十MB,CPU单次推理4到6毫秒。训练数据来自历史对话标注,每周更新一次,准确率稳定在91%左右。很多团队在这里一定要上大模型,我觉得完全没必要,快路径的价值就是快和稳,小模型错误率可控,回退到慢路径就是兜底。
三层组合之后,System1的决策逻辑不是单纯一个分类器,而是一个有优先级的复合结构。在工程上我们可以把它简化成一份路由配置文件:
system1_routing: priority: - rule_engine - cache - vector_similarity - small_intent_model rule_engine: rules: - name: refund_rule if: contains(text, "退款") && role == "buyer" route: "refund_flow" - name: human_rule if: contains(text, "人工") || contains(text, "投诉") route: "human_handoff" cache: ttl_seconds: 3600 min_similarity: 0.92 vector_similarity: index: "hnsw_qa_index" min_score: 0.86 small_intent_model: model: "distil-intent-v2" threshold: 0.73.2 决策延迟优化:从秒级到32.8毫秒的实战之路
我这里说的32.8毫秒不是PPT里的理论值,是我们实测的System1快路径端到端决策延迟,测试环境是普通2核4G云主机,QPS压到200时P95稳定在这个水平。拆开看这款延迟构成:
| 延迟环节 | 耗时(毫秒) | 说明 |
|---|---|---|
| 输入规范化 | 0.8 | 文本清洗、长度截断、格式标准化 |
| 规则引擎匹配 | 2.1 | 300条规则的条件求值 |
| 向量相似度检索 | 4.6 | 在10万条QA向量里做HNSW检索 |
| 小模型意图分类 | 4.2 | 平均推理耗时 |
| 快照写入 | 1.2 | 异步队列,统计的是写入内存耗时 |
| 序列化与IO | 19.9 | 包括日志落盘、上下文组装 |
快照写入已经做了异步化,真正的瓶颈反而是"序列化与IO"。这也是我觉得特别值得提醒新人的一个细节:单纯做算法优化是不够的,JSON序列化、日志同步写盘、网络调用这些基础设施层的小事,往往会占掉大半延迟。
几个真正有效的优化措施:
第一,规则表预加载。把几百条规则在进程启动时就编译成条件树,避免每次请求都遍历规则列表,个别规则命中复杂度从O(n)降到O(log n)。
第二,向量索引用HNSW而不是暴力搜索。我们在10万条意图样本下,暴力计算余弦相似度大约需要12到15毫秒,HNSW只需要4到5毫秒,精度几乎无损。
第三,意图分类模型做INT8量化。MiniLM模型量化后体积从80MB降到20MB,单次推理从7毫秒降到4毫秒,准确率只掉了0.3%。这个收益不拿白不拿。
第四,快照异步批量写入。每50毫秒批量刷一次盘,而不是每条都同步落库。在业务上,就算进程崩溃丢失最后几十条快照,也完全在接受范围内。
3.3 System1和System2的切换机制:不是非此即彼
双系统设计的精髓在切换逻辑。一个Agent如果在所有场景都优先跑System1,那它就是个高级聊天机器人,处理不了任何复杂任务;如果处处退回到System2,那它就变回又慢又贵的大模型直连。我们设计了三个切换信号:
第一个信号是置信度阈值。System1输出意图标签时都会带置信度,低于阈值就交给System2重做。阈值不是拍脑袋定的,我们用历史快照做过一次离线模拟,把阈值从0.5到0.95每隔0.05跑一遍,看准确率和延迟的权衡曲线,最终选了0.7。
第二个信号是结果验证。System1选完路径后,如果执行阶段出现异常,比如工具调用失败、搜索结果为空、用户连续两次说"不对",强制升级为System2。在代码里这个叫escalation机制。
第三个信号是业务风险等级。涉及退款、投诉、法律问题等敏感性操作,无论System1置信度多高,都必须经过System2的完整推理链路,保证可解释和合规。
我在《思考,快与慢》里读到过一个观点,人类判断何时信任直觉的标准并不是"我觉得对",而是"这个问题我是否熟悉"。Agent也一样,System1只适合处理高频、模式化、低风险的任务。切换机制的代码并不复杂,难的是一家团队是否愿意在繁忙的业务中停下来认真设计这套逻辑。
4. 从0到1实现带System1的Agent
4.1 Agent的最小认知架构组件清单
从零搭一个带System1的Agent,最少需要五个组件:输入感知器、决策路由中心、System1快路径、System2慢路径(核心是大模型)、记忆与工具执行模块。安全护栏贯穿始终。
我用图形化的方式描述一下:用户在对话入口发出请求,输入感知器把文本包成统一事件对象;决策路由中心拿到事件后,先问System1"你熟不熟悉这个问题",熟悉就直接出动作方案;不熟悉就调度System2做完整推理;决策方案交给执行模块调用具体工具;执行结果反馈回记忆系统。这里的记忆不只是对话历史,还包括业务参数、用户画像、工具返回的结果摘要。
为什么强调"最小"?因为我们见过很多团队一上来就搞知识图谱、用户画像平台、强化学习框架,最后连基础决策都跑不通。认知架构要先能把决策闭环跑起来,再谈增强组件。我们内部的经验是:MVP阶段就五件套,其他都往后放。
4.2 路由与快照的核心代码实现
路由中心的伪代码是整个Agent的神经中枢,我贴一段核心实现,大家可以在这个基础上去扩展。
from dataclasses import dataclass, field from typing import Any, Optional from enum import Enum class RoutePath(Enum): FAST = "fast_path" SLOW = "slow_path" @dataclass class DecisionSnapshot: trace_id: str session_id: str raw_input: str normalized_input: str intent_label: str intent_confidence: float route_path: RoutePath chosen_action: str matched_rule: Optional[str] = None tool_name: Optional[str] = None tool_params: Optional[dict] = None tool_status: Optional[str] = None error_msg: Optional[str] = None latency_ms: float = 0 user_followup: bool = False task_resolved: Optional[bool] = None class DecisionRouter: def __init__(self, system1, system2, snapshot_writer): self.system1 = system1 self.system2 = system2 self.snapshot_writer = snapshot_writer self.risk_keywords = ["退款", "投诉", "法律", "起诉"] def route(self, raw_input: str, session_id: str, user_profile: dict): trace_id = generate_trace_id() snap = DecisionSnapshot( trace_id=trace_id, session_id=session_id, raw_input=raw_input, normalized_input=self._normalize(raw_input), ) system1_result = self.system1.decide(snap.normalized_input) snap.intent_label = system1_result["label"] snap.intent_confidence = system1_result["confidence"] need_escalation = ( snap.intent_confidence < self._confidence_threshold() or self._has_risk_keyword(snap.normalized_input) ) if not need_escalation: action = self.system1.get_action(snap.intent_label, snap.normalized_input) snap.route_path = RoutePath.FAST snap.chosen_action = action["name"] snap.matched_rule = action.get("matched_rule") else: plan = self.system2.decide( input_text=snap.normalized_input, requirement="resolve_user_request_with_reasoning" ) snap.route_path = RoutePath.SLOW snap.chosen_action = plan.action_name snap.tool_params = plan.tool_params exec_result = self._execute_action(snap) snap.tool_status = exec_result.status snap.error_msg = exec_result.error snap.latency_ms = exec_result.latency_ms self.snapshot_writer.write(snap) return snap这段代码有几个关键设计点值得强调:快照对象和业务逻辑同生命周期,每条请求自带一个快照;路由决策核心是"是否升级"这个布尔判断;执行结果回写入快照,形成完整链路。
4.3 接入MCP工具层与错误兜底
有了路由和快照,还需要让Agent能真正干活,也就是调用外部工具。我强烈建议开发者在工具层使用MCP(Model Context Protocol)标准,它相当于给大模型和外部工具之间定了一套普通话。MCP的好处是工具注册、参数校验、调用鉴权都有统一实现,不用为每一个API写胶水代码。
在我们的系统里,MCP工具已经超过四十个,包括订单查询、退款处理、物流轨迹、商品推荐等。工具注册表长这样:
{ "order.queryByUserID": { "description": "按用户ID查询近N天订单列表", "params": { "user_id": {"type": "int", "required": True}, "date_range": {"type": "int", "default": 30} }, "risk_level": "low" }, "refund.create": { "description": "创建退款申请", "params": { "order_id": {"type": "int", "required": True}, "amount": {"type": "float", "required": True} }, "risk_level": "high" } }高风险管理级别工具会强制要求System2路径决策,并且需要人工审核Token。这里我也要吃一堑长一智:刚开始我们把所有工具都全量开放给Agent,结果Agent在生成退款金额时做了一次离谱计算,差点把系统搞出事。工具权限的细粒度控制,是生产环境Agent不可省略的安全层。
5. 常见问题与排查技巧实录
5.1 决策延迟高,八成是基础设施层在拖后腿
很多朋友一遇到Agent变慢就骂大模型,但实际慢在上下文组装、工具握手、日志同步这些地方。我在前文说的32.8毫秒优化过程就验证了这一点。排查延迟问题一定要先看决策快照里的分段耗时,哪一段占比最高先处理哪一段。我见过最夸张的案例,一个Agent请求总耗时6秒,其中大模型推理只用了1.2秒,剩下4.8秒全耗在上下文里塞历史消息序列化上了。
优化思路也很直接:高频路径上不要全量携带历史上下文,用摘要代替完整日志;把Session数据放到内存缓存而不是每次请求都查库;日志改异步批处理。这几板斧下去,大多数延迟问题都能缓解。
5.2 执行链上的"agent execution terminated due to error"怎么解
这个错误信息非常典型,很多Agent框架在工具调用链的某一环抛出未捕获异常时,就会给出这么一句模糊的终止提示。它不是单一错误,是很多底层问题的汇总。
我遇到过的主要有三种:一是工具返回格式不合法,Agent把非JSON内容当作JSON去解析;二是工具调用参数验证失败,比如Agent生成user_id=“abc”,但API要求整数;三是大模型输出被截断,触发了框架的执行终止逻辑。
排查办法是回查决策快照的execution字段,看tool_status和error_msg。如果工具本身没问题,大概率是Agent生成的参数不准,处理方式不是重试而是让System2重新规划,或者加一道参数校验层,把非法参数在进入工具前就拦截并修正。不要轻易裸着加重试机制,重试次数多了还会触发部分API的幂等冲突和数据重复问题。
5.3 Context爆炸和记忆污染:Agent为什么越跑越蠢
你可能会遇到一个现象:Agent刚上线时很聪明,跑了两周后开始犯低级错误。常见原因是对话上下文被注入太多无效信息——历史问答、工具返回长文本、用户重复消息,全部堆在上下文里,大模型在噪声中找信号,自然越跑越乱。这就是记忆污染。
我们做了三件事缓解:结构化管理记忆,把上下文分成摘要区、事实区、对话历史区,每个区设定独立上限;定期压缩历史,超过窗口的对话做递归摘要;记忆检索加权,只把与当前意图相关的记忆片段注入上下文,而不是无脑全量携带。
从更广的视角看,记忆安全也很值得关注。我之前看过一篇关于LLM Agent记忆防御机制的论文,思路是构建主动检测框架,在记忆写入前做内容过滤和异常识别,防止恶意提示注入污染长期记忆。这和我们工程上做的"记忆写入前校验"本质上是同一件事。
5.4 多Agent协作时的决策冲突:别让Agent之间互相抬杠
多Agent协作是热词,很多团队也在做,但你一定会遇到这个问题:主Agent把任务分给两个子Agent,子Agent给出的结论南辕北辙。我们刚开始做数据分析Agent时,市场分析Agent说应该降价促销,成本分析Agent说降价会亏损,主Agent直接原地崩溃。
我的解决思路是引入仲裁层,仲裁逻辑不是简单少数服从多数,而是依据置信度、历史准确率、业务风险权重三方加权。每一个子Agent在给出结论时都必须附上置信度和关键依据,仲裁层再结合业务约束做最终决定。另外需要设置协作协议,明确子Agent之间的通讯规范,不要放任它们自由对话太多轮次,对话链次数越多,越容易漂移。
5.5 安全护栏和沙盒执行:Agent能力越强,约束越要明确
最后一个但是最重要的坑:安全问题。Agent的能力边界在快速扩展,从读数据库到发消息到操作业务系统,每扩一个权限都是攻击面。我们的护栏建设经验可以归纳成三句话:最小权限原则、输入输出双向过滤、敏感动作人工审批。
工具调用默认都在沙盒环境里执行,行为会被全程记录,所有写操作必须经过带外确认。聊天层面要加提示注入检测,防止用户通过"忽略之前所有指令"之类的话术操纵Agent。这块没有终极解法,只能持续迭代规则库和模型过滤器,像打疫苗一样不断更新防线。
6. Agent认知工程的实际影响与落地场景
6.1 毫秒级决策离自动驾驶还有多远
讲一个延伸话题,最近总有人问Agent的毫秒级决策能不能支撑自动驾驶。我的态度很明确:可以做参考,不能直接套用。我们在Agent System1里用到的分层路由、快照回放、阈值切换思想,和自动驾驶决策规划里的行为决策层、运动规划层有很多相似之处。很多团队也会用MATLAB/Simulink做汽车决策算法原型仿真,先验证时序再迁移平台。
但真实自动驾驶面临的传感器噪声、功能安全、冗余备份等挑战,是客服Agent完全遇不到的。决策延迟32.8毫秒在交互场景里非常优秀,但在自动驾驶的极端场景下,一个误判就是不可挽回的事故。所以我的结论是:Agent认知工程给实时决策系统提供了很好的思维框架,但安全关键的场景需要的是工程化的形式化验证和全栈冗余,而不是统计意义上的"够快"。
6.2 企业级Data Agent的落地价值
另一个值得关注的方向是企业级Data Agent。过去业务人员提数据需求要排队等数仓团队开发报表,现在用Agent把自然语言查询翻译成SQL,再自动生成可视化结论。这里的决策链路是:意图识别(用户是想查明细还是做分析)→ Schema路由(选哪张表、哪个数仓)→ 执行(SQL生成与验证)→ 结果解读(生成业务结论)。
这类系统是我见过的Agent认知工程最容易被接受的场景,因为决策边界清晰、工具调用标准化、结果可验证。如果读者想找Agent落地的第一站,我非常推荐从Data Agent开始,收益直观且踩坑成本可控。
6.3 产品体验:Agent的"直觉"才是用户感知的核心
最后说点务虚的。现在行业里Agent的差距往往不在大模型能力上,而在产品体验的细节里。两个同样用GPT-4o做后端的产品,一个对所有问题都"嗯嗯啊啊"思考半天,另一个对常见问题瞬间响应、对复杂问题自动进入深度模式,后者的体验感知完全不一样。这种"灵性"就来自System1层的设计水平。
我在做用户反馈分析时发现,那些给用户留下"聪明、反应快、靠谱"印象的Agent,大多数都在高频路径上做了足够的预置和优化。吴恩达在Agent教程里反复提到设计模式,社区里也有大量面向初学者的Agent开发路线图,但这些内容教的更多是让Agent"能做",而认知工程教的是让Agent"会做"。
我自己的学习建议是:先用成熟的Agent框架把完整Demo跑起来,再逐步把决策逻辑从框架中解耦出来,建立属于自己的System1层和快照体系,最后再用编排能力把它们串成可以用在Production的完整系统。
写到这里,我还是想再啰嗦三句压箱底的体会。
第一句:做Agent这一两年,我最庆幸的是把动态决策快照作为基础设施从第一天就建起来了。没有快照,Agent就是一个黑盒赌桌,出了问题只能靠直觉定位;有了快照,每一次不好用的行为都能回放、归因和优化,Agent的迭代速度才会有质的提升。
第二句:System1不是System2的低配版,而是另一种正确的存在。它必须有独立的价值目标——快、准、省、可预测。系统1的优化不能以牺牲大模型能力为代价,它是给大模型减负的,不是给大模型背锅的。
第三句:关于切换阈值的设定,千万别拍脑袋。拿历史快照做一次离线回测,看看不同阈值下准确率、延迟、用户满意度怎么变化,然后选一个折中值。这个技巧成本极低,收益却立竿见影,希望你也能用上。