**Agent 学习笔记**

1️⃣ 核心概念

概念 理解 作用
LLM 大语言模型,只负责文本生成和决策 规划、思考、决定调用哪个工具或技能
Tool 原子操作函数,执行单一任务 具体执行动作,如 getWeather(city)
Skill 高级能力函数,封装多个工具 + 逻辑 形成可被 LLM 调用的完整任务能力
Executor / Agent Loop Agent 核心循环 解析 LLM 输出,执行工具/技能,更新 messages,继续 loop
Agent Loop Think → Act → Observe → Think 保证任务持续进行直到完成
Memory 本地存储的上下文和工具/技能结果 提供短期和长期记忆,帮助 LLM 生成连续、合理的输出
Function Calling / Tool Calling API 层结构化工具调用 LLM 只返回 tool_call,真正执行由 Agent/Skill 完成
Guardrails 安全与约束机制 防止 LLM 胡编、无限循环、调用危险工具
Context Management 管理 LLM 输入的 messages 控制 token 消耗、保持任务相关上下文

2️⃣ Agent 核心执行流程

  1. 用户输入 → messages

  2. LLM 处理 messages → 输出 tool_call 或最终文本

  3. Executor 解析 tool_call

    • 如果是 Tool → 直接执行
    • 如果是 Skill → 执行 Skill 函数(内部可能调用多个工具)
  4. 将执行结果存入 memory

  5. 结果追加到 messages → 下一轮循环或结束任务

  6. 最终返回给用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
User Input

LLM (Think)

tool_call / final answer

Executor

Skill/Tool 执行

Memory 更新

Messages 更新

下一轮 LLM

3️⃣ Memory 机制

  • 短期记忆:存最近几轮 messages
  • 长期记忆:存知识库、用户偏好(Vector DB)
  • 在本地维护,LLM 不直接记忆
  • 使用方式
    • 每轮工具/技能执行结果存入 memory
    • 需要时拼接到 messages 给 LLM
    • 避免 token 消耗过大 → 需要 context pruning / summarization

4️⃣ Tools 与 Skills 区别

属性 Tool Skill
功能 单一 多个工具组合 + 逻辑处理
LLM 可见性 直接调用 看到技能名 + 参数 + 描述,不知道内部细节
执行方 由 Executor 调用 由 Executor 调用 Skill 函数,Skill 内部调用 Tools
示例 getWeather(city) WeatherAndNewsSkill(city) → 调用 getWeather + searchNews

5️⃣ LLM API 调用要点

  • 新 API 推荐
    • tools → 注册所有可调用的工具或技能接口
    • tool_choice: "auto" → LLM 自动选择调用
    • 返回 tool_calls → Agent 执行
1
2
3
4
5
6
const response = await openai.chat.completions.create({
model,
messages,
tools: [WeatherAndNewsSkill_schema],
tool_choice: "auto",
});
  • 旧 API(legacy)
    • functions + function_call → 返回 function_call

统一使用 tools + tool_calls,兼容最新模型,支持 Skill 封装。


6️⃣ Agent 结构宏观图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
             User


┌─────────┐
│ Input │
└─────────┘


┌─────────────────┐
│ Context Builder │
└─────────────────┘


┌─────────────┐
│ LLM │
│ Think/Plan │
└─────────────┘

┌────────┴────────┐
│ │
▼ ▼
tool_calls final answer
│ │
▼ ▼
┌───────────┐ 返回用户
│ Executor │
└───────────┘


┌───────────┐
│ Skills │
└───────────┘


┌───────────┐
│ Tools │
└───────────┘


External APIs

7️⃣ 下一步学习方向

  1. Context Management

    • messages 过长怎么办
    • token 限制处理、summarization、sliding window
  2. Skill 封装与复用

    • 更复杂任务组合
  3. Planner(任务拆解能力)

    • 高级 Agent 可先生成任务计划,再执行
  4. Guardrails

    • 避免无限循环或胡编
  5. Memory 长期存储

    • Knowledge / Vector DB / 用户偏好

如果你愿意,我可以帮你在这个笔记基础上 写一份最小可用的 JS Agent 框架,整合 Tools + Skills + Memory + Loop + Context Management,保证 100 行左右,直接可运行。

你希望我帮你写吗?