用户意图 → Agent 决策 → Skill 编排 → Tool 调用 → 工具结果 → 再推理 → 最终响应
设计成一个可靠、可扩展、可观测、可控制的系统。
结合你目前在学习 OpenCode / Agent / MCP / Skill / TypeScript,我建议把它理解成下面这套知识体系。
一、核心考察知识地图
Tool / Skill 调用链路
│
┌────────────────┼────────────────┐
↓ ↓ ↓
Agent决策 Skill系统 Tool系统
│ │ │
意图识别 Skill发现 Tool发现
Planning Skill加载 Tool Schema
Routing Skill编排 参数校验
ReAct Skill依赖 Tool执行
Reflection Skill生命周期 Tool结果
│ │ │
└────────────────┼────────────────┘
↓
Runtime运行时
│
┌──────────────┼──────────────┐
↓ ↓ ↓
Context State状态 Error错误
管理 管理 Retry重试
│ │ │
└──────────────┼──────────────┘
↓
Observability
│
Trace / Log / Metric
如果是面试、技术方案设计或者自己实现 Agent,主要考察下面 10 个方面。
二、第一层:Tool 是什么
这是最基础的一层。
你需要搞清楚:
LLM
│
│ 决策
↓
Tool
│
├── name
├── description
├── input schema
├── output
└── execute()
例如:
{
"name": "query_stock",
"description": "查询股票实时行情",
"input_schema": {
"symbol": "string"
}
}
LLM并不是直接执行:
query_stock("600519")
而是生成结构化 Tool Call:
{
"tool": "query_stock",
"arguments": {
"symbol": "600519"
}
}
Runtime 再真正执行。
所以必须理解:
Tool = LLM 可以调用的外部能力
例如:
搜索
数据库
HTTP API
Shell
文件系统
Git
浏览器
代码执行
MCP Server
三、第二层:Skill 是什么
这是很多人容易混淆的地方。
可以简单理解:
Tool 是"能力",Skill 是"如何使用能力完成一类任务"。
例如:
Tool
├── search_web
├── read_file
├── write_file
├── execute_command
└── git_commit
Skill:
Git代码审查 Skill
│
├── read_file
├── search_code
├── analyze_code
└── git_diff
再例如:
API测试 Skill
│
├── read_api_doc
├── generate_request
├── execute_http
├── validate_response
└── generate_report
所以:
Tool
↓
原子能力
Skill
↓
能力组合 + 方法论 + Prompt + 流程
四、第三层:Tool Calling
这是 Agent 的核心。
你必须理解完整循环:
User
↓
LLM
↓
是否需要Tool?
├── No → Final Answer
│
└── Yes
↓
Tool Call
↓
Runtime
↓
Execute Tool
↓
Tool Result
↓
LLM
↓
是否继续调用?
├── Yes → Tool Call
│ ↓
│ Execute
│ ↓
│ Result
│ ↓
│ LLM
│
└── No → Final Answer
也就是:
LLM
↓
Tool Call
↓
Tool Execute
↓
Tool Result
↓
LLM
↓
Tool Call
↓
...
↓
Final Answer
这实际上就是 Agent 最核心的 Loop。
五、第四层:Skill 如何参与调用链
进一步就会变成:
用户:
"帮我分析这个项目的代码质量"
Agent:
Intent
↓
选择 Code Review Skill
↓
加载 Skill
↓
读取 Skill 指令
↓
Skill告诉Agent应该怎么做
↓
选择 Tool
例如:
Code Review Skill
Step 1:
读取项目结构
Step 2:
寻找核心代码
Step 3:
分析依赖
Step 4:
检查异常处理
Step 5:
检查测试
Step 6:
生成报告
实际执行:
Skill
│
├── list_files Tool
│
├── read_file Tool
│
├── search_code Tool
│
├── analyze Tool
│
└── write_report Tool
因此真正的链路是:
User
↓
Agent
↓
Skill
↓
Tool
↓
Tool Result
↓
Agent
↓
Skill
↓
Tool
↓
...
六、第五层:Tool / Skill Discovery
这是设计 Agent 时非常重要的知识。
如果系统有:
1000个Tool
100个Skill
你不能全部塞给 LLM。
否则:
Context暴涨
↓
Token增加
↓
Tool选择准确率下降
↓
成本增加
所以需要:
User Intent
↓
Skill Discovery
↓
找到相关Skill
↓
Tool Discovery
↓
找到相关Tool
↓
LLM调用
常见方案:
静态注册
↓
Registry
↓
Metadata
↓
Embedding检索
↓
Semantic Routing
例如:
用户:
"帮我查一下600519今天的价格"
↓
Skill Router
↓
Stock Query Skill
↓
Tool Router
↓
query_stock
这涉及:
-
Router
-
Registry
-
Embedding
-
Semantic Search
-
Metadata
-
Tool Schema
-
Dynamic Loading
七、第六层:参数 Schema
Tool 调用不能完全相信 LLM。
例如 Tool:
interface QueryStockInput {
symbol: string;
market: string;
}
LLM可能产生:
{
"symbol": 600519,
"market": "A"
}
甚至:
{
"stock": "茅台"
}
所以必须有:
LLM
↓
Tool Call
↓
Schema Validation
↓
参数转换
↓
权限检查
↓
Tool Execute
常见知识:
JSON Schema
Zod
TypeBox
Pydantic
Bean Validation
你如果继续深入 TypeScript Agent,这块尤其值得学。
八、第七层:Runtime / Executor
这是真正体现工程能力的地方。
不要认为:
LLM → Tool
实际上应该是:
LLM
↓
Tool Call
↓
Agent Runtime
↓
Tool Registry
↓
Permission
↓
Schema Validation
↓
Timeout
↓
Retry
↓
Circuit Breaker
↓
Tool Executor
↓
Result
例如:
ToolExecutor
execute(toolCall):
1. 找Tool
2. 校验参数
3. 检查权限
4. 创建Trace
5. 设置Timeout
6. 执行Tool
7. 捕获异常
8. Retry
9. 保存Result
10. 返回LLM
这一块已经从:
AI知识
进入:
后端系统设计
所以你 Java 后端经验在这里其实非常有优势。
九、第八层:错误处理
一个成熟 Agent 最重要的能力之一就是:
Tool失败以后怎么办?
例如:
LLM
↓
query_database
↓
数据库连接失败
不能直接:
Agent挂掉
应该:
Tool Error
↓
Error Classifier
│
├── Timeout
│ ↓
│ Retry
│
├── Auth Error
│ ↓
│ Stop
│
├── Parameter Error
│ ↓
│ LLM重新生成参数
│
├── Business Error
│ ↓
│ LLM重新规划
│
└── System Error
↓
Fallback
因此需要掌握:
-
Retry
-
Timeout
-
Fallback
-
Circuit Breaker
-
Idempotency
-
Error Classification
-
Compensation
这些其实和传统分布式系统高度相关。
十、第九层:Context / State
这个是 Agent 和普通 API 最大的区别之一。
例如:
用户:
帮我查茅台
LLM:
调用 query_stock
Tool:
600519 = 1450元
LLM:
再帮我分析一下PE
第二次调用时,Agent必须知道:
前面查询过:
symbol = 600519
price = 1450
因此需要:
Conversation
↓
Context
↓
State
↓
Tool Result
↓
下一轮Reasoning
这里需要学习:
Short-term Memory
Long-term Memory
Conversation State
Agent State
Context Window
Context Compression
Checkpoint
Session
十一、第十层:Observability
真正做生产级 Agent,这一块非常重要。
你必须能回答:
为什么 Agent 调用了这个 Tool?
例如完整 Trace:
Trace
│
├── User Request
│
├── Agent Decision
│
├── Skill Selected
│
├── Tool Selected
│
├── Tool Arguments
│
├── Tool Execution
│
├── Tool Result
│
├── LLM Reasoning
│
├── Next Tool
│
└── Final Answer
最终可以形成:
Trace ID
│
├── LLM Call #1
│
├── Tool Call #1
│
├── LLM Call #2
│
├── Tool Call #2
│
└── LLM Call #3
需要关注:
Latency
Token
Cost
Success Rate
Tool Error Rate
Retry Count
Tool Selection Accuracy
Agent Completion Rate
十二、如果让你设计一套 Tool / Skill 架构
我比较推荐你按照下面这个结构理解:
User
│
↓
┌─────────────┐
│ Agent │
│ Runtime │
└──────┬──────┘
│
┌──────▼──────┐
│ Intent │
│ Router │
└──────┬──────┘
│
┌──────▼──────┐
│ Skill │
│ Registry │
└──────┬──────┘
│
┌──────▼──────┐
│ Skill │
│ Executor │
└──────┬──────┘
│
┌──────▼──────┐
│ Tool │
│ Registry │
└──────┬──────┘
│
┌──────▼──────┐
│ Tool │
│ Executor │
└──────┬──────┘
│
┌─────────┼─────────┐
↓ ↓ ↓
HTTP API Database MCP
│ │ │
└─────────┼─────────┘
↓
Tool Result
│
↓
Agent Loop
│
┌──────┴──────┐
↓ ↓
Tool Answer
Call User
十三、如果是面试/架构设计,重点考什么?
我会把它压缩成 8 个核心能力:
| 能力 | 主要考察 |
|---|---|
| Tool | Tool 定义、Schema、执行 |
| Skill | Skill 与 Tool 的区别、Skill 编排 |
| Agent | Planning、Routing、ReAct、Loop |
| Runtime | Executor、生命周期 |
| Context | State、Memory、上下文管理 |
| Reliability | Retry、Timeout、Fallback |
| Security | Permission、Sandbox、Tool 白名单 |
| Observability | Trace、Log、Metric、成本 |
再往上,就是:
Multi-Agent
↓
Agent-to-Agent
↓
MCP
↓
Dynamic Tool Discovery
↓
Skill Marketplace
↓
Agent Runtime
↓
Distributed Agent System
十四、结合你现在学习 OpenCode,我建议重点研究这一条链
你现在如果目标是看懂 OpenCode / Coding Agent 源码,不用把 Agent 所有理论都学一遍。
优先搞懂:
用户输入
↓
Agent
↓
Prompt / Context
↓
LLM
↓
Tool Call
↓
Tool Registry
↓
Tool Executor
↓
具体Tool
↓
Tool Result
↓
Message History
↓
LLM
↓
Tool Call
↓
...
↓
Final Response
然后再研究:
Skill
↓
Skill Discovery
↓
Skill Loading
↓
Skill Prompt
↓
Tool Selection
最后研究:
Agent Runtime
↓
Session
↓
State
↓
Event
↓
Tool
↓
MCP
↓
Permission
↓
Sandbox
↓
Trace
这条链路吃透以后,你看 OpenCode、Claude Code 类 Coding Agent 的源码会顺很多。
如果把它进一步抽象成一句话:
Tool/Skill 调用链路设计,本质上考察的是"LLM 决策层 + Agent Runtime 执行层 + Tool 能力层 + 状态/上下文层 + 可靠性/安全/可观测性"的系统设计能力。