AI Agent 中 Tool / Skill 的调用链路设计

用户意图 → 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 能力层 + 状态/上下文层 + 可靠性/安全/可观测性"的系统设计能力。

相关推荐
钱栈up1 小时前
大屏Logo定位调了8次才合格:响应式定位的经验总结安装Unsloth桌面端报PyTorch失败:Python 3.13的ABI不兼容所致
python
wuhuhuan1 小时前
Case Generator 测试自动化平台
python·测试工具·自动化
Flynt2 小时前
Astra 自主跑了 35 小时烧掉 40 亿 token,产出为零:我给 Agent 加了三道闸
python·aigc·agent
mldong2 小时前
Python 开发者也有自己的轻量工作流引擎了:pip install 一行,5 分钟跑通一条审批流
后端·python·架构
weixin199701080163 小时前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
B2_Proxy3 小时前
Python 爬虫代理中间件开发:统一处理 403、429 与自动重试机制
python
学代码的CJY3 小时前
Python序列类型详解
python
529宝宝起名网3 小时前
用 Python 爬取古籍文献中的名字用例数据库:从二十四史到诗词文集的历史名字采集与分析
python
颜颜yan_11 小时前
ESP-IDF 鸿蒙 PC 适配全记录:打通 Python、构建工具链与 ESP32-P4 固件生成
python·华为·harmonyos