一,agent介绍
agent的定义很广,不仅仅指的是claude code,codex这类coding ai,也包括了平时使用的deepseek,豆包网页版,ide的插件等,这些都能算作agent。agent的核心可以看作由三个部分组成,模型、工具和上下文。其中工具为agent的手脚,它让agent能真正接触到外部的世界;模型为agent的大脑,agent所有的决策和执行都是由模型来决定的;上下文为agent的眼睛,它不只是用户输入那一段文字,而是将之前的经验参考资料给到模型,让整个agent有了完整场景。
1,工具调用
在agnet中工具可分为五种,分别为感知工具,执行工具,协作工具,事件触发工具和用户沟通工具。感知工具提供了查阅的途径,包括上网、获取数据库的内容等。执行工具给agent提供执行操作的手,让agent能够真正的编写程序执行内容。协作工具则是让agent能与其他的agent相互交流,比如一个智慧医院系统中分诊agent给专科agent派遣任务就可算作协作工具的流程,协作工具也可以在agent执行到关键点时让人类来做抉择。事件触发工具和前三个完全不同,它不是由agent主导调用的工具,而是外部系统决定是否驱动agent执行任务,比如邮箱接入一个agent只有当收到新邮件才会驱动agent执行任务。用户沟通工具则是agent和用户连接的工具,这个工具和其他工具不同,其他注重于改变外部世界,这个则注重于信息交流,典型的例子就是网页版ai返回的文字结果。
工具调用分为四个流程:1、申明工具。2、模型决定工具调用。3、结果追加在上下文。4、模型基于结果回复。
工具调用的决策者为模型,我们只需要编写工具即可。
2,模型
模型为agent的大脑,agent的所有功能调用和返回结果都离不开模型。所以一个优秀的agent离不开好的模型,为了让模型更好的处理agent收到的任务,我们会让它进行三种不同学习机制,分别为:后训练、上下文学习、外部化学习。这个训练的时间从高到低。
后训练时间最长也是最能显著优化模型的学习机制,通过改变模型的内部权重,让它能够永久学习到具体要点。
上下文学习通过注意力机制来给出下一步的回答,其实这更像是模板匹配通过分析用户的话术来给出返回结果,比如用户投诉就给出安抚加赔偿方案,这个虽然能套用现成的方案但无法进行创造和学习新的内容。
外部化学习就是将知识和流程固化为外部的内容,也就是模型可以将一个流程转化为具体的代码实施,这个过程是可变的且是永久化的,比起前两个这个可验证性更强。
3,上下文
上下文也分为5个部分,分别为系统提示词,工具定义,用户消息,模型回复,工具执行结果。
系统提示词通常作为角色的划分,通过固定的模板编写agent现在处在哪种角色。
工具定义则是将agent可以调用那些工具给说明出来,规定agent的操作范围。
用户消息是用户现在的需求,给了agent具体执行的方向。
模型回复则将模型的思考过程和工具调用给展示了出来,能够直观看见模型内部的执行过程。
工具执行结果将结果返回给agent,这个回复是agent下一步的思考依据,避免重复犯错。
4,react
这是agent最为重要的部分之一,若只是像上面那样执行想→做→看,这样返回的结果仍然不如人意,react则是进行了一个循环将一个复杂的问题拆分成多个循环处理,将看的那一步在发送给agent,agent得到完整的轨迹执行下一个循环,开启下一个阶段,直至得出最终结果。
二,Harness 工程
Harness是给agent作限制的保证其能真正完成任务,可以说整个agent除了模型之外的部分都可以属于Harness工程。Harness可以包括上下文,工具,约束,验证,纠正。模型+上下文+工具和模型+上下文+工具+约束+验证+纠正这两个属于不同视角的agent不是替代关系,也就是之前说的agent中除了模型都可以看作Harness。
模型虽然能力强但不可控,Harness就可以做为缰绳来控制agent,其中约束是规定了agent的能力范围,验证是检查agent做的对不对,纠正就是在agent做错时如何补救。我使用agent发送邮件作为例子,约束就是规定agent可以发送给谁,验证就是检验agent是否发送成功、邮件是否正确发送给对的人,纠正则是当agent发错了执行撤回。
构建一个好用的agent的系统需要有以下三点:保持简单,保持透明,设计好的工具接口。