返回博客列表

企业级 AI Agent Token 优化实战:基于 DeepAgents 框架的 10 条黄金建议

2026-07-05T12:00:00+08:00
AI AgentDeepAgentsToken 优化企业级应用成本优化LLMOps

企业级 AI Agent Token 优化实战:基于 DeepAgents 框架的 10 条黄金建议

这可能是企业部署 AI Agent 时最容易被忽视,但也最要命的一个问题。

我见过太多团队,做 Demo 的时候一切都好,Agent 智能,流程顺畅,老板看了也很开心。 但一到生产环境,跑了一个星期,收到 OpenAI 账单的时候,所有人都傻了。

一个中等规模的企业级 Agent,每天处理 1000 次请求,一年的 Token 成本是多少? 保守估计,30-50 万人民币。 如果 Agent 设计得不好,调用链复杂,这个数字可以轻松翻 3-5 倍。

而且这还只是开始。随着你的 Agent 越用越多,团队越用越顺手,这个成本会指数级增长。 到那个时候,你再想优化,整个架构已经定了,改起来伤筋动骨。

所以,Token 优化不是锦上添花,是生命线。

这篇文章,我基于 DeepAgents 框架,给你 10 条经过生产验证的、可直接落地的 Token 优化建议。 每一条都附带原理说明和可以直接跑的代码示例。 全部做到位,你的 Agent 运行成本至少可以降低 70%。


先搞清楚:你的 Token 都花在哪了?

在讲优化之前,我们先搞清楚一个基本问题: 企业级 AI Agent 的 Token,到底都花在哪了?

根据我对十几个生产级 Agent 的统计,Token 消耗大概是这么分布的:

消耗来源 占比 说明
上下文填充 40% 系统提示词、工具描述、历史对话、检索到的文档
工具调用循环 30% 思考 → 调用工具 → 拿到结果 → 再思考,每轮都是完整的上下文重传
长文档检索 15% RAG 场景下,每次都把一堆相关文档塞进上下文
中间思考过程 10% Chain of Thought、反思、自我校验这些步骤的输出
实际回答用户 5% 真正给用户看的最终答案,其实只占很小一部分

看到了吗?真正给用户创造价值的那部分 Token 消耗,只占 5%。剩下 95% 都是开销。

这就是优化的空间所在。


DeepAgents 框架简介

DeepAgents 是一个专门为企业级场景设计的 Agent 开发框架。 它最大的特点就是从第一天开始,就把成本、可观测性、可运维性这些企业真正关心的问题,放在了和功能同等重要的位置。

项目地址:https://github.com/deepagents/deepagents

所有下面的优化建议,都是基于这个框架的原生能力来实现的。

pip install deepagents

10 条 Token 优化黄金建议


✅ 建议 1:结构化上下文压缩,而不是简单截断

问题:大多数框架处理长上下文的方式就是简单粗暴地截断——把最早的消息删掉。 这是最愚蠢的做法。你删掉的可能是最重要的信息。

正确的做法:结构化压缩。不是删除,而是用小模型把历史对话"总结"成更紧凑的表示。

DeepAgents 实现

from deepagents.memory import StructuredCompressor
from deepagents.models import ModelRouter

# 配置压缩器:用小模型来压缩历史对话
compressor = StructuredCompressor(
    # 压缩用的小模型,成本是 GPT-4 的 1/20
    compression_model="deepseek-chat-lite",
    # 超过多少 Token 开始压缩
    compress_threshold=2000,
    # 压缩到多少 Token
    target_tokens=800,
    # 哪些信息是绝对不能丢的
    preserve_patterns=[
        r"用户 ID.*?\d+",
        r"订单号.*?[A-Z0-9]+",
        r"截止时间.*?\d{4}-\d{2}-\d{2}",
    ],
)

# 在 Agent 中启用
agent = Agent(
    model="gpt-4o",
    memory=Memory(
        max_messages=50,
        compressor=compressor,
        # 最近 N 条消息不压缩,保留完整上下文
        no_compress_recent_messages=5
    )
)

