跳转到内容

成本优化

LLM 是 Agent 业务的最大成本。本页 6 个套路把成本降到原来的 1/3-1/10 而不损失太多质量。

套路 1:按任务路由模型

import { llm as openai, llm as anthropic, llm as haiku } from "./llm";
async function smartComplete(task: string, messages: any[]): Promise<string> {
// 简单分类 / 摘要 → cheap model
if (task === "classify" || task === "summarize_short") {
return haiku.complete(messages); // Claude Haiku 4.5
}
// 推理 / 长上下文 → strong model
if (task === "reason" || task === "code") {
return anthropic.complete(messages); // Claude Sonnet 4.6
}
// 默认 cheap
return openai.complete(messages, { model: "gpt-4o-mini" });
}

节省:把简单任务(80% volume)切到 cheap model → 总成本降 60-80%。

套路 2:Prompt 缓存(Anthropic / OpenAI 都已支持)

固定的 system prompt + 知识库放在请求开头标记 cache_control — provider 自动 cache,下次调用同 prefix 时 90% 折扣。

const messages = [
{
role: "system",
content: [
{
type: "text",
text: KNOWLEDGE_BASE, // 50KB 知识库
cache_control: { type: "ephemeral" }, // ← 标缓存
},
],
},
{ role: "user", content: question },
];

节省:高频问答场景(每用户每天 100 次同 system)→ 90% input token 折扣。

套路 3:用 Batch API 做异步任务

OpenAI Batch API + Anthropic Message Batches 都是 50% 折扣 + 24h 完成。

// 当晚生成所有用户的"明日推送"时,用 batch 提交,明早处理
const batch = await openai.batches.create({
input_file_id: uploadedJsonl,
endpoint: "/v1/chat/completions",
completion_window: "24h",
});

适合:非实时任务(每日报告 / 离线分析 / 训练数据生成)。

套路 4:Token budgeting

import { encoding_for_model } from "tiktoken";
const enc = encoding_for_model("gpt-4o-mini");
function fitToBudget(messages: any[], budget: number): any[] {
let total = 0;
const kept: any[] = [];
// system 不能砍
kept.push(messages[0]);
total += enc.encode(messages[0].content).length;
// 历史从最新往回加
for (let i = messages.length - 1; i >= 1; i--) {
const cost = enc.encode(messages[i].content).length;
if (total + cost > budget) break;
kept.unshift(messages[i]);
total += cost;
}
return kept;
}
// 用法:限制 input 在 4000 token 内
const fitted = fitToBudget(allMessages, 4000);
const reply = await openai.chat.completions.create({ model: "gpt-4o-mini", messages: fitted });

套路 5:summarize-and-prune 长对话

Agent 记忆设计 方案 C — 把 20+ 轮 对话摘要成 800 字段,input 从 10k token 降到 1k token。

套路 6:缓存确定性回复

import { createHash } from "node:crypto";
import { Pool } from "pg";
const db = new Pool({ connectionString: process.env.DATABASE_URL });
async function cachedComplete(question: string): Promise<string> {
const hash = createHash("sha256").update(question.toLowerCase().trim()).digest("hex");
const cached = await db.query(
"SELECT reply FROM llm_cache WHERE prompt_hash = $1 AND created_at > NOW() - INTERVAL '7 days'",
[hash],
);
if (cached.rows.length > 0) return cached.rows[0].reply;
const reply = await openai.complete([/* ... */]);
await db.query(
"INSERT INTO llm_cache (prompt_hash, prompt, reply, created_at) VALUES ($1, $2, $3, NOW()) ON CONFLICT DO NOTHING",
[hash, question, reply],
);
return reply;
}

适合:常见 FAQ;不适合个性化对话。

真实数字(参考)

优化BeforeAfter节省
模型路由(简单任务用 mini)$1000/月$200/月80%
Prompt 缓存(高频系统 prompt)$500/月$50/月90% (cache hits)
Batch API(非实时任务)$300/月$150/月50%
Token budgeting$400/月$250/月38%
摘要式记忆$600/月$200/月67%
FAQ 缓存(70% hit rate)$400/月$120/月70%

监控成本

agent.addMessageHandler(async (msg) => {
const start = Date.now();
const reply = await openai.complete([/* ... */]);
const latency = Date.now() - start;
// 算 token + 成本(按当前价目)
const inputTokens = countTokens(messages);
const outputTokens = countTokens(reply);
const inputCost = (inputTokens / 1_000_000) * 0.15;
const outputCost = (outputTokens / 1_000_000) * 0.60;
await db.query(
`INSERT INTO llm_calls (user_id, model, input_tokens, output_tokens, cost_usd, latency_ms, ts)
VALUES ($1, $2, $3, $4, $5, $6, NOW())`,
[msg.sender_id, "gpt-4o-mini", inputTokens, outputTokens, inputCost + outputCost, latency],
);
});

每天 / 每用户 / 每模型成本能精确归因。

相关页面