养虾小技巧:怎么省下50%的Token(词元)

如果你的 Agent / OpenClaw 每次都用大模型去“理解需求 + 生成代码 + 执行”,那你其实在为重复劳动付费
本文教你一招:把自然语言 Skill 一次性编译成 Python,后续直接执行,轻松省下 50%+ Token。


🚀 背景:为什么 Token 花得这么快?

在典型调用链中:


用户问题 → LLM理解 → 生成代码 → 执行 → 返回结果

比如一个简单需求:

👉 “查询今天沪深300股价”

你可能以为只是一个 API 调用,但实际上每次都在发生:

  1. LLM 解析“沪深300是什么”
  2. LLM 决定“调用哪个数据源”
  3. LLM 生成 Python 代码
  4. 执行代码

👉 问题:这些步骤每次都在重复!


🧠 核心思路:把 Skill “编译”成 Python

目标很简单:

第一次用 LLM,后面都不用了

🧩 架构升级前后对比

阶段 原始方案 优化方案
第1次调用 LLM生成代码 LLM生成 + 写入 Python
第2次调用 再次走LLM ✅ 直接执行 Python
Token消耗 降低50%+

🧪 实战案例:查询“今天沪深300股价”

我们用一个真实业务场景串起来:

📊 查询“今天沪深300指数价格”


🏗️ Step 1:定义自然语言 Skill

假设我们在 OpenClaw 中定义了一个 Skill:

name: get_hs300_price
description: 获取今天沪深300指数的价格

用户输入:

今天沪深300股价是多少?

⚙️ Step 2:首次执行 → 自动生成 Python

核心逻辑:
👉 如果 mx_data.py 不存在,就调用 LLM 生成

✨ Skill 执行器核心代码

import os
from pathlib import Path

SKILL_FILE = Path("mx_data.py")

def run_skill(query: str):
    if not SKILL_FILE.exists():
        print("首次执行:调用LLM生成Python代码...")
        code = generate_code_from_llm(query)
        SKILL_FILE.write_text(code)
    
    # 后续直接执行
    import mx_data
    return mx_data.run(query)

🤖 Step 3:LLM 生成 Python 代码(一次性)

假设 LLM 生成如下代码:

# mx_data.py

import requests

def run(query: str):
    url = "https://api.example.com/hs300"
    resp = requests.get(url).json()
    return resp["price"]

👉 关键点:

  • 只生成一次
  • 后续复用
  • Token 不再重复消耗

🔁 Step 4:第二次调用(零推理)

用户再次问:

今天沪深300股价是多少?

执行路径变成:

用户问题 → 直接调用 mx_data.py → 返回结果

👉 完全绕过 LLM!


🧪 Step 5:结合测试体系验证

你之前已经有 pytest 结构,可以直接扩展:

def test_hs300_price():
    result = run_skill("今天沪深300股价是多少")
    assert result is not None

🧱 进阶设计:Skill 编译缓存机制

为了更健壮,建议增加:

1️⃣ 哈希缓存(防重复生成)

import hashlib

def get_cache_key(query: str):
    return hashlib.md5(query.encode()).hexdigest()

2️⃣ 多 Skill 文件隔离

skills/
  ├── hs300.py
  ├── stock_query.py
  └── weather.py

3️⃣ 自动更新机制(可选)

当描述变化时重新生成:

if skill_version_changed():
    regenerate_code()

📉 实测效果:Token 节省情况

场景 Token 消耗
每次都调用 LLM 100%
编译一次后复用 ≈ 40% - 50%

👉 在高频调用场景(如行情查询)下,效果非常明显


⚠️ 注意事项

❗1. 代码安全

LLM 生成代码要限制:

# 禁止危险操作
exec(code, {"__builtins__": {}})

❗2. 可观测性

建议打印:

print("使用缓存Skill执行")

❗3. 数据源稳定性

比如沪深300数据源:

  • Tushare
  • AkShare
  • 自建API

🧩 总结

一句话总结:把“推理”变成“执行”

✔ 第一次:LLM → Python
✔ 后续:Python → 结果
✔ 收益:节省 50%+ Token + 提升速度


🎯 最终落地建议

  1. 所有 Skill 增加“编译缓存层”
  2. 高频调用优先改造(如行情、天气)
  3. 建立 Skill 版本控制机制
  4. 用测试保证稳定性

如果你在做 Agent / OpenClaw,这一招几乎是“必做优化”。
不然你会一直在为“重复思考”付费。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