关于agent的一些思考
**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 核心执行流程
用户输入 →
messagesLLM 处理
messages→ 输出tool_call或最终文本Executor 解析
tool_call:- 如果是 Tool → 直接执行
- 如果是 Skill → 执行 Skill 函数(内部可能调用多个工具)
将执行结果存入 memory
结果追加到
messages→ 下一轮循环或结束任务最终返回给用户
1 | User Input |
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 | const response = await openai.chat.completions.create({ |
- 旧 API(legacy):
functions+function_call→ 返回function_call
统一使用
tools+tool_calls,兼容最新模型,支持 Skill 封装。
6️⃣ Agent 结构宏观图
1 | User |
7️⃣ 下一步学习方向
Context Management
- messages 过长怎么办
- token 限制处理、summarization、sliding window
Skill 封装与复用
- 更复杂任务组合
Planner(任务拆解能力)
- 高级 Agent 可先生成任务计划,再执行
Guardrails
- 避免无限循环或胡编
Memory 长期存储
- Knowledge / Vector DB / 用户偏好
如果你愿意,我可以帮你在这个笔记基础上 写一份最小可用的 JS Agent 框架,整合 Tools + Skills + Memory + Loop + Context Management,保证 100 行左右,直接可运行。
你希望我帮你写吗?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YianNotes!

