AI Agent 入门
本blog为datawhale开源教程《ai-agent-book:从入门到Agent工程实践》的组队打卡学习笔记
文章目录
- AI Agent 入门
- Agent的组成部分
- LLM:Agent 的大脑
- 工具:Agent 的手脚
- 上下文:Agent 的眼睛
- Harness:约束or赋能
- Agent 的学习机制:从上下文适应到持久更新
- Agent与环境
- ReAct循环
- Agent调用大模型的API
Agent的组成部分
Agent = LLM + 上下文 + 工具
LLM:Agent 的大脑
大语言模型(Large Language Model, LLM)是 Agent 的决策核心
Agent 中用于思考推理的那部分,即为预先训练好的 LLM
在采取实际行动之前,Agent 可以先进行规划与推演,此时Agent不改变外部环境,
LLM的能力来自两部分:
- 预训练(让模型“懂世界、会说话、有通用推理能力”)
- 后训练(让模型“听话、安全、会用工具、能作为 Agent 完成任务”)
工具:Agent 的手脚
工具是Agent用来实际“干活”的东西,通过工具,Agent可以改变环境中的内容
工具分为5类:
- 感知工具:让 Agent 能访问信息,搜索引擎提供实时网络数据,文件系统读取本地文档,API 和数据库则对接外部服务和企业核心数据
- 执行工具:让 Agent 改变世界,代码执行、文件操作、系统命令、外部 API 调用
- 协作工具:让 Agent 与其他 Agent 分工合作,委托子 Agent 完成专项任务,在关键决策点请求人类确认,或在多 Agent 系统中协调行动
- 事件触发工具:作为外部输入来驱动 Agent 开始执行任务,比如收到一封新邮件、到了某个预定时间点、或另一个系统发出了 Webhook 回调
- 用户沟通工具:Agent 主动与用户建立连接、传递信息的渠道,专注于信息的传递和交互,通过文字消息、语音通话、邮件等方式,将 Agent 的执行进展或主动关怀传达给用户
工具调用(Tool Calling,也称 Function Calling)是现代 LLM Agent 的一项核心能力,它让模型能够通过结构化的方式调用外部工具。工具调用流程分为4步:
- 声明工具
- 模型决定调用
- 追加结果到上下文
- 模型基于结果回复
上下文:Agent 的眼睛
上下文是Agent在每个决策点保留的信息,作为LLM的输入参数,供LLM推理
上下文由5个部分组成:
- 系统提示词(System Prompt):通过提示工程(Prompt Engineering)精心设计系统提示词,塑造 Agent 的工作方式
- 工具定义(Tool Definitions):声明 Agent 可用工具的名称、功能描述和参数格式
- 用户消息(User Messages):来自用户的输入
- 模型回复(Assistant Messages):模型的回复历史,包括思考过程、文本内容、工具调用请求
- 工具执行结果(Tool Results):Agent 框架执行工具后返回的结果
或者说两个部分构成: - 静态前缀:工具定义与系统提示词一起构成对话中保持不变的静态前缀
- 轨迹(动态消息历史):用户消息 + 模型回复 + 工具执行结果,随交互不断增长
轨迹是 Agent 在执行任务过程中不断积累的消息历史——用户消息、模型回复(包括思考过程和工具调用)、工具执行结果
完整上下文由静态前缀(系统提示词 + 工具定义)和轨迹(动态消息历史)两部分组成
Agent 的上下文 = 静态前缀 + 轨迹
Harness:约束or赋能
Agent 边界内负责支撑模型运行及模型与环境交互的代码、配置和服务统称为 Harness。Harness 包括上下文管理、工具接口、安全约束、验证与纠正等基础设施,负责构造上下文、暴露工具接口、维护循环和状态,并实施权限、验证与纠正。
Harness 的核心是上下文管理 + 工具接口,再加上三层保障机制:
- 约束(限定 Agent 能做什么、不能做什么)
- 验证(检查 Agent 做得对不对)
- 纠正(做错了怎么补救)
Agent 的学习机制:从上下文适应到持久更新
Agent的学习行为有三条路径:
- 任务内的上下文适应:不改模型参数,也不改外部持久化资源,只通过改变“这一次推理时喂给模型的上下文”,来临时改变 Agent 的行为
- 跨任务的外部产物(artifact)更新:把事实和经验整理为知识文档,把可语言化的策略写进 Prompt 或 Skill,把确定性流程与约束写成程序和 Harness
- 以及训练周期中的参数更新:目标是高维能力时,外部规则难以完整表达,需要通过后训练更新模型参数
Agent与环境
与Agent交互的环境不属于Agent的组成部分
环境包括文件、数据库、网页、用户、其他Agent及物理或仿真世界
Agent通过观察和行动接口与环境交互,用于获取环境信息或改变环境
因此,Agent与外部环境存在两个边界:
- 观察通道(Harness 把环境返回的观察转换为模型能够处理的上下文)
- 动作接口(模型选择的行动转换为对环境的工具调用)
在底层模型固定时,提升 Agent 任务表现最主要的系统工程手段,往往就是重新定义或扩展观察空间与动作空间,换句话说,就是扩展上下文和工具
思考题1:如果你只能给一个 Agent 系统增加一项能力——更强的模型、更丰富的上下文还是更多的工具——你会选哪个?在什么条件下你的选择会改变?
回答:更丰富的上下文。丰富上下文相当于增大观察空间,上下文直接决定模型的任务目标清晰度、对工具的认识、对模型回复和历史工具执行结果的感知深度,并且丰富上下文成本最低:只需要改prompt、加few-shot、接RAG、写记忆。但是当agent输出失败时,若模型太弱看不懂指令、调用工具错误、推理过程总是错误等情况,该选择更强的模型;若模型清楚做什么,但是没有对应工具,此时该选择更多的工具。
ReAct循环
Agent 执行任务的核心模式叫做 ReAct(Reasoning + Acting):模型先思考当前应该做什么,然后调用工具行动,再观察工具返回的结果并继续思考下一步
基于完整上下文,LLM 生成下一步的响应,然后这个响应又追加到轨迹中,供下一次调用使用,Harness 负责组装上下文、校验并执行工具,Environment 负责产生真实状态变化和观察
Agent调用大模型的API
大模型 API 的核心是一个消息列表(messages)
列表中的每条消息都有一个角色(role)标识,模型根据角色来理解每条消息的含义和来源,组成为:
- system:系统提示词,由开发者编写,定义 Agent 的身份、行为规则、约束条件
- user:用户消息,来自终端用户的输入
- assistant:助手消息,模型之前的回复,包括文本回复和工具调用请求
- tool:工具结果,Agent 框架执行工具后,将结果以tool角色的消息送回给模型
system、user、assistant 和 tool 四种消息角色分别对应系统提示词、用户消息、模型回复和工具执行结果。工具定义(tools)作为请求的独立字段(而非消息),告诉模型有哪些工具可以使用、每个工具接受什么参数,并不是一种消息角色