一.Agent与大模型的本质区别Agent本质上是一个能自主完成目标的AI系统区别于传统AI的区别在于[自主性][能行动][有记忆]传统AI你问一个问题它回答一个问题每次都是独立的没有记忆你给它一个输入它给你一个输出不会去主动做任何事情Agent有自主规划的能力你给它一个复杂目标它会把任务拆分为多步通过调用工具访问记忆感知环境来一步步执行不只是一个简单的问答机器人传统大模型的局限性1.知识的局限性模型的训练数据有截止日期它给你的回答局限于它训练的数据2.无法行动比如你让他发送一份邮件它做不到因为它本质上就是一个文本生成器通过训练数据去推测下一个token最有可能的结果它的输出是一个token一个token输出的每一步都是输出概率最大的token3.无状态这里的状态就指在一个复杂任务中的中间记忆这次的对话无法接上上次的记录Agent怎么解决这些问题Agent组成LLM(传统大模型)工具记忆模块规划模块LLMagent的大脑推理决策和调用工具都靠它决定工具可以理解为封装好的函数是agent的四肢让agent有了改变外部环境的能力LLM只能决定调用那个并不能真正的去执行调用记忆模块分为长期记忆和短期记忆长期记忆就是用户的习惯画像等短期记忆就是运行时上下文(一次请求)运行时上下文包括了用户query历史对话工具调用工具输出结果等信息规划模块有两种模式Plan-and-Excute(先规划再执行)和ReAct(边执行边规划)其实说的就是agent的行动方式Agent有自主规划能力能行动(改变外部环境)有闭环(每步的行动都会反馈回来指导下一步)模型本身只是大脑工具的执行是写的代码模型只做决策1.Agent如何解决知识的局限性引入外部知识库LLM就像人的大脑一样我们只能输出我们学习过的东西没有学习过的东西只能通过已有的知识去推理它可能的输出拿考试举例闭卷考试我们只能靠大脑中的知识库但开卷考试我们可以通过去查询外部知识库去(书)解决问题Agent解决LLM训练数据又截止日期的问题其实也是这个原理这块其实我认为和Agent关系不大是通过引入RAG技术去接入外部知识库2.Agent如何解决LLM无法行动的问题Agent组成部分之一就是工具相对于给LLM接上了手和脚让LLM有了接触外部环境的能力回到刚刚LLM无法发送邮件的问题我们写一个发送邮件的函数当LLM觉得需要完成发送邮件这个事情的时候就可以通过调用这个函数来完成3.Agent如何解决LLM无状态的问题通过上下文窗口去解决Agent在执行的时候会维护一个上下文窗口可以理解为人在做某件事情的过程中的记忆上下文窗口中包括了用户的query历史对话工具调用工具调用结果等通过上下文窗口解决LLM无状态的问题二.Agent如何去调用工具——Function CallingLLM在没有Function Calling之前想让模型帮你调工具完全靠解析自然语言模型输出[查询一下北京的天气]再写if/esle去判断完全没有标准那么我理解的Function Calling就是一种协议用于规范模型调用工具的输出模型判断协议调用工具的时候不直接输出自然语言而是直接输出一段结构化标准的tool_call Json告诉你要调那个函数参数是什么这样只需要写一套解析结构化Json的代码即可整个调用工具的过程本质上有两个流程第一轮[模型说我需要调用工具]第二轮[代码去通过解析Json真实的去调用结果再返回给模型]模型只做决策执行的事情都由代码完成# LLM 输出的【标准结构化格式】不是自然语言 llm_output { role: assistant, tool_calls: [ { id: tool_001, type: function, function: { name: get_weather, # 调用哪个函数 arguments: {city:北京} # 参数 } } ] }那么我们在注册工具的时候需要做什么呢工具描述用于告诉模型这个工具的作用这一步很重要如果描述的不准确llm可能无法有效的调用工具参数列表参数的数据类型每一个参数是什么含义# 工具描述必须告诉 LLM 每个工具是干嘛的 tools [ { type: function, function: { name: get_weather, description: 查询城市天气, parameters: { type: object, properties: { city: { type: string, description: 城市名称例如北京 } }, required: [city] } } } ]LLM只负责决策调用哪个工具工具真实去执行完全依赖于代码/框架解析LLM输出的Json格式Function Calling三.Agent的推理范式先说一下CoT和ToT这两个概念都属于模型怎么思考层面的问题CoT思维链线性单路径一步步推的推理范式让模型把隐式的推理显示的表现出来成为一条连贯的思维链ToT思维树树状多路径可分支的推理范式把思考的过程建成树Agent的推理范式说的就是Agent思考和行动的模式比如说先思考完整体的步骤再去执行和一边思考一边执行Agent有三种推理范式ReAct把推理和行动交替进行ReAct的每一轮循环由三个步骤组成思考-行动-观察思考LLM先把当前情况分析一遍把推理过程写出来行动根据思考阶段的结论决定去调用哪个工具传什么参数观察工具的返回结果反馈给LLM读取这个结果进入下一轮思考Plan-and-Execute把规划和执行彻底分离先让LLM做规划输出一个完整的步骤列表然后逐步执行规划和执行解耦之后好处就是复杂任务整体结构非常清晰Reflection反思则是用于给前两个范式做一个检验检验LLM的输出是否符合预期做法就是在Agent完成一步或者整个任务之后再让一个LLM(也可以是同一个)来判断做的好不好如果不通过就重试或换一种思路(记录失败原因重试的时候将失败原因注入到query当中)带来的收益就是提升LLM输出的质量和准确性但同时也增加了大量token的消耗四.Agent的记忆机制首先Agent的记忆分为短期记忆和长期记忆短期记忆也是最基础的本轮会话的信息集合长期记忆是跨会话持久化可检索可复用的短期记忆包含用户query历史上下文工具调用Function Calling工具调用结果长期记忆包含用户画像用户习惯等五.记忆压缩Agent在执行复杂任务的时候随着工具调用越来越多历史对话越来越长上下文窗口可能就会被撑满这时就需要做记忆压缩了记忆压缩常见的有三种方式滑动窗口只保留最近的N轮对话超过N轮的历史对话不保留好处是实现及其简单不需要任何额外的LLM调用也没有额外的开销坏处是硬截断按对话内容一刀切摘要压缩不直接丢弃之前超出窗口的历史对话而是先让LLM把这段对话历史总结生成成一段摘要精华用摘要去替换原始对话但是摘要会丢失细节LLM在总结时会按照自己判断的重要性来决定保留什么省略什么重要性过滤按价值筛选不按时间维度筛选像滑动窗口和摘要压缩都是按时间维度去筛选重要性过滤则是按照消息的价值去筛选给每条记录打分低于阈值的直接淘汰高分的保留六.什么是幻觉如何预防幻觉大模型幻觉模式生成了听起来很合理但实际是错的内容模型生成了与训练事实用户输入或已知世界不一致的内容但语言上看起来很流畅合理这是LLM的固有缺陷模型产生幻觉有三个原因训练数据层面互联网语料本身就有错误矛盾过时的信息模型把这些都学进去当作事实记忆生成机制层面LLM本质是按概率去续写下一个token不是查询知识库模型对自己知不知道某件事没有显示信号碰到不熟悉的问题会按训练时见过的相似上下文编一个看起来合理的答案对齐目标层面在训练时自信地回答往往比我不知道得分要高模型无形中被训练成不会拒答幻觉分为三类事实幻觉编造不存在的事实这是训练数据层面导致的原因推理性幻觉推理链路错乱前后矛盾上下文不一致违背用户给出的明确条件。运行时上下文导致的原因缓解方案训练层对齐数据里加入不知道就说不知道的样例做校验训练让模型学会拒答推理层让模型先做必要的分布分析再答(CoT)温度降低减少随机偏差系统层RAG接入外部知识库让模型看着相关资料回答环节不可能完全消除因为它是LLM概率生成机制的固有产物工程上是降低发生率让用户能感知到