实战 📋 7 个步骤 第 219 / 446 篇

用 smol 极简 Agent 框架把 Token 成本砍到 1/30:轻量 Agent 实战

2026 年评测显示,极简 Agent 框架 smol 执行同类任务只烧 17 万 Token,而重型框架烧 500 万,差距 30 倍。本教程手把手教你用 smol 写一个最小可用 Agent,并通过精简 System Prompt 夺回对成本和模型行为的控制权。

2026.08.02· 21 分钟阅读· 约 1327 字· 🪶 smol / 💡 轻量 Agent

你的 Agent 是不是越用越烧钱?2026 年的评测揭示了一个惊人事实:执行同类任务,极简 Agent 框架 smol 只消耗 17 万 Token,而把系统提示词和工具集硬塞进去的重型框架烧掉 500 万——差距高达 30 倍。这种「Token 通胀」大多源于框架强行注入的复杂 System Prompt 和冗余工具。本教程手把手教你用 smol 写一个最小可用 Agent,并通过精简提示词夺回对成本和模型行为的控制权。

🪶 本教程适合:被 Agent 账单吓到、又不想被重型框架绑架的开发者。你会用到 Python 和任意一家兼容 OpenAI 协议的模型 API。

先搞懂:为什么「重」=「贵」?

用一句话理解:框架每往上下文里多塞一句系统提示、多注册一个用不上的工具,你每次对话都在为这些「脂肪」买单。

框架风格每次请求注入同类任务 Token
重型集成 IDE几千字系统提示 + 几十个工具定义≈ 500 万
轻量 CLI(smol)几十字核心指令 + 按需工具≈ 17 万

核心结论:当 Agent 框架越重,你的开发成本越不可控。老练的开发者正在从臃肿 IDE 回归轻量 CLI / Neovim,用精简 System Prompt 夺回控制权。

Step 1:装好 smol 与模型 Key

1 最小依赖起步

smol 的理念是「能不依赖就不依赖」,核心就一个轻量包:

pip install smol-agent        # 极简 Agent 框架
export OPENAI_API_KEY="sk-xxx" # 任意兼容 OpenAI 协议的 Key 都行
# 想更便宜?换成 DeepSeek:
export OPENAI_BASE_URL="https://api.deepseek.com/v1"
💡 关键认知:smol 不绑定任何一家模型。把 BASE_URL 指到 DeepSeek / GLM / Qwen,就能用便宜模型跑同样的代码。

Step 2:写一个「瘦身版」System Prompt

2 删掉所有废话

重型框架的提示词动辄几千字。smol 只要说清「你是谁 + 该干嘛 + 红线」:

SYSTEM = """你是一个命令行文件整理助手。
任务:按扩展名把当前目录文件分类到子文件夹。
规则:只移动文件、不删除、不修改内容。
不确定时停止并询问。"""

这就是省 Token 的第一刀:把「你可能想…」「请注意…」这类啰嗦话全删了。30 字说清的事,别用 300 字。

Step 3:只注册「真用得上」的工具

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:跑通第一个轻量任务

4 看它怎么省

直接给任务,观察 Token 消耗:

resp = agent.run("把当前目录的 .png 和 .jpg 移到 ./images/")
print(resp)
print("tokens used:", agent.last_usage.total_tokens)
🚀 你会发现:同样的「整理文件」任务,smol 的 total_tokens 可能只有重型框架的几十分之一——因为 System Prompt 短、工具少。

Step 5:开启「按需加载工具」进一步瘦身

5 让工具「用时才出现」

smol 支持把全部工具放进「工具箱」,但只在相关时才注入上下文:

agent = Agent(
    system=SYSTEM,
    tools=[list_files, move_file, send_email],  # 全注册
    lazy_tools=True   # 只在模型请求时才展开工具描述
)

进阶技巧:lazy_tools=True 让不相关的工具描述根本不进上下文,进一步压低 Token。任务越杂、工具越多,省得越狠。

Step 6:用便宜模型跑简单步、贵模型跑难步

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("根据列表制定分类方案并执行")
💰 配合本中心《DeepSeek V4 分层路由降本》教程,把「贵模型做难活、便宜模型做简单活」贯彻到底,成本还能再砍一大截。

Step 7:接入 CLI,回归轻量工作流

7 把 Agent 变成命令行工具

最后把 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))
🎉 恭喜!你已经掌握了 2026 年 Agent 开发的核心心法——「越轻越省、越瘦越可控」。在 Token 就是真金白银的时代,精简就是最高级的优雅。

常见问题速查

现象原因 & 解决
Agent 不调用工具工具函数的 docstring 写清楚用途,smol 靠它理解何时调用
还是烧很多 Token检查是否忘了 lazy_tools,或 System Prompt 没瘦身
换模型报错确认 BASE_URL 与模型名匹配,且 Key 有该模型额度
复杂任务答不好把难步拆出来用强模型,别全用最便宜的
← 返回教程中心