OpenAI Agents SDK集成。
没有 Agents SDK 包,您不需要一个。用 @function_tool 装饰一个函数,调用真实的 blockchain0x 客户端,您的代理可以在 Base 上移动 USDC。
没有 OpenAI Agents SDK package,而且你也不需要。该 SDK 会用 将带装饰器的函数转换为工具,因此你只需把真实的 Python client 封装成函数并加入你的 。代理可以发送 USDC、结算 invoice、读取钱包 - 适用于单个代理、handoff 以及底层的 Responses API。支付在 Base 上结算。
OpenAI发布的最干净的工具调用表面。
OpenAI Agents SDK(2025年发布)是OpenAI推荐的在Responses API上构建代理的方式。它抽象了工具注册、消息循环和代理之间交接的样板代码,并生成干净、类型化的Python代码。如果您今天开始一个以OpenAI为中心的代理项目,并且没有框架偏好,这是我们推荐的SDK。
该食谱故意设计得很薄。send_usdc 是一个简单的函数,使用 @function_tool 装饰;您将其添加到代理的工具列表中,运行器会拾取它。没有特殊配置,没有额外的包装,没有 SDK 的分支。当 Agents SDK 发布新功能(多模态输入、语音代理)时,您的函数仍然可以工作,因为它依赖于标准的工具调用表面 - 其中没有特定于版本的内容。
安装Agents SDK和核心SDK。两个密钥。
没有可以添加的 blockchain0x Agents SDK 包。您安装 OpenAI Agents SDK(openai-agents 包,Python 3.10+)和真正的 blockchain0x 核心 SDK,然后编写下面的函数。这就是整个依赖列表。
pip install openai-agents blockchain0xexport OPENAI_API_KEY=sk-... export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
OPENAI_API_KEY 是你现有的 OpenAI key(Agents SDK 会将其用于底层的 Responses API)。BLOCKCHAIN0X_API_KEY 是你 dashboard 中的 sk_test_ testnet 或 sk_live_ mainnet key;client 会从环境变量读取它。如果你的 agent 也会收款,webhook handler 还需要 BLOCKCHAIN0X_WEBHOOK_SECRET。
一个支付的 @function_tool,交给代理。
以下是整个集成。send_usdc调用真实的blockchain0x客户端;@function_tool将其转变为工具,Runner协调调用。SDK读取类型提示和文档字符串以构建架构,因此请保持它们的准确性。运行它,代理在Base上移动USDC。
from agents import Agent, Runner, function_tool from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment @function_tool def send_usdc(agent_id: str, to: str, amount_wei: str) -> str: """Send a USDC payment from an agent wallet. amount_wei is USDC base units (6 decimals), so "10000" is 0.01 USDC. """ return str( blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei}) ) agent = Agent( name="treasurer", instructions="You pay vendor invoices in USDC within owner-set limits.", tools=[send_usdc], model="gpt-4o", ) result = await Runner.run( agent, input="Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.", ) print(result.final_output)
When the agent decides to pay, it calls send_usdc, the SDK submits the transfer, and you get a transaction hash back. amount_wei is base units, so 0.01 USDC is "10000". A sk_test_ key keeps it on Base Sepolia until you switch to sk_live_. Add more functions - read a wallet, settle an invoice - the same way; each is another @function_tool in the list.
通过签名的 webhook 确认入站支付。
如果您的代理还接收USDC,请通过Webhook确认,而不是轮询。验证助手包含在Node SDK中;在Python服务中,您手动验证文档中的HMAC,这就是助手所做的一切。下面是FastAPI示例;相同的代码适用于任何异步Python框架。
import hmac, hashlib, os, time from fastapi import FastAPI, Request, HTTPException app = FastAPI() SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") async def receive(request: Request): raw = await request.body() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p) t, v1 = parts.get("t", ts), parts.get("v1", sig) want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300: raise HTTPException(status_code=401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": await trigger_followup() # USDC landed - run the next step return {"ok": True}
该算法是针对字符串 t.rawBody 的 HMAC-SHA256,具有常量时间比较和 300 秒的重放窗口。通过 await request.body() 读取原始主体,绝不要 request.json() 重新序列化,因为这会更改签名覆盖的字节。已发布的事件是 payment.received、payment.sent、wallet.deployed 和 webhook.test。对于重的后续工作,排队一个作业(Celery、arq)并立即响应 200,而不是阻塞处理程序。
您正在包装的客户端是开放的。阅读它。
没有可供克隆的 Agents SDK starter package - 上面的 recipe 就是集成方式。blockchain0x SDKs 在 GitHub 上开源;这个 recipe 封装的是 Python SDK(blockchain0x-python),完整 method surface 见 docs。可以阅读它作为 function bodies 的参考。
github.com/tosh-labs/blockchain0x-python完整的 SDK method surface 和 scopes 已记录在 the docs 中。先使用 sk_test_ key 对接 Base Sepolia 进行测试,然后在 function 符合预期后切换到 sk_live_。
首次集成时需要关注的五件事。
这些来自我们的支持收件箱。提前知道它们每个都能节省一个小时。
没有 Agents SDK 包 - 您包装 SDK
Blockchain0x 为 LangChain 和 CrewAI 以及 MCP 服务器提供适配器;没有专门的 OpenAI Agents SDK 包。上面的配方是路径:用 @function_tool 装饰一个普通的类型化函数,在内部调用真实的 blockchain0x 客户端,并将其添加到 Agent(tools=[...])。SDK 读取签名和文档字符串以构建工具架构,因此请保持文档字符串的准确性。
Agents SDK不是Assistants API
OpenAI Agents SDK(openai-agents 包,导入为 agents)与旧的 Assistants API 是不同的产品。该食谱针对 Agents SDK:代理 + 运行器 + @function_tool 通过响应 API。如果您正在调用 client.beta.assistants.create(...),您处于 OpenAI 正在逐步淘汰的旧线程/运行模型 - 转到 Agents SDK,以上函数直接插入。
金额是USDC基本单位,以字符串形式表示
payments.create takes amountWei: a string of USDC base units, not a float. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the function argument as str; a float will lose precision before it reaches the API. Keep it a string end to end.
send_payment 可能会提前返回 503
payments.create 默认不重试,并且在链适配器连接到您的网络之前可能返回 503。在您的函数内部捕获错误并返回模型可以采取的清晰消息,而不是让 Runner 循环。自动铸造的幂等性密钥意味着手动重试不会重复支付。
仅异步运行时
代理 SDK 是异步优先的 - await Runner.run(...)。您工具中的 blockchain0x 调用是同步的,这对于单个快速支付是可以的,但在负载下会阻塞循环。如果您正在运行多个并发代理,请使用 asyncio.to_thread 包装 SDK 调用。从同步入口点,asyncio.run() 在顶层。