三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Agent 学习笔记

Agent 学习笔记

一、四个核心概念速览

术语 全称 一句话解释
Harness 控制框架 驾驭LLM这匹"马"的缰绳,管理记忆、检索、工具调用
Loop 代理循环 Agent反复调用工具直到任务完成的执行机制
LLM Ops 大模型运维 追踪、评估、诊断、修复Agent运行的持续迭代流程
Eval 评估系统 用LLM作裁判,给Agent的每次运行质量打分

这四个概念之所以流行,是因为它们都极其简单——正是这些简单组件,构成了全球最复杂的AI智能体架构。


二、一次 AI Agent 运行到底是什么?

基本模型:输入 → 工作记忆 → LLM → 输出

用户提示 (User Prompt)
当前对话历史 (Chat History)   →  工作记忆 / Context RAM  →  LLM (GPT/Claude)  →  Reply
系统提示 (System Prompt)
  • 整个过程是临时的(Ephemeral):Agent运行期间的一切都在上下文窗口中,运行结束后不自动保留
  • LLM本身不了解"你":它知道人类全部公开知识,但不知道你是谁、你的系统怎么运行、你的历史数据是什么
  • 这就是为什么需要额外的记忆系统Harness框架来补全这一切

三、记忆系统:三种类型详解

Agent的记忆分为三层,各司其职:

1. 程序记忆(Procedural Memory)

  • 存储内容:Agent应该"如何行动"的指令
  • 载体:文件、文本、Markdown格式的技能说明(Skill.md)
  • 类比:给马套上马具,告诉它跑快还是跑慢
  • 例子你是一个客服Agent,回复时始终保持礼貌,退款超过100元需要主管审批

2. 语义记忆(Semantic Memory)

  • 存储内容:持久性事实(Durable Facts)、用户画像
  • 载体:向量数据库(Vector Store)
  • 特点:不随对话结束而消失,是需要Agent长期记住的事实
  • 例子:用户叫Sean,是连续创业者,偏好简洁的回答风格
  • 更新方式:手动输入,或由系统自动从对话中提炼(Distill into Facts)

3. 情景记忆(Episodic Memory)

  • 存储内容:带时间戳的历史事件序列、过去的对话记录
  • 载体:SQL数据库 + 向量数据库的组合
  • 特点:有时间维度,可按时间顺序检索
  • 例子用户上次申请退款是3周前,问题是产品破损,最终得到解决

记忆系统对比

类型 存什么 存在哪 检索方式
程序记忆 行为指令、技能 文件系统 / S3 直接加载到提示词
语义记忆 持久事实、用户画像 向量数据库 RAG语义搜索
情景记忆 历史事件、过去对话 SQL + 向量数据库 SQL查最近 + RAG查相关

四、Harness:控制框架

核心比喻:LLM是一匹马,Harness是缰绳

LLM本质上是在预测下一个词的概率分布——这意味着它天然存在随机性
在解决具体业务问题时,我们不希望这匹"马"随机乱跑,而是需要驾驭它走正确的路。

Harness框架的作用:

  • 将三种记忆正确地注入工作记忆(Context RAM)
  • 控制工具调用的范围和频率
  • 定义系统的行为边界
  • 减少LLM输出的随机性,提升确定性

常见Harness工具:

  • LangGraph — 基于图结构的Agent流程控制
  • LangChain — 链式调用框架
  • Pydantic — 结构化数据验证,约束LLM输出格式

没有好的Harness,就像骑着一匹不受控的马上战场——你可能被甩出去,也可能随机到达一个你完全不想去的地方。


五、记忆的存储与更新机制

数据库存储

  • 三种记忆都需要持久化到数据库:AWS S3、Google Cloud、Azure等云存储
  • 每次Agent回复后,将对话内容保存到情景记忆数据库(Save the messages)
  • 后续相关问题到来时,从数据库检索并注入工作记忆

摘要Agent(Summarizer Agent)

