《Agent原理,架构与实践》

第5讲:Agent的本质

准备起一个新的系列《Agent原理,架构与实践》。目标不贪心:

1. 希望每篇文章有1-2个点能让大家有收获;

2. 希望不被骂;

本期第五讲,咱们开始。


上一篇,我们聊了Agent如何做记忆系统,留了一个小尾巴:

1. 一个LLM程序:每天定时帮你查天气,然后推送到手机,它算Agent吗?

2. 一个LLM程序,也是每天定时帮你查天气,但它查完之后,根据天气情况,提醒你防晒,带伞,or其他建议,它又算Agent吗?


【1】问题一:Workflow和Agent,边界到底在哪里?


先看第一个:定时触发,调天气接口,格式化结果,推送。每一步都是开发者写死的,代码怎么走,开发的时候就全定了。


再看第二个:同样是查天气,但查完之后由模型自己判断。温度骤降了吗?降水概率多少?用户今天有户外日程吗?要不要提醒、提醒什么,都是模型现场决定的。


是工作流,还是Agent,核心差别就在这一点:谁来做决定。


Anthropic在官方指南里是这么说的:

Workflows are systems where LLMs and tools are orchestrated through predefined code paths. Agents, on the other hand, are systems where LLMs dynamically direct their own processes and tool usage, maintaining control over how they accomplish tasks.


翻译成人话:

1. 路径在代码里写死的,是workflow;

2. 路径由模型现场决定的,是Agent。


像不像流水线工人和FDE工程师的区别?

1. 流水线工人:每一步都有SOP;

2. FDE工程师:到了现场自己拿主意。

都是干活,工资完全不一样。


【2】问题二:Agent的循环,长什么样?

那"模型自己拿主意"具体是怎么做的?


拆开来其实就四步,循环往复:

while(1){

感知(接受用户输入)

    while(任务未完成){

        规划(决定下一步做什么)

        行动(调用工具,真的去做)

        观察(读取结果,评估效果)

        回到规划,直到任务完成

    }

}


Agent的核心,是两个while循环:

1. 外层循环,不断接受用户指令,是用户与Agent之间的循环;

2. 内层循环,是对于一个用户的指令,不断规划+行动+观察,是Agent内部自己的循环;


你问一句,LLM答一句,不是Agent,它没有感知结果的环节,更没有基于结果调整下一步的机会。一个完整的Agent,必须能走完"做一步、看结果、再决定"的循环。


是不是要把所有的LLM程序都改造成Agent呢?

显然不是的。


Anthropic官方指南说得很明确:

For many applications, optimizing single LLM calls with retrieval and in-context examples is usually enough.


Agent不是workflow的升级版,它用更高的成本、更慢的响应、更不可控的路径,换取处理开放式问题的灵活性。


杀鸡不要用牛刀,相对明确的任务,别用Agent,牛刀不但贵,而且牛刀还有自己的想法,很可能整出你意料之外的幺蛾子。


【3】问题三:外层循环,用户给了Agent一个任务,内层循环如何保证任务的完成率?


循环给了Agent灵活性,三个串行的步骤,每个都正确,整个任务结果才正确,一步出错,任务结果就不对:

1. 规划错:目标理解偏了。咱们要A,它理解成B,后面每一步规划,都精准地奔向错误的目标;

2. 行动错:工具用错或参数给错。该读文件它去搜索,该改第3行它改第30行;

3. 观察错:结果误读。命令明明报错了,它读成了成功,带着错误状态继续往下跑。


Agent架构如何设计,来避免这种问题呢?

护栏校验。


循环的每一步都需要"护栏":规划要可检查、行动要有权限边界、观察要有验证标准。这些护栏怎么设计,后面的章节再和大家细讲。今天先建立意识:Agent内层循环不是放它自己跑,是让它在护栏里跑。


【4】我们的sdd-site-agent,它的四步循环怎么设计?


回到我们自己要实现的SDD规范驱动开发Agent。把咱们前几讲的设计拼起来,sdd-site-agent的循环大概长这样:

1. 感知:读当前任务(需求a)+当前步骤规范;

2. 规划:决定这一步做什么:写需求/画原型/出方案/写代码;

3. 行动:调工具:读文件、写文件、跑命令;

4. 观察:产出符合规范吗?格式对吗?验收标准过吗? 

    不符合→回到规划,修正再来;

    符合→进入下一步,载入下一步的规范;

画外音:SDD规范驱动开发Agent,有3个spec,需求spec,设计原型spec,技术架构spec。


【5】简单总结

1. workflow和Agent的差异:控制流在谁手里;

2. Agent的架构内核:

 - 两层循环

 - 感知、规划、行动、观察

3. Agent内层循环不是放它自己跑,是让它在护栏里跑。


补充阅读:《构建高效的Agents》

https://www.anthropic.com/research/building-effective-agents


Agent编码实现过程中,不要忘了前面几章的内容:

1. 感知环节,用的是第3讲的分层加载,只载当前规范;

2. 上下文写满了,用第4讲的压缩和外部记忆;

3. 行动环节需要工具。工具从哪来?下一讲,咱们聊聊工具设计。


欢迎持续关注,让我们一起,一步一步,实现自己业务专属的mini-agent。


知其然,知其所以然。

思路比结论更重要。


===全文完==


PS:公众号只能贴静态图文,无法用js实时互动,在线版设计了课后习题与实操演练,欢迎阅读原文体验。



文章原文