你的 Agent 是不是越用越烧钱?2026 年的评测揭示了一个惊人事实:执行同类任务,极简 Agent 框架 smol 只消耗 17 万 Token,而把系统提示词和工具集硬塞进去的重型框架烧掉 500 万——差距高达 30 倍。这种「Token 通胀」大多源于框架强行注入的复杂 System Prompt 和冗余工具。本教程手把手教你用 smol 写一个最小可用 Agent,并通过精简提示词夺回对成本和模型行为的控制权。
先搞懂:为什么「重」=「贵」?
用一句话理解:框架每往上下文里多塞一句系统提示、多注册一个用不上的工具,你每次对话都在为这些「脂肪」买单。
| 框架风格 | 每次请求注入 | 同类任务 Token |
|---|---|---|
| 重型集成 IDE | 几千字系统提示 + 几十个工具定义 | ≈ 500 万 |
| 轻量 CLI(smol) | 几十字核心指令 + 按需工具 | ≈ 17 万 |
核心结论:当 Agent 框架越重,你的开发成本越不可控。老练的开发者正在从臃肿 IDE 回归轻量 CLI / Neovim,用精简 System Prompt 夺回控制权。
Step 1:装好 smol 与模型 Key
smol 的理念是「能不依赖就不依赖」,核心就一个轻量包:
pip install smol-agent # 极简 Agent 框架
export OPENAI_API_KEY="sk-xxx" # 任意兼容 OpenAI 协议的 Key 都行
# 想更便宜?换成 DeepSeek:
export OPENAI_BASE_URL="https://api.deepseek.com/v1"
Step 2:写一个「瘦身版」System Prompt
重型框架的提示词动辄几千字。smol 只要说清「你是谁 + 该干嘛 + 红线」:
SYSTEM = """你是一个命令行文件整理助手。
任务:按扩展名把当前目录文件分类到子文件夹。
规则:只移动文件、不删除、不修改内容。
不确定时停止并询问。"""
这就是省 Token 的第一刀:把「你可能想…」「请注意…」这类啰嗦话全删了。30 字说清的事,别用 300 字。
Step 3:只注册「真用得上」的工具
重型框架默认塞几十个工具,smol 让你按需声明:
from smol import tool, Agent
@tool
def list_files(path: str) -> list:
"""列出目录下的文件"""
import os
return os.listdir(path)
@tool
def move_file(src: str, dst: str) -> str:
"""移动一个文件到目标路径"""
import shutil
shutil.move(src, dst)
return f"moved {src} -> {dst}"
# 只把这两个工具交给 Agent
agent = Agent(system=SYSTEM, tools=[list_files, move_file])
Step 4:跑通第一个轻量任务
直接给任务,观察 Token 消耗:
resp = agent.run("把当前目录的 .png 和 .jpg 移到 ./images/")
print(resp)
print("tokens used:", agent.last_usage.total_tokens)
Step 5:开启「按需加载工具」进一步瘦身
smol 支持把全部工具放进「工具箱」,但只在相关时才注入上下文:
agent = Agent(
system=SYSTEM,
tools=[list_files, move_file, send_email], # 全注册
lazy_tools=True # 只在模型请求时才展开工具描述
)
进阶技巧:lazy_tools=True 让不相关的工具描述根本不进上下文,进一步压低 Token。任务越杂、工具越多,省得越狠。
Step 6:用便宜模型跑简单步、贵模型跑难步
smol 不强制单模型,可在不同步骤换模型:
# 简单分类用便宜快模型
agent_cheap = Agent(model="deepseek-v4-flash", tools=[list_files, move_file])
# 需要推理的复杂整理用强模型
agent_smart = Agent(model="deepseek-v4-pro", tools=[list_files, move_file])
agent_cheap.run("先扫描并列出所有待整理文件")
agent_smart.run("根据列表制定分类方案并执行")
Step 7:接入 CLI,回归轻量工作流
最后把 smol Agent 包成一个可复用的 CLI,彻底脱离臃肿 IDE:
# cli.py
import sys
from smol import Agent
agent = Agent(system=SYSTEM, tools=[list_files, move_file])
if __name__ == "__main__":
task = " ".join(sys.argv[1:])
print(agent.run(task))
常见问题速查
| 现象 | 原因 & 解决 |
|---|---|
| Agent 不调用工具 | 工具函数的 docstring 写清楚用途,smol 靠它理解何时调用 |
| 还是烧很多 Token | 检查是否忘了 lazy_tools,或 System Prompt 没瘦身 |
| 换模型报错 | 确认 BASE_URL 与模型名匹配,且 Key 有该模型额度 |
| 复杂任务答不好 | 把难步拆出来用强模型,别全用最便宜的 |