之前我们学习了Rag和Memory,作为这两者的载体的Agent,还没有系统性的学习一下。
Agent
在平时,我们所使用的像DeepSeek,GPT,opus这类都是agent,只是都是被精细包装、设计、测试好的。而一个普通的agent,我们可以区别于LLM来理解,LLM执行任务,是我们调用API访问,输入我们的任务,模型处理请求并返回一个答案。
而Agent则不同,我们输入我们的任务,它首先会分析任务(会结合上下文看看是否有相关的信息有助于理解),看看目标是什么,然后调用相关的工具(通过不同的API调用工具,来满足需求),最后观察结果是否满足任务目标。比如如果我们问"广州今天天气",会先调用地图api获取经纬度,然后再调用天气api去获取天气情况,如果能成功返回结果,就输出这个,如果返回是空,可能是调用的api不可用,就会去获取别的api尝试调用,直到最后输出天气或者说获取到的所有备用api都不可用。
理解Agent的关键在于,它会自主思考怎么样去完成任务(ReAct框架,分离思考与行动,在使用工具前都会明确这一步的目标还有指令),这一步是透明的,就像我们平时用Opus时,看到其深度思考内容一样,会知道模型从分析到调用工具最后生成内容的过程。而且这不仅仅是给用户看的,更是给模型自己看的,后续还可以让模型进行反思,从而实现自行优化。
而如果是我们自己来设计Agent,把之前我们学到的Memory安上,那么这个Agent就会随着我们使用次数的增加,会变得越来越"懂"我们,不仅知道我们平时习惯用什么样格式的文件,能明白我们习惯性怎样去思考问题,有时也能"关心"一下我们的状态
Prompt
提示词大家都听过很多次,其实我们每次使用大模型时输入的问题,就是一种提示词,不过是很粗糙的提示词,粗糙到跟日常用语一样没什么用。但是如果我们精心设计,从角色、工具、行为准则、输出格式、示例这几方面来限制模型,就可以让其减少幻觉和错误行为(比如有些网站的数据可用性较低,就不需要去搜集这些数据),让agent可以按照我们的思维习惯去处理这次的任务,像现在很多的大模型,就是根据用户输入,去匹配各种提示词包装的功能,然后达到即使用户的问题很简单,也能精准给出回答(因为已经从底层用提示词包装过了)。