如何在15分钟内为人工智能代理构建延迟工具加载

发布日期:2026-05-01 10:33:31   浏览量 :2
发布日期:2026-05-01 10:33:31  
2

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

您的智能体拥有 40 个工具。每个工具的定义——名称、描述、JSON 模式参数——大约消耗 200 个令牌。这意味着在智能体执行任何操作之前,就已经消耗了 8,000 个令牌。如果再加上几个模型上下文协议(MCP)服务器,每次请求仅工具定义就会消耗高达 55,000 个令牌。

行业术语称这种现象为“令牌膨胀”。解决方案是延迟加载工具:初始仅加载一个小型搜索工具,仅在智能体需要时加载特定工具,并在使用完毕后卸载它们。

本教程将向您展示如何实现这一方案。只需一个文件,代码可直接运行,且无需依赖任何框架。

问题所在

# 大多数教程的做法:
agent = Agent(tools=[tool_1, tool_2, tool_3, ..., tool_40])
# 每次调用大语言模型时,提示词中都会包含全部 40 个工具的定义。
# 成本:仅工具模式就每次调用消耗约 8,000 个令牌。

当您全天候运行自主智能体时,这种开销会迅速累积。一个每天调用 100 次的智能体,仅因描述那些从未使用过的工具,每天就会额外消耗 800,000 个令牌。

解决方案:先搜索后加载

不要预先加载所有工具,而是只给智能体提供一个工具:工具搜索。当智能体需要某种能力时,它会搜索合适的工具,系统随后加载该工具,智能体则利用新可用的工具重新执行任务。

用户:“查找 nebula-web 上的最新拉取请求并更新变更日志”

第 1 轮:智能体仅拥有 `search_tools(query)`。它执行搜索。
第 2 轮:系统加载 `get_pr()` 和 `update_changelog()`。
         智能体现在拥有 2 个工具。调用它们。
第 3 轮:智能体返回结果。

虽然从一轮交互变成了三轮,但令牌节省效果显著:搜索工具的定义仅消耗约 400 个令牌,而全部 40 个工具则需消耗约 8,000 个令牌。

步骤 1:构建工具注册表

首先,创建一个注册表,用于存储所有可用工具,但在任何时刻仅暴露其中的一个子集。

from dataclasses import dataclass, field
from typing import Callable, Any

@dataclass
class Tool:
    name: str
    description: str
    parameters: dict  # JSON 模式
    fn: Callable
    category: str = "general"  # 用于搜索过滤

class DeferredToolRegistry:
    def __init__

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部