当情景记忆数据量过大时(例如电商平台有百万用户),不可能每次都加载全部历史。

解决方案:触发式记忆整合

  1. 设定阈值(如每积累N次新对话后触发一次)
  2. 启动一个廉价的摘要Agent(使用更便宜的开源模型,因为上下文窗口大、成本高)
  3. 将大量情景记忆提炼(Distill)为精炼的事实
  4. 存入语义记忆,供快速检索
情景记忆 (大量原始对话)↓  [每N次对话触发]
摘要Agent (廉价模型)↓  [提炼事实]
语义记忆 (精炼事实,检索更快)

六、检索机制:RAG vs SQL

检索是Harness的核心环节,不同类型的记忆使用不同的检索策略。

RAG(检索增强生成)

  • 适用场景:语义记忆 + 情景记忆中的相关性检索
  • 工作原理:将文本转为向量,通过Top-K相似度搜索找到最相关的内容
  • 例子:从2000条历史投诉中,找到与"产品质量问题且未解决"最相关的20条

SQL查询

  • 适用场景:情景记忆中的时间性检索
  • 工作原理:按时间顺序、日期范围、用户ID等结构化字段精确查询
  • 例子:查询某客户最近10次对话记录

两者结合使用

实际系统中往往需要同时使用:

  • 先用SQL按时间筛选范围(WHERE date > '2024-01-01'
  • 再用RAG在结果中做语义匹配(找最相关的那些)

核心原则:你不需要把2000条消息全塞进上下文,只需要找到其中最相关的20条——这就是RAG存在的意义。


七、工具调用(Tool Calls)

Agent不仅能读取记忆,还能调用外部工具执行真实操作:

常见工具类型举例:

  • 安排会议(Schedule Meeting)
  • 读写CRM系统(Salesforce, HubSpot)
  • 获取支付信息(Stripe, 支付宝)
  • 发送邮件、推送通知

为什么会产生"循环"?

Agent每次调用工具都会获得返回结果,这个结果会触发下一步思考,从而可能产生新的工具调用:

用户提问→ Agent思考:需要先查CRM→ 调用工具:查CRM → 返回"30起投诉,8起未赔偿"→ Agent思考:需要给这8位安排跟进→ 调用工具:安排会议 / 触发退款→ 任务完成 → 输出Reply

如果没有终止机制,Agent可能无限循环下去——这就是Loop工程要解决的问题。


八、Loop工程:循环控制与护栏

什么是Loop(循环)?

Loop是Agent在完成任务过程中,反复调用工具、思考、再调用工具的执行模式。
它是Harness的一部分,目的是在给LLM足够自主权的同时,确保它按预期方式运行。

终止循环的护栏(End Loop Guardrails)

护栏决定Agent什么时候该停下来返回结果,常见策略:

  1. 任务完成判断:Agent在规划时,判断当前结果是否已经足够回答用户的问题
  2. 用户确认节点:在关键步骤暂停,向用户确认(例如"要为这8位客户申请退款吗?")
  3. 最大迭代次数:设置工具调用上限,防止无限循环
  4. 外部通知触发:通过推送通知让用户介入(避免Agent卡住等待而浪费时间)

Claude Code Hooks 实例

一个实际的Loop工程例子:在使用Claude Code编写代码时,

  • 设置一个Hook,当Claude Code需要权限授权时,不是让它卡住等待
  • 而是发送系统通知到你的电脑/手机
  • 你在看视频30分钟后回来,看到通知,授权,循环继续

这就是通过循环工程,让Agent既能自主执行,又不会因为等待权限而白白浪费时间。


九、LLM Ops:大模型运维体系

为什么需要LLM Ops?

Harness解决了"怎么让Agent跑起来"的问题,但还有另一个关键问题:
你怎么知道它跑得好不好?出了问题怎么修复?

LLM Ops就是Agent系统的持续质量保证体系,包含四个环节:

追踪(Trace)→ 评估(Eval)→ 诊断(Diagnose)→ 修复/发布(Gate → Release)

完整LLM Ops流程

1. 追踪(Trace)

  • 每次Agent运行产生一条Trace(一次完整的用户输入→输出过程)
  • 记录的内容:
    • 用户问了什么
    • 进行了哪些RAG检索
    • 调用了哪些工具、调用几次
    • 各步骤耗时(延迟)
    • 消耗了多少Token
  • 工具:Langfuse、LangSmith

2. 评估(Eval)

评估回答两个问题:

① Was it good?(质量好吗?)

  • 使用LLM-as-a-Judge(用大模型当裁判)
  • 给系统表现打分
  • 例:会议是否被正确安排了?退款是否触发了?

② Was it healthy?(系统健康吗?)

  • 追踪Token消耗、延迟、错误率等指标
  • 可以用确定性代码实现(硬规则),也可以用AI判断

3. 诊断(Diagnose)

当发现问题时,深入分析"哪里出了问题,为什么":

  • 延迟20秒 vs 2毫秒?→ 可能是某个工具调用太慢,或上下文窗口太大
  • 会议从未被触发?→ 可能是工具调用逻辑有误,或RAG检索结果不对
  • 将Trace数据输入Claude/GPT进行深度分析

4. 门控 & 发布(Gate & Release)

评估通过?✅ 是 → 直接部署修复(更新提示词/模型配置/工具参数)❌ 否 → 修复Bug → 重新运行 → 重新追踪 → 重新评估 → 再次判断

可以修复/调整的内容:

  • 系统提示词(System Prompt)
  • 模型配置(温度、模型版本)
  • 工具参数
  • RAG检索参数(Top-K数量等)

修复后,改进的配置反馈回Harness框架,完成一次迭代闭环。


十、完整系统全景图解读

结合视频中的架构图,完整系统由左右两大部分组成:

左侧:Harness + Loop(Agent执行层)

用户提示 + 对话历史 + 系统提示↓工作记忆(Context RAM)↓  ↑(RAG/SQL检索)[程序记忆] [语义记忆] [情景记忆]↓LLM-Q&A Agent(GPT/Claude)↕ 工具调用循环(Loop)[工具:安排会议/CRM/支付]↓(护栏触发终止)Reply 输出↓保存消息 → 情景记忆数据库

右侧:LLM Ops(质量保障层)

每次Reply↓Trace(Langfuse/LangSmith)↓Eval(质量评分 + 健康监控)↓Diagnose(问题诊断)↓Gate(是否通过?)↓ 通过            ↓ 不通过Release            修复Bug → 重新运行
(更新Prompt/Config)↓改进的System Prompt + Config → 反馈回Harness

十一、关键知识总结

Agent系统的本质

Harness + Loop + LLM Ops = 一个能够自主进化、持续改进的AI Agent系统

最重要的几个认知

  1. LLM是概率引擎,天然有随机性——Harness存在的意义就是减少这种随机性,让输出更确定、更可控

  2. 记忆不是天生的,需要工程化——三种记忆类型需要配合不同的数据库和检索策略

  3. 循环不是Bug,是Feature——Loop工程让Agent能够完成复杂的多步骤任务,关键是知道何时终止

  4. 不追踪就无法改进——LLM Ops的核心是"可观测性",没有Trace就没有诊断,没有诊断就没有改进

  5. 修复不等于重写——大多数时候,问题可以通过调整提示词、RAG参数或模型配置来解决,无需修改代码

技术栈参考

层级 工具选择
Harness框架 LangGraph、LangChain、Pydantic
向量数据库 Pinecone、Weaviate、Chroma
情景记忆 PostgreSQL、SQLite + 向量扩展
追踪工具 Langfuse、LangSmith
云存储 AWS S3、Google Cloud Storage、Azure Blob

本文内容参考于视频一口气学会AI Agent Harness/Loop工程/LLM Ops/Eval评估系统

← 返回列表