这两年我对 AI 的使用方式发生了一个非常明显的变化。
最开始,我把 ChatGPT、Claude、DeepSeek 这些大模型当成:
text
一个更聪明的搜索引擎
+
一个随时可以问问题的人
后来开始用 AI 写代码,它变成了:
text
程序员的 Copilot
而现在,我越来越少把 AI 当成一个单纯的聊天机器人。
我更愿意把它理解成:
一个可以调度各种工具,替我完成任务的执行者。
这里面有一个非常重要的能力:
Tool Calling
如果你正在研究 AI Agent、MCP、Codex、Claude Code,或者各种自动化工作流,那么 Tool Calling 基本上是一个绕不过去的概念。
今天这篇文章,我不准备只讲 Tool Calling 的理论。
我想结合自己目前真正使用 AI 的方式,聊聊:
王仕宇是怎么使用 AI Tool Calling 的。
一、以前我怎么使用 AI?
最早的时候,使用 AI 基本都是这种模式:
text
我
↓
输入问题
↓
ChatGPT
↓
输出一段文字
比如:
text
帮我写一个 Go 的 HTTP Client。
AI 返回代码:
go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, err := http.Get("https://example.com")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
然后接下来还是我自己:
text
复制代码
↓
打开 IDE
↓
创建文件
↓
粘贴进去
↓
运行
↓
发现报错
↓
复制错误
↓
重新问 AI
本质上 AI 做的是:
text
生成答案
而不是:
text
完成任务
这两个看起来很像,实际上完全不是一回事。
二、Tool Calling 改变了什么?
现在我可能直接对 AI 说:
帮我看看这个 Go 项目为什么启动失败。
如果只是普通 ChatGPT,它只能说:
text
请把报错贴给我。
但一个拥有 Tool Calling 能力的 AI,可以自己:
text
查看项目文件
↓
读取 go.mod
↓
查看配置文件
↓
执行 go run
↓
读取错误日志
↓
搜索错误位置
↓
修改代码
↓
再次运行
↓
确认问题是否解决
这时候 AI 就已经不是:
text
Chat
而更接近:
text
Agent
这里真正关键的地方,就是模型拥有了一批:
text
Tools
例如:
text
read_file
write_file
search_file
run_command
git_diff
web_search
browser
database
generate_image
generate_video
模型根据当前任务决定:
text
什么时候调用工具
调用什么工具
传入什么参数
根据结果下一步怎么办
这就是我现在使用 AI 的核心方式。
三、我现在越来越少"让 AI 给我代码"
这是我的一个非常明显的变化。
以前我经常问:
帮我写一个 Docker Compose。
然后 AI 给我:
yaml
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
接下来还是自己复制。
而现在我更希望 AI:
text
直接查看当前项目
↓
判断项目需要什么
↓
创建 docker-compose.yml
↓
检查已有端口
↓
运行 Docker Compose
↓
检查容器日志
↓
发现问题以后继续修改
也就是说,我越来越喜欢给 AI:
text
目标
而不是:
text
某一小段代码要求
比如以前:
text
给我写一个 Nginx 配置。
现在:
text
把这个项目部署到服务器,
域名使用 xxx.com,
服务运行在 3000 端口,
配置 HTTPS 和 SSE,
然后检查配置有没有问题。
区别非常大。
第一个是:
text
生成文本
第二个是:
text
完成一个任务
四、我在 AI 编程里大量使用 Tool Calling
这是我现在 Tool Calling 使用最多的地方。
我日常会接触:
text
Go
Python
Node.js
Vue
Docker
Nginx
MySQL
Redis
MongoDB
Cloudflare
以前遇到项目问题,大概是:
text
我自己定位
↓
找到文件
↓
复制代码
↓
发给 AI
↓
AI 给修改建议
↓
自己修改
现在有 Codex、Claude Code 这类 Agent 工具以后,我更倾向于:
text
AI 自己读取仓库
例如我说:
帮我给这个项目增加 MongoDB 支持。
Agent 可以先:
text
list_files
发现:
text
config/
internal/
model/
repository/
service/
go.mod
接着读取:
text
go.mod
config.yaml
repository/user.go
main.go
然后判断项目结构。
接下来可能自动:
text
添加 Mongo Driver
↓
增加 MongoDB 配置
↓
写初始化代码
↓
创建 Repository
↓
更新依赖
↓
运行 go test
这些步骤每一步实际上都在调用工具。
五、一个 AI 编程 Agent 背后可能有哪些 Tool?
简单模拟一下。
一个编码 Agent 可能拥有:
json
{
"tools": [
{
"name": "read_file"
},
{
"name": "write_file"
},
{
"name": "list_directory"
},
{
"name": "search"
},
{
"name": "run_command"
},
{
"name": "git_diff"
}
]
}
当我说:
帮我修一下登录接口的 Bug。
模型可能先调用:
json
{
"name": "search",
"arguments": {
"query": "Login"
}
}
然后找到:
text
internal/handler/login.go
internal/service/login.go
再:
json
{
"name": "read_file",
"arguments": {
"path": "internal/service/login.go"
}
}
然后执行:
json
{
"name": "run_command",
"arguments": {
"command": "go test ./..."
}
}
发现:
text
panic: invalid memory address
修改:
json
{
"name": "write_file",
"arguments": {
"path": "internal/service/login.go",
"content": "..."
}
}
最后:
text
go test ./...
通过。
你会发现:
模型本身其实并没有"神奇地控制电脑"。
真正让它能够操作项目的,就是这些 Tool。
六、我也在用 Tool Calling 做图片生成
除了编程,我现在做内容时也大量用 AI 图片。
比如我要写一篇:
text
Go Context:解决协程泄漏与超时控制
以前我的流程是:
text
写文章
↓
想封面
↓
打开生图网站
↓
写 Prompt
↓
生成
↓
下载
↓
放入文章
现在我的理想流程变成:
text
文章生成完成
↓
AI 分析文章核心知识点
↓
调用图片 Tool
↓
生成知识总结图
↓
自动得到图片
比如我只需要说:
根据这篇文章画一张总结图。
模型先理解文章。
然后调用:
text
generate_image
把:
text
标题
知识结构
视觉风格
尺寸
个人信息
全部转换成图片生成参数。
所以我现在越来越喜欢把:
text
生图
也做成 Agent Tool。
七、图片 Skill 本质上也是 Tool Calling
我之前也在做自己的 AI 生图 Skill。
从最终体验来看,我希望它是这样的:
text
用户:
帮我给这篇文章配一张图
Agent:
text
读取文章
↓
判断适合什么图
↓
生成 Prompt
↓
调用图片 API
↓
拿到图片 URL
↓
下载图片
↓
返回本地文件
真正执行生图的还是:
text
图片模型 API
但是大模型决定了:
text
该不该生成
生成什么
用哪个模型
如何组织 Prompt
这就是:
text
LLM + Tool
八、视频生成也是同样的逻辑
AI 视频也是我现在比较关注的一类工具。
比如:
帮我生成一个 4 秒钟的动物世界视频,一只猎豹在草原追逐羚羊。
大模型负责理解:
text
主体
场景
镜头
动作
光影
视频长度
画面风格
然后调用:
text
generate_video
真正的视频可能由:
text
Kling
即梦
Grok Imagine
MiniMax
其他视频模型
完成。
流程:
text
自然语言
↓
LLM
↓
Prompt 编排
↓
Video Tool
↓
Video API
↓
任务 ID
↓
查询任务状态
↓
获取视频
↓
下载
注意这里已经不是只调用一次 Tool 了。
而是:
text
create_video
↓
get_video_status
↓
download_video
多个 Tool Calling 串联。
这就是一个很典型的 Agent 工作流。
九、我特别看好"AI + API"
我自己本身做后端比较多。
所以在我看来:
任何已有 API 的系统,理论上都非常适合接入 AI。
比如一个传统后台里已经存在:
text
GET /users
GET /orders
POST /orders
POST /refund
GET /statistics
过去这些 API 是给:
text
Web
App
小程序
使用。
未来完全可以包装成:
text
Tools
比如:
text
get_user
get_order
create_order
refund_order
get_statistics
于是管理员可以直接问 AI:
今天退款金额超过 500 元的订单有多少?
AI:
text
调用 get_statistics
↓
拿到订单
↓
筛选
↓
汇总
↓
回答
接着你说:
把金额最大的 10 个订单列出来。
Agent 再调用 Tool。
甚至:
给这 10 个订单的负责人分别发消息确认。
又继续调用:
text
send_message
这就是我认为 Tool Calling 特别有价值的一点:
它可以直接复用我们已经存在的大量后台能力。
十、数据库是我很看好的一个 Tool
我自己做项目经常使用:
text
MySQL
Redis
MongoDB
SQL Server
过去要查业务数据:
text
登录服务器
↓
进入数据库
↓
写 SQL
↓
复制结果
↓
分析
以后完全可能变成:
帮我查一下最近 7 天每天新增用户数量。
AI 调用:
text
query_database
产生 SQL:
sql
SELECT
DATE(created_at) AS day,
COUNT(*) AS total
FROM users
WHERE created_at >= NOW() - INTERVAL 7 DAY
GROUP BY DATE(created_at)
ORDER BY day;
数据库返回:
text
2026-08-16 128
2026-08-17 156
2026-08-18 181
...
AI 再帮我:
text
总结趋势
计算环比
找异常
画图
这就比传统 BI 更自然。
十一、但我不会给 AI 无限数据库权限
Tool Calling 最大的问题之一其实不是:
text
技术做不做得到
而是:
text
权限
比如给 AI 一个:
text
execute_sql
Tool。
然后什么 SQL 都允许执行:
sql
DROP DATABASE production;
那肯定不行。
所以如果让我设计,我会拆成:
text
query_database
默认:
text
Read Only
或者限制:
text
SELECT
而下面这些操作:
text
DELETE
UPDATE
DROP
TRUNCATE
需要:
text
更高权限
+
人工确认
我认为未来 Agent 开发一个很重要的方向就是:
不是 Tool 越多越好,而是权限设计越合理越好。
十二、服务器运维也是非常好的 Tool Calling 场景
这是另一个我自己非常容易用到的地方。
平时维护服务器经常遇到:
text
504
502
Docker 容器退出
Nginx 配置错误
磁盘满
CPU 高
连接数异常
日志报错
传统排错:
bash
docker ps
bash
docker logs
bash
top
bash
df -h
bash
free -h
bash
journalctl
bash
nginx -t
以后完全可以定义:
text
get_server_status
get_docker_status
get_logs
restart_container
test_nginx
reload_nginx
然后直接说:
帮我看看 api 服务为什么 502。
AI 自己:
text
检查 Nginx
↓
检查 upstream
↓
检查 Docker
↓
查看日志
↓
发现 3000 端口没启动
↓
检查对应容器
如果权限允许:
text
重启容器
↓
再次 curl
↓
确认恢复
这就是一个真正能干活的运维 Agent。
十三、Web Search 也是一种 Tool
很多人没有意识到:
text
联网搜索
本身也是 Tool Calling。
比如我问:
MongoDB 8.3 最近更新了什么?
模型训练数据不一定包含最新资料。
它就应该:
text
search_web
↓
打开 MongoDB 官方文档
↓
读取 Release Notes
↓
总结
而不是依靠:
text
模型参数里的旧知识
我现在做技术内容,一个非常明显的变化就是:
越来越多内容必须"模型 + 搜索",而不是只靠模型。
特别是:
text
模型版本
软件版本
价格
API
新功能
GitHub 项目
最新发布
这些变化非常快。
十四、我为什么很关注 MCP?
Tool Calling 解决的是:
text
AI 怎么调用工具
但还有另一个问题:
这么多工具到底怎么接到不同的 AI 上?
比如我自己写了:
text
MongoDB Tool
图片 Tool
视频 Tool
GitHub Tool
数据库 Tool
如果:
text
Codex
Claude Code
Cursor
OpenCode
ChatGPT
全部使用不同协议。
那每个都重新开发一遍,很麻烦。
所以 MCP 出现以后,我觉得它非常值得关注。
我的理解很简单:
text
Tool Calling
=
AI 使用工具的能力
MCP
=
AI 连接工具的一种标准
未来我更希望:
text
我的服务
↓
MCP Server
↓
暴露 Tools
↓
不同 Agent 都可以使用
而不是:
text
每个平台单独做一套插件
十五、我理想中的 AI 使用方式
我认为 AI 最终不应该变成:
text
一个越来越大的聊天框
而应该越来越像:
text
一个任务调度中心
比如我未来希望直接说:
写一篇 MongoDB 的文章,然后给它生成一张总结图,检查里面的 MongoDB 命令是否有明显问题,最后整理成适合发布的版本。
这句话背后可能发生:
text
读取已有内容风格
↓
搜索 MongoDB 官方资料
↓
生成文章
↓
校验关键命令
↓
生成图片
↓
处理图片
↓
生成最终 Markdown
这里面可能连续调用:
text
Memory Tool
Web Search
Image Tool
File Tool
Code Tool
但是对我来说,我只需要提供:
text
目标
这才是我真正期待的 Agent。
十六、Tool Calling 以后,人最重要的能力是什么?
我认为不是:
text
记住更多命令
也不是:
text
学会更多软件按钮
而是:
text
知道自己想要什么
因为以前使用软件,你需要知道:
text
第一步点哪里
第二步点哪里
第三步输什么
第四步怎么保存
未来使用 Agent:
text
告诉它目标
Agent 自己调 Tool。
所以人的角色逐渐变成:
text
目标制定
↓
结果判断
↓
风险判断
↓
最终决策
这也是为什么我一直认为:
AI 越强,判断力反而越重要。
十七、但我并不认为 Agent 可以完全放任
我现在比较认同的一套方式是:
text
低风险任务
AI 自动执行
中风险任务
AI 执行 + 日志
高风险任务
AI 提方案 + 人确认
比如:
可以自动执行
text
读取文件
搜索代码
查询数据库
搜索网页
生成图片
生成草稿
运行测试
可以执行,但需要记录
text
修改代码
部署测试环境
创建文件
修改配置
最好人工确认
text
删除生产数据
退款
转账
删除服务器
修改 DNS
发布生产环境
批量发送消息
真正成熟的 Agent,不应该只是:
text
能调用 Tool
而应该知道:
text
什么时候不能直接调用 Tool
十八、我现在怎么理解 AI Agent?
如果用一个比较简单的公式,我会写成:
text
AI Agent
=
LLM
+
Tool Calling
+
Memory
+
Planning
+
Environment
其中:
text
LLM
负责理解和推理。
text
Tool Calling
负责做事情。
text
Memory
负责记住过去。
text
Planning
负责拆任务。
text
Environment
可能是:
text
电脑
浏览器
服务器
代码仓库
数据库
企业系统
互联网
如果没有 Tool Calling:
text
AI 再聪明
很多时候也只是:
text
一个会说话的大脑
有了 Tool:
text
AI 才真正拥有手和脚。
十九、为什么我越来越关注 Harness?
最近我也越来越关注一个词:
text
Harness
可以简单理解为:
给大模型提供一套运行环境和工具系统。
同一个模型:
text
DeepSeek
Claude
GPT
Gemini
如果只是放进聊天框:
text
能力是一种表现
如果放进:
text
Codex
Claude Code
OpenCode
其他 Agent Harness
表现可能完全不同。
为什么?
因为 Harness 给模型增加了:
text
文件
Shell
代码执行
Git
搜索
Memory
Tool Calling
所以我现在越来越觉得:
未来比拼的不只是"谁的模型参数更多",还包括"谁给模型配的工具更好"。
二十、我的 Tool Calling 使用方式正在发生一个变化
我目前明显在从:
text
使用别人做好的 AI 工具
逐渐走向:
text
给 AI 做自己的 Tool
比如:
text
图片生成
视频生成
API
代码操作
服务器管理
数据库查询
内容生产
以前:
text
我调用 API
以后:
text
AI 帮我决定什么时候调用 API
这中间只多了一层:
text
LLM
但是整个交互方式发生了非常大的变化。
二十一、一个非常值得程序员关注的机会
我认为 Tool Calling 对程序员特别重要。
为什么?
因为过去我们写了大量:
text
API
SDK
CLI
后台系统
微服务
数据库接口
这些东西其实天然就可以变成:
text
AI Tools
过去是:
text
程序调用程序
现在变成:
text
人说一句话
↓
AI 理解
↓
AI 调用程序
所以很多旧系统不需要推倒重做。
你完全可以在上面加一层:
text
AI Agent
让现有能力通过自然语言暴露出去。
我觉得这会带来大量新的产品机会。
二十二、如果让我重新学习 AI,我会怎么学?
如果现在让我重新开始,我不会只学:
text
Prompt
而会按照下面的顺序:
text
LLM API
↓
Structured Output
↓
Tool Calling
↓
MCP
↓
Memory
↓
RAG
↓
Agent
↓
Multi-Agent
其中我会特别重视:
Tool Calling
因为从这里开始,大模型第一次真正从:
text
"会回答"
跨到了:
text
"会行动"
二十三、最后
过去我们评价一个 AI,最常问的是:
text
这个模型聪不聪明?
以后我觉得还要增加一个问题:
这个 AI 能用什么工具?
因为一个模型再聪明,如果它只能:
text
输出文字
很多任务最终还是得你自己完成。
而一个拥有:
text
文件工具
浏览器
搜索
Shell
Git
数据库
图片
视频
支付
企业 API
的大模型,即使模型本身没有发生变化,它的实际价值也可能完全不同。
所以我现在使用 AI,越来越少关注:
text
"让 AI 给我一个答案。"
而越来越关注:
text
"怎么让 AI 把这件事情做完。"
这也是我理解 Tool Calling 最简单的一句话:
Tool Calling,就是让大模型从会说话,开始真正拥有做事的能力。
模型负责:
text
理解
判断
推理
决策
Tool 负责:
text
搜索
读取
执行
修改
查询
生成
操作
二者结合,才逐渐形成我们今天所说的:
text
AI Agent
我认为未来真正有价值的 AI 应用,很可能并不是再做一个聊天框。
而是:
把真实世界里那些已有的 API、软件、数据和工作流,全部变成 AI 可以调用的 Tool。
到了那个时候,我们和软件之间的交互方式,也许真的会从:
text
学习软件怎么用
逐渐变成:
text
告诉 AI 我想做什么。
现在是最好的时代。中国有全世界最高性价比的制造业,有发达的网络和全球物流。
只要你愿意,你几乎可以买到这个世界上任何地方生产的、任何你想要的商品。你可以用很低的成本,撬动全球的资源为你服务。
不过,真正稀缺的,从来不是商品,而是注意力、判断力,以及把事情做成的能力。
所以,这是最好的时代,也是最坏的时代。
我是王仕宇,关注 AI、Web3 与开源,持续探索如何把技术做成产品,把产品转化为真实价值。