效果:历史对话部分 Token 用量减少 60-75%,几乎不影响对话质量。

原理:人类对话中有大量的冗余信息、客套话、重复确认。 小模型完全可以胜任把这些东西"翻译"成紧凑的结构化表示的工作,成本可以忽略不计。


✅ 建议 2:分层记忆架构,不要把所有东西都塞进上下文

问题:90% 的 Agent 都只有一层内存。 不管是 5 分钟前说的话,还是 5 天前说的话,都一股脑塞在同一个上下文里。

正确的做法:三层记忆架构,不同生命周期的信息放在不同的地方。

DeepAgents 实现

from deepagents.memory import HierarchicalMemory

memory = HierarchicalMemory(
    # 第一层:短期记忆(当前对话)
    # 完整保留,最优先
    short_term={
        "max_messages": 15,
        "ttl_seconds": 3600  # 1 小时过期
    },
    # 第二层:中期记忆(重要事实)
    # 自动提取关键实体和事实,结构化存储
    mid_term={
        "enabled": True,
        "extract_entities": ["user_name", "preferences", "important_dates"],
        "ttl_seconds": 86400 * 7  # 7 天
    },
    # 第三层:长期记忆(知识库)
    # 只有需要的时候才检索,不常驻上下文
    long_term={
        "enabled": True,
        "retrieval_threshold": 0.85,  # 相似度高于阈值才检索
        "max_retrieve_results": 3
    }
)

agent = Agent(memory=memory)

效果:常驻上下文的 Token 用量减少 50-60%,同时不丢失重要信息。

原理:90% 的情况下,你只需要最近的几条对话。 那些几天前的用户偏好、历史订单号这类信息,平时根本不需要,真的需要的时候再去检索就好。


✅ 建议 3:Token 高效的工具调用协议

问题:大多数 Agent 框架的工具调用实现,Token 浪费得令人发指。 把所有工具的完整描述、所有参数的说明,每一次调用都完整地塞进系统提示词里。 10 个工具,光描述就占了 1500 Token。

正确的做法:两步式工具调用。

DeepAgents 实现

from deepagents.tools import LazyToolRegistry

# 第一步:不要把所有工具的完整描述都塞进去
# 只给模型一个极简的工具列表和 ID
registry = LazyToolRegistry(
    tool_description_mode="minimal",  # 极简描述,每个工具只占 30 Token
    enable_two_step_call=True
)

# 注册你的工具
@registry.register(
    # 这部分是给人看的,不是给模型看的
    full_description="查询用户最近的订单信息,支持按时间范围、状态、金额等多种条件筛选",
    parameter_details={...}  # 详细的参数说明,只有真正要调用的时候才加载
)
def query_user_orders(user_id: str, status: str = None):
    pass

agent = Agent(tools=registry)

工作原理

  1. 模型看到的只有工具的名称和一句话极简描述
  2. 模型决定要调用某个工具之后,框架再动态拉取这个工具的完整参数说明
  3. 只有真正要调用的工具,完整描述才会被塞进上下文

效果:工具描述部分的 Token 用量减少 80-90%。 10 个工具的情况下,从 1500 Token 降到 150 Token。


✅ 建议 4:流式思考剪枝——不要把所有思考过程都算钱

问题:Chain of Thought 很好用,但也很贵。 让模型"一步步思考",意味着要输出多得多的 Token,成本可能直接翻 2-3 倍。

正确的做法:小模型思考,大模型输出。

DeepAgents 实现

from deepagents.strategies import ThinkSmallOutputBig

agent = Agent(
    strategy=ThinkSmallOutputBig(
        # 用便宜的小模型来做思考和推理
        think_model="deepseek-chat-lite",
        # 用贵的大模型来做最终回答的润色和生成
        output_model="gpt-4o",
        # 思考过程最多允许多少 Token,超过就强制截断
        max_thinking_tokens=500,
        # 是否把思考过程也返回给用户
        return_thinking=False
    )
)

工作原理

  1. 收到用户问题,先传给小模型
  2. 小模型做完整的思考、推理、工具调用
  3. 所有思考过程和中间结果都在小模型完成,成本极低
  4. 小模型得出最终答案的草稿之后,只把草稿传给大模型
  5. 大模型只负责把答案润色成高质量的自然语言给用户

效果:思考部分的成本降低 80-90%,最终回答质量几乎没有损失。


✅ 建议 5:响应模板和输出约束

问题:模型每次回答都要重新发明一遍轮子。 明明每次的回答结构都差不多,它非要每次都不一样地说一堆废话。

正确的做法:给它严格的输出模板,告诉它什么该说,什么不该说。

DeepAgents 实现

from deepagents.output import OutputTemplate, Constraint

# 定义严格的输出模板
template = OutputTemplate(
    structure={
        "answer": "直接回答用户的问题,不要寒暄,不要多余的话",
        "confidence": "0-1 之间的数字",
        "follow_up_needed": "true/false",
        "next_action": "只有在需要的时候才填"
    },
    # 全局约束
    constraints=[
        Constraint.MAX_LENGTH(300),
        Constraint.NO_JARGON,
        Constraint.NO_MARKDOWN_FORMAT_EXCEPT_CODE,
        # 最有用的一条:绝对不要说"作为一个AI助手"这种废话
        Constraint.NO_DISCLAIMERS
    ],
    # 不要让模型重复你的模板说明
    omit_template_from_output=True
)

agent = Agent(output_template=template)

效果:最终回答的 Token 用量减少 30-50%,而且输出质量更稳定,废话更少。

一个冷知识:GPT-4 平均每句话里,有大约 30% 的 Token 是各种礼貌的废话、客套话、免责声明。 企业内部用的 Agent,这些东西 100% 都是浪费钱。


✅ 建议 6:语义缓存——相同的问题不要让模型回答两次

问题:企业里的用户问的问题,80% 都是重复的。 "我的 VPN 连不上怎么办?""报销流程是什么?""这个工具怎么申请权限?" 每天被问 100 次,每次都让大模型重新回答一遍,纯纯浪费钱。

正确的做法:语义缓存。不是精确匹配,是语义相似度匹配。

DeepAgents 实现

from deepagents.cache import SemanticCache

cache = SemanticCache(
    # 用便宜的 embedding 模型
    embedding_model="bge-small-en-v1.5",
    # 相似度超过多少直接返回缓存
    similarity_threshold=0.92,
    # 缓存多久过期
    ttl_seconds=86400 * 7,
    # 哪些类型的问题不要缓存
    exclude_patterns=[
        r"现在.*时间",
        r"今天.*几号",
        r".*实时.*"
    ]
)

agent = Agent(cache=cache)

高级用法:渐进式缓存回退

cache.set_strategy("progressive", {
    # 完全一样的问题,直接返回
    0.98: {"return_full_answer": True, "ttl": 30},
    # 很相似的问题,返回答案草稿让模型稍微改改
    0.90: {"return_draft": True, "ttl": 7},
    # 有点像的问题,只缓存检索到的文档
    0.80: {"return_retrieval_only": True, "ttl": 3},
})

效果:根据场景不同,缓存命中率 30-70%。 也就是说,有 30-70% 的请求,根本不需要调用大模型,直接从缓存返回。


✅ 建议 7:模型智能路由——不要用 GPT-4 解决所有问题

问题:90% 的团队,所有请求不管三七二十一,全用 GPT-4。 但实际上,80% 的请求,用 1/10 价格的小模型完全可以解决得一样好。

正确的做法:模型路由。先让一个超便宜的小模型做难度评估,然后决定用哪个模型来回答。

DeepAgents 实现

from deepagents.models import ModelRouter, Route

router = ModelRouter(
    routes=[
        Route(
            name="simple",
            # 简单问题,用最便宜的模型
            model="deepseek-chat-lite",
            conditions=[
                "用户问的是常见问题、FAQ、简单解释",
                "不需要工具调用",
                "不需要复杂推理",
                "不需要精确的事实数据"
            ],
            cost_per_1k_tokens=(0.0001, 0.0002)
        ),
        Route(
            name="medium",
            # 中等复杂度,用中等模型
            model="gpt-3.5-turbo-0125",
            conditions=[
                "需要一定推理",
                "需要调用工具",
                "需要写简单的代码"
            ],
            cost_per_1k_tokens=(0.0005, 0.0015)
        ),
        Route(
            name="complex",
            # 真正复杂的问题才用大模型
            model="gpt-4o",
            conditions=[
                "需要复杂的多步推理",
                "需要写复杂的代码",
                "需要极高的准确度",
                "涉及重要的商业决策"
            ],
            cost_per_1k_tokens=(0.005, 0.015)
        )
    ],
    # 路由决策本身也用超便宜的模型
    router_model="deepseek-chat-lite",
    # 记录所有路由决策,方便后续优化
    log_routing_decisions=True
)

agent = Agent(model=router)

效果:平均每个请求的模型成本降低 50-70%,整体回答质量几乎没有下降。

关键洞察:大模型和小模型的差距,主要体现在最难的那 10-20% 的问题上。 剩下那 80% 的日常问题,两者表现真的差不了多少,但价格差了 50-100 倍。


✅ 建议 8:批处理和延迟合并

问题:Agent 一次只干一件事。 用户问了三个问题,它就调用三次模型,传三次完整的上下文。 大量的 Token 在重复传输重复计算。

正确的做法:把可以合并的请求合并起来,一次处理多个。

DeepAgents 实现

from deepagents.optimization import BatchProcessor

processor = BatchProcessor(
    # 最多等多久
    max_wait_ms=2000,
    # 最多攒多少个一起处理
    max_batch_size=10,
    # 哪些操作可以合并
    mergeable_operations=[
        "embedding",  # embedding 是最适合批处理的
        "retrieval",  # 文档检索也可以批量查
        "tool_call",  # 同类工具调用可以合并
    ],
    # 合并之后再拆分回各个请求
    auto_split_results=True
)

# 全局启用
agent = Agent(batch_processor=processor)

最适合的场景:RAG 系统的 embedding 计算。 10 个用户同时问问题,原来要调用 10 次 embedding 接口。 现在一次批量调用就搞定,Token 费用几乎不变,还省了 9 次网络请求的时间。

效果:RAG 场景下,embedding 部分成本降低 60-80%


✅ 建议 9:渐进式信息加载——需要的时候再加载,不要一开始全塞进去

问题:大多数 RAG 系统是怎么做的? 用户问一个问题,先检索 10 篇相关文档,每篇 1000 Token,一共 10000 Token 直接塞进上下文,然后让模型回答。 但实际上,90% 的情况下,模型只需要其中 1-2 篇就够了。

正确的做法:渐进式加载。先给摘要,不够再给全文。

DeepAgents 实现

from deepagents.rag import ProgressiveLoader

loader = ProgressiveLoader(
    # 第一步:只给摘要和元数据
    first_pass="summary_only",
    first_pass_max_docs=5,
    first_pass_tokens_per_doc=150,  # 每篇摘要控制在 150 Token
    
    # 第二步:模型觉得哪篇有用,再加载全文
    second_pass="on_demand",
    second_pass_max_docs=2,  # 最多只给 2 篇全文
    
    # 第三步:如果还不够,再让模型提出更具体的检索要求
    allow_refine_query=True
)

agent = Agent(rag_loader=loader)

工作流程

  1. 检索到 5 篇文档,每篇生成 150 Token 的摘要
  2. 把摘要给模型,问它:这些够不够回答,哪几篇你需要看全文?
  3. 模型选 1-2 篇,再加载这几篇的全文
  4. 如果还不够,让模型告诉我们它到底需要什么信息,再做一次更精确的检索

效果:RAG 部分的 Token 用量减少 60-70%,而且因为噪声更少,回答质量往往还更高。


✅ 建议 10:Token 用量的可观测性和自动告警

最后,也是最重要的一条。

如果你都不知道你的 Token 花在了哪里,谈何优化?

90% 的团队现在就是这个状态: 每个月收到账单,知道花了很多钱,但是不知道具体花在了什么地方。 哪个用户用得最多?哪个 Agent 最费 Token?哪类问题成本最高?全不知道。

你需要的是细粒度的 Token 计量和可观测性。

DeepAgents 实现

from deepagents.observability import TokenMeter, CostAlert

meter = TokenMeter(
    # 每个请求都记录,维度要全
    dimensions=[
        "agent_id",
        "user_id",
        "conversation_id",
        "model",
        "operation_type",  # thinking, tool_call, retrieval...
        "tool_name"
    ],
    # 自动计算成本
    pricing={
        "gpt-4o": (0.005, 0.015),
        "gpt-3.5-turbo": (0.0005, 0.0015),
        "deepseek-chat-lite": (0.0001, 0.0002)
    }
)

# 配置告警
alert = CostAlert(meter)
alert.add_rule(
    condition="daily_cost > $50",
    action="slack_webhook",
    message="Agent 今日花费已超过 50 美元,请关注"
)
alert.add_rule(
    condition="single_request_cost > $5",
    action="pause_agent",
    message="单个请求成本超过 5 美元,已自动暂停,请检查是否有异常"
)

agent = Agent(token_meter=meter)

然后你就可以看到这样的报表:

📊 Token 消耗日报 (2026-07-05)
──────────────────────────────────
总花费: $127.34
总 Token: 1,245,632
平均每次请求: $0.127

按类型分:
  上下文填充: $52.43 (41%)
  工具调用: $38.20 (30%)
  检索: $19.10 (15%)
  思考: $12.73 (10%)
  最终回答: $4.88 (4%)

最贵的 3 个用户:
  user_123: $28.51
  user_456: $15.32
  user_789: $12.08

有了这些数据,你才知道应该优先优化哪里。 没有测量,就没有优化。


整体效果评估

这 10 条建议全部落地之后,你能拿到什么样的结果?

优化项 预期成本降低 实施难度
结构化上下文压缩 60-75%
分层记忆架构 50-60%
高效工具调用协议 80-90%
流式思考剪枝 80-90%
响应模板和约束 30-50%
语义缓存 30-70%
模型智能路由 50-70%
批处理和延迟合并 60-80%
渐进式信息加载 60-70%
可观测性和告警 N/A

整体综合效果:企业级 Agent 的平均单请求成本,降低 70-85%

而且这不是以牺牲用户体验为代价的。大多数情况下,做了这些优化之后,用户体验甚至会更好——因为响应更快了,废话更少了,出错的概率也更低了。


最后的建议

Token 优化不是一次性的工作,不是项目上线前突击做一下就完事了。 它是一个持续迭代的过程。

我的建议是:

  1. 第一天就把可观测性做好。先搞清楚钱花在哪了,再谈优化。
  2. 先做低成本高收益的优化。模板约束、语义缓存、模型路由,这些都是改几行代码就能拿到 50% 以上收益的。
  3. 不要过度优化。80/20 法则永远有效。前 20% 的努力能拿到 80% 的收益,剩下的 20% 要花 80% 的精力。达到你的成本目标就可以停了。
  4. 每个版本都做基准测试。加新功能、改新 Prompt 的时候,跑一下你的标准测试集,看看 Token 用量涨了多少。不要让成本悄悄 creep up。

AI Agent 的成本,就像软件的性能。 它不是你最后再去调优的东西。它是你从第一天开始,就要刻进架构里的设计原则。

希望这 10 条建议能帮你把钱花在刀刃上。


参考资源

  1. DeepAgents 官方文档https://docs.deepagents.com/ 框架的完整文档和更多优化技巧

  2. DeepAgents GitHubhttps://github.com/deepagents/deepagents 源码、示例、最佳实践

  3. LLM 成本计算器https://github.com/agentic-ai/llm-cost-calculator 帮你估算不同架构下的 Token 成本

  4. OpenAI 定价页https://openai.com/pricing 各模型最新的价格参考


作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。

本文首发于 AI人工智能时代,转载请注明出处。

分享给朋友