🐦 第1章 智能体概述
📄 一句话概括

一个 Agent 拆到底就四件东西:目标、模型、工具、循环。 少一件都不是少一点功能,是整件事换个性质——缺目标它会一直干,缺工具它只能说,缺循环它只走一步, 缺模型它只会照旧执行。 这一节把这四件摆齐,再用一个开关表把每一件拿掉跑一遍。

📝 本章和前面几章的关系

上一节划了「什么值得做成 Agent」的线,这一节讲「Agent 由什么构成」。 四件的说法在本书里不叫这个名字——教材讲的是智能体的人设、技能、工作流,但底下就是这四件。 名字先记住,后面看平台界面时能对上号。 再往后第 4 章整章讲工作流,第 16 章讲多个 Agent 怎么分工,都是在这四件上做加法。

一、先说不它是什么

Agent 不是更聪明的模型。 上一节已经说过,这里再说一遍,因为这是最贵的误会: 换模型改的是单步质量,改不了它走不走得到终点。 Agent 也不是插件合集。挂十个插件但它不知道该在什么时候用哪个,结果是一边超时一边乱调。 Agent 更不是一段长提示词。 把「你要先查天气再给建议」写进提示词,模型大概率会照做, 但它也可以不照做——提示词是请求,不是保证。

这三样都是零件,不是整机。整机得四件齐全,缺一件就退化成另一种东西。

二、四件:目标、模型、工具、循环

目标说清什么算干完了。这句话写起来最像废话,出事最多。 「帮我整理一下这批简历」——整理成什么样算好?按什么排?缺什么字段要标出来? 模型负责根据当前状态挑下一个动作。 它还缺什么、该用哪个工具、这一步的输出够不够——这三个判断都是它做的。 工具是真正动手的那一下。查天气、读文件、写数据库、发消息,没有工具,模型的手伸不出对话框。

循环允许它再来一次。第一次没做对,能看见、能改、能再验一遍。 这一条是最容易被省掉的,因为它看起来像「重复劳动」。 四件里,目标和循环是设计者定的,模型和工具是平台或供应商给的。 你能改的那两件,恰好是决定成败的那两件。

三、缺一件会怎样

演示里五个组合各跑了一次,症状分得很开。 缺目标:它一直在干,因为没人告诉它什么叫干完了,一直跑到轮数上限。 真机上这表现为「对话停不下来」或者「反复说要确认」。 缺工具:它知道自己该看年限,但手上没有能看年限的东西,只能凭记忆编。 这是所有「一本正经胡说」的根子——不是它想骗你,是它没有别的办法。

缺循环:它排完就交,没有回头确认这一步。排错了也当成功。 真机上表现为「一次比一次自信,但一次都没对过」。 缺模型:动作表写死,第一次碰到不一样的数据就照旧执行。 这其实就是工作流——工作流不是残缺的 Agent,它是另一种东西,靠「不变」换「稳」。

四、第五件:边界

教材在讲完四件之后没停,后面每一章都在补同一件事:它能碰到什么、碰不到什么。 这就是第五件,不属于 Agent 本身,属于它外面那圈: 允许调哪几个工具、单个任务能花多少钱、什么动作必须先问人。 为什么它比前四件还容易被忽略? 因为前四件缺了当场就能看出来,边界缺了要等出事——等到它真的把一封邮件发给全体客户。

所以后面读案例时留意一个细节:每个项目都有一段「发布与授权」。那不是走流程,那是第五件在落地。

五、合起来是一句话

Agent 是一个朝目标自己决定下一步、并且手上有工具能动手的程序。 这句话里有三个词要紧:朝目标(不是朝「把话说漂亮」)、自己决定(不是按脚本)、 能动手(不是只输出文字)。 拿这三个词去量市面上叫「智能体」的东西,能筛掉一大半。剩下的那一小半,才是这本书要教你怎么做的。

也正因为只有这一小半值得做,后面才不用每个项目都上 Agent。 能用工作流说清的,就别让模型猜——这句话第 4 章还会再讲一次。

六、动手 Demo:四件逐个拿掉

写一个带四个开关的跑法:目标、模型、工具、循环,各能单独关掉。 五种组合各跑一次,看最后停在哪一步、停的时候在干什么。

DATA = [('张三', 5), ('李四', 12), ('王五', 3)]

def run(goal=True, model=True, tools=True, loop=True, cap=6):
    order = [n for n, _ in DATA]
    log = []
    for k in range(1, cap + 1):
        if not model:                  # 动作表写死,不看状态
            log.append('写死:按固定顺序执行'); break
        if not goal:                   # 不知道算不算完
            log.append('接着干'); continue
        if not tools:                  # 手伸不出去
            log.append('凭记忆答'); break
        yrs = [dict(DATA)[x] for x in order]
        if all(yrs[i] >= yrs[i+1] for i in range(len(yrs) - 1)):
            log.append('校验通过,停'); break
        order = [n for n, _ in sorted(DATA, key=lambda x: -x[1])]
        log.append('重排')
        if not loop:                   # 只走一步就交
            break
    return log

实跑输出:

--------------------------------------------------------------------
四件缺一不可:逐个拿掉看症状
--------------------------------------------------------------------


  ① 一个最小 Agent 的四个零件
  --------------------------------------------------------------------

| 零件 | 管什么 | 本例里长什么样 |
|---|---|---|
| 目标 | 要说清「什么算干完了」,否则循环不知道停 | 把这批简历按年限排好 |
| 模型 | 根据当前状态挑下一个动作 | 看还缺什么,选一个工具 |
| 工具 | 真正动手的那一下 | 读字段、排序、校验 |
| 循环 | 允许它再试一次 | 最多四轮 |


  ② 四种残缺,各跑一次
  --------------------------------------------------------------------

| 缺哪件 | 几步 | 最后一步在干什么 | 结果 |
|---|---:|---|---|
| 四件都在 | 2 | 校验通过,停 | 正常 |
| 缺目标 | 4 | 不知道算不算完,接着干 | 不对 |
| 缺工具 | 1 | 想读字段,但没有工具,只能凭记忆答 | 不对 |
| 缺循环 | 1 | 排序:李四 > 张三 > 王五 | 不对 |
| 缺模型 | 1 | 写死:直接输出原名顺序 | 不对 |

  缺目标:它一直在干,因为没人告诉它什么叫干完了——跑到上限才停。
  缺工具:它知道自己该看年限,但手上没有能看年限的东西,只能凭记忆编。
  缺循环:它排完就交,没有回头确认这一步——排错了也当成功。
  缺模型:动作表写死,第一次碰到「不一样的数据」就照旧执行。
  ! 四件里最容易被省掉的是「目标」,因为写起来像废话;最先出事的也是它。

①第一节那张表是四件的分工。 注意最后一列:目标和循环写的是「最多四轮」「排好」,这两样是设计者定的,不是模型给的。 ②五个组合里只有第一行正常。 其余四行的症状各不相同,这正好说明四件是四个独立开关,不是一件事的四个说法。 ③「缺目标」那行跑满了四轮。它每一轮都在做事,但每一轮都不知道自己为什么要做。真机上这最烧钱。 ④「缺工具」那行只走一步就停。它知道自己该看年限——这句判断它做对了——但手上没有能看年限的东西。 判断对、动作没有,等于零。 ⑤注意「缺模型」那行的措辞:写死、按固定顺序执行。这不是坏掉的 Agent,这是工作流。 它没有错,它只是不拐弯。

30 秒实验

  1. 给「帮我整理一下这批简历」补三条目标:按什么排、缺字段怎么标、交什么格式。 补完再看还需要 Agent 吗。
  2. 把你项目里的 Agent 按四件点名一遍。哪一件是空的?空的这一件就是它最近出错的原因。
  3. 找一个有副作用的动作(发消息、下单、改状态),给它加一道「先问人」。

常见误区

  1. 「目标可以模糊,模型会自己理解。」模型会按最字面的方式理解,然后稳定地做错。 目标模糊时它不会问你,它会挑一个最省事的解释。
  2. 「循环次数越多越好。」轮数上限是刹车,不是油门。 大多数任务三轮内该收敛,跑满上限说明目标或工具出了问题。
  3. 「边界等上线再加。」有副作用的动作,边界必须写在前面。上线后再加,等于先让它在外面跑一圈。
自测三问(点开对答案) 1. 四件里哪两件是设计者能改的? —— 目标和循环。模型和工具通常由平台或供应商给,你能改的是「什么算完」和「允许再试几次」。 2. 为什么「缺工具」会表现成「一本正经胡说」? —— 因为它知道该查什么,却没有查的通道,只能用语言把答案编出来。它不是想骗人,是没别的办法。 3. 「缺模型」为什么等于工作流? —— 因为动作顺序写死了,不看当前状态。工作流就是靠这一点换稳定性的,不是残缺,是另一种取舍。

四件摆齐了,接下来要问:模型这一件到底能干什么、不能干什么。 下一节把大模型和 Agent 的分工讲清楚,也把七个已经跑通的行业场景过一遍。

相关笔记