ˈrevənjuː (企业、组织的)收入,收益;(政府的)税收;税务局,税务署(the revenue)
只说一句话 → AI 自动找工具 → 自动调用工具 → 自动给你最终结果
deferred tools
py
from openai.agents import Agent, tool_search_tool
from openai.agents.deferred import DeferredTool
# 1. 定义延迟工具(元数据,无完整Schema)
deferred_tools = [
DeferredTool(
namespace="enterprise",
name="query_monthly_sales",
description="Query monthly sales revenue by region",
tags=["database", "sales"],
schema_hash="sha256:a1b2c3..."
),
DeferredTool(
namespace="mcp_public",
name="generate_pdf_report",
description="Generate PDF report from data",
tags=["report", "pdf"],
schema_hash="sha256:d4e5f6..."
)
]
# 2. 创建 Agent,启用 Tool Search
agent = Agent(
model="gpt-6",
instructions="You are a business analyst assistant.",
tools=[
# 启用 Tool Search(托管模式),OpenAI = MCP Client,你的工具 = MCP Server
tool_search_tool(
namespaces=["enterprise", "mcp_public"], # 允许搜企业内部工具 + 公共 MCP 工具
limit=3,
execution="hosted" # 默认:OpenAI 执行搜索
)
],
deferred_tools=deferred_tools # 注册轻量元数据
)
# 3. 执行:自动搜索 → 加载 → 调用
async def main():
result = await agent.run(
"分析Q3华东区销售额并生成PDF报告"
)
print(result.final_output)
deferred_tools
这是工具元数据(轻量信息)
不包含:
- 工具的完整 JSON Schema
- 工具的实现代码
- 工具的调用地址
只包含:
- 名字
- 功能描述
- 标签
- 命名空间
- schema 哈希(用来后面按需加载)
作用:让 GPT 知道 "有哪些工具可以搜",但不占上下文空间
流程
① 用户说:分析 Q3 华东区销售额并生成 PDF 报告
② GPT-6 理解意图
我需要:
- 查询销售额
- 生成 PDF 报告
③ GPT-6 自动触发 Tool Search
模型内部发出搜索请求:
plaintext
query: ["查询华东区Q3销售额", "生成PDF报告"]
namespaces: ["enterprise", "mcp_public"]
④ OpenAI 搜索匹配到两个工具
query_monthly_sales
generate_pdf_report
⑤ OpenAI 按需加载工具完整 Schema
根据 schema_hash 加载真正的调用格式
⑥ OpenAI 服务器(MCP Client)调用你的工具
第一步:调用查询销售额
OpenAI → 你的MCP服务:query_monthly_sales(region=华东, quarter=Q3)
第二步:调用生成 PDF
OpenAI → 你的MCP服务:generate_pdf_report(数据=xxx)
⑦ GPT-6 整合结果 → 生成最终回答
⑧ 返回给你
- deferred_tools = 工具目录(不占上下文),不是工具本身,是工具索引
- tool_search_tool = 给 AI 装上 "搜工具" 能力,传统函数调用必须把所有工具 Schema 塞进上下文。Tool Search 只搜需要的&加载需要的
- execution="hosted" = OpenAI 直接调用你的 MCP
- OpenAI = MCP 客户端
- 你的服务 = MCP 服务端
- 调用路径:OpenAI → 你的公网 MCP