OpenAI ಏಜೆಂಟ್ಗಳ SDK ಸಮೀಕರಣ.
ಎಜೆಂಟ್ಗಳಿಗೆ SDK ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಒಂದು ಅಗತ್ಯವಿಲ್ಲ. @function_tool ಬಳಸಿ ಕಾರ್ಯವನ್ನು ಅಲಂಕರಿಸಿ, ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಕರೆ ಮಾಡಿ, ಮತ್ತು ನಿಮ್ಮ ಏಜೆಂಟ್ USDC ಅನ್ನು Base ನಲ್ಲಿ ಚಲಾಯಿಸಬಹುದು.
OpenAI Agents SDK package ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಅದು ಬೇಕಾಗಿಲ್ಲ. SDK ಒಂದು decorated function ಅನ್ನು ಮೂಲಕ tool ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ನೀವು ನಿಜವಾದ Python client ಅನ್ನು function ನಲ್ಲಿ wrap ಮಾಡಿ ನಿಮ್ಮ ಗೆ ಸೇರಿಸುತ್ತೀರಿ. agent USDC ಕಳುಹಿಸಬಹುದು, invoices settle ಮಾಡಬಹುದು, ಮತ್ತು wallets ಓದಬಹುದು - single agents, handoffs, ಮತ್ತು underlying Responses API across. Payments Base ನಲ್ಲಿ settle ಆಗುತ್ತವೆ.
OpenAI ಕಳುಹಿಸುವ ಅತ್ಯಂತ ಶುದ್ಧ ಸಾಧನ-ಕೋಲಿಂಗ್ ಮೇಲ್ಮಟ್ಟ.
OpenAI ಏಜೆಂಟ್ಗಳ SDK (2025 ರಲ್ಲಿ ಬಿಡುಗಡೆಗೊಂಡ) OpenAI ನ ಶಿಫಾರಸು ಮಾಡಿದ ಮಾರ್ಗವಾಗಿದೆ, ಇದು Responses API ಯ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಏಜೆಂಟ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು. ಇದು ಸಾಧನ ನೋಂದಣಿ, ಸಂದೇಶ ಲೂಪ್ಗಳ ಮತ್ತು ಏಜೆಂಟ್ಗಳ ನಡುವಿನ ಹಸ್ತಾಂತರಗಳ ಸುತ್ತಲೂ ಬಾಯ್ಲರ್ಪ್ಲೇಟ್ ಅನ್ನು ಅಬ್ಸ್ಟ್ರಾಕ್ಟ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಶುದ್ಧ, ಟೈಪ್ಡ್ Python ಕೋಡ್ ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ನೀವು ಇಂದು OpenAI-ಕೇಂದ್ರಿತ ಏಜೆಂಟ್ ಯೋಜನೆಯನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತಿದ್ದರೆ ಮತ್ತು ಫ್ರೇಮ್ವರ್ಕ್ ಆದ್ಯತೆಗಳನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, ಇದು ನಾವು ಶಿಫಾರಸು ಮಾಡುವ SDK.
ಈ recipe ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ತೆಳ್ಳಗಿದೆ. send_usdc ಎಂಬುದು @function_tool ನಿಂದ decorate ಆಗಿರುವ ಸರಳ function; ನೀವು ಅದನ್ನು Agent ನ tools list ಗೆ ಸೇರಿಸುತ್ತೀರಿ ಮತ್ತು Runner ಅದನ್ನು pick up ಮಾಡುತ್ತದೆ. ವಿಶೇಷ configuration ಇಲ್ಲ, ಹೆಚ್ಚುವರಿ wrapper ಇಲ್ಲ, SDK ಯ fork ಇಲ್ಲ. Agents SDK ಹೊಸ feature (multi-modal inputs, voice agents) ಬಿಡುಗಡೆ ಮಾಡಿದಾಗ, ನಿಮ್ಮ function standard tool-calling surface ಮೇಲೆ ನಿಂತಿರುವುದರಿಂದ ಕೆಲಸ ಮುಂದುವರಿಸುತ್ತದೆ - ಅದರೊಳಗೆ version-specific ಏನೂ ಇಲ್ಲ.
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 ಅದನ್ನು underlying Responses API ಗಾಗಿ ಬಳಸುತ್ತದೆ). BLOCKCHAIN0X_API_KEY ನಿಮ್ಮ dashboard ನಿಂದ ಬಂದಿರುವ sk_test_ testnet ಅಥವಾ sk_live_ mainnet key ಆಗಿದೆ; client ಇದನ್ನು environment ನಿಂದ ಓದುತ್ತದೆ. ನಿಮ್ಮ agent ಗೆ ಹಣವೂ ಬರುತ್ತಿದ್ದರೆ, webhook handler ಗೆ ಹೆಚ್ಚುವರಿಯಾಗಿ BLOCKCHAIN0X_WEBHOOK_SECRET ಬೇಕಾಗುತ್ತದೆ.
ಪಾವತಿ ಮಾಡುವ @function_tool, ಒಂದು Agent ಗೆ ಒಪ್ಪಿಸಲಾಗಿದೆ.
ಕೆಳಗೆ ಸಂಪೂರ್ಣ ಏಕೀಕರಣವಿದೆ. send_usdc ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಕರೆ ಮಾಡುತ್ತದೆ; @function_tool ಇದನ್ನು ಸಾಧನವಾಗಿಸುತ್ತದೆ, ಮತ್ತು ರನ್ನರ್ ಕರೆವನ್ನು ಆಯೋಜಿಸುತ್ತದೆ. SDK ಶ್ರೇಣಿಯನ್ನು ನಿರ್ಮಿಸಲು ಟೈಪ್ ಹಿಂಟ್ಸ್ ಮತ್ತು ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಓದುತ್ತದೆ, ಆದ್ದರಿಂದ ಅವುಗಳನ್ನು ಸತ್ಯವಾದವಾಗಿಡಿ. ಅದನ್ನು ಓಡಿಸಿ ಮತ್ತು ಏಜೆಂಟ್ 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.
ಒಪ್ಪಿಗೆಯ ವೆಬ್ಹುಕ್ನೊಂದಿಗೆ ಒಳನೋಡುವ ಪಾವತಿಗಳನ್ನು ದೃಢೀಕರಿಸಿ.
ನಿಮ್ಮ ಏಜೆಂಟ್ USDC ಅನ್ನು RECEIVES ಮಾಡಿದರೆ, polling ಬದಲು ವೆಬ್ಹುಕ್ ಮೂಲಕ ದೃಢೀಕರಿಸಿ. ಪರಿಶೀಲನೆ ಸಹಾಯಕವು 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}
algorithm ಎಂದರೆ t.rawBody string ಮೇಲೆ HMAC-SHA256, constant-time compare, ಮತ್ತು 300-second replay window. raw body ಅನ್ನು await request.body() ಮೂಲಕ read ಮಾಡಿ, ಎಂದಿಗೂ request.json() ಅನ್ನು re-serialized ಮಾಡಬೇಡಿ, ಏಕೆಂದರೆ ಅದು signature ಒಳಗೊಂಡ bytes ಅನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ship ಮಾಡಲಾದ events payment.received, payment.sent, wallet.deployed, ಮತ್ತು webhook.test. ಹೆಚ್ಚಿನ follow-up ಕೆಲಸಕ್ಕಾಗಿ, job ಅನ್ನು enqueue ಮಾಡಿ (Celery, arq) ಮತ್ತು handler ಅನ್ನು block ಮಾಡದೇ ತಕ್ಷಣ 200 respond ಮಾಡಿ.
ನೀವು wrap ಮಾಡುತ್ತಿರುವ client open ಆಗಿದೆ. ಅದನ್ನು read ಮಾಡಿ.
ಕ್ಲೋನ್ ಮಾಡಲು ಯಾವುದೇ Agents SDK starter package ಇಲ್ಲ - ಮೇಲಿನ recipe ಯೇ integration. blockchain0x SDKs GitHub ನಲ್ಲಿ open source ಆಗಿವೆ; ಈ recipe Python SDK (blockchain0x-python) ಅನ್ನು wrap ಮಾಡುತ್ತದೆ, ಮತ್ತು ಪೂರ್ಣ method surface docs ನಲ್ಲಿ ಇದೆ. function bodies ಗಾಗಿ reference ಆಗಿ ಅದನ್ನು ಓದಿ.
github.com/tosh-labs/blockchain0x-pythonಪೂರ್ಣ SDK method surface ಮತ್ತು scopes ಗಳನ್ನು the docs ನಲ್ಲಿ document ಮಾಡಲಾಗಿದೆ. Base Sepolia ವಿರುದ್ಧ sk_test_ key ನಿಂದ ಆರಂಭಿಸಿ, function ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕೆಲಸ ಮಾಡಿದಾಗ sk_live_ ಗೆ switch ಮಾಡಿ.
ಮೊದಲ ಏಕೀಕರಣದಲ್ಲಿ ಗಮನಿಸುವ ಐದು ವಿಷಯಗಳು.
ಇವು ನಮ್ಮ ಬೆಂಬಲ ಇನ್ಬಾಕ್ಸ್ನಿಂದ ಬರುತ್ತವೆ. ಅವುಗಳನ್ನು ಮುಂಚೆ ತಿಳಿಯುವುದು ಪ್ರತಿ ಒಂದು ಗಂಟೆ ಉಳಿಸುತ್ತದೆ.
ಎಜೆಂಟ್ಗಳಿಗೆ SDK ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ - ನೀವು SDK ಅನ್ನು ಲುಪ್ತಗೊಳಿಸುತ್ತೀರಿ
Blockchain0x LangChain ಮತ್ತು CrewAI ಗೆ ಅಡಾಪ್ಟರ್ಗಳನ್ನು ಮತ್ತು MCP ಸರ್ವರ್ ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ; ವಿಶೇಷ OpenAI Agents SDK ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ. ಮೇಲಿನ ವಿಧಾನವು ಮಾರ್ಗವಾಗಿದೆ: @function_tool ನೊಂದಿಗೆ ಸರಳ ಟೈಪ್ಡ್ ಕಾರ್ಯವನ್ನು ಅಲಂಕಾರಿಕವಾಗಿ, ಒಳಗೆ ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಕರೆ ಮಾಡಿ ಮತ್ತು ಅದನ್ನು Agent(tools=[...]) ಗೆ ಸೇರಿಸಿ. SDK ಸಹಿಯನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಶ್ರೇಣಿಯನ್ನು ನಿರ್ಮಿಸಲು ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಓದುತ್ತದೆ, ಆದ್ದರಿಂದ ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಶುದ್ಧವಾಗಿರಿಸಿ.
ಏಜೆಂಟ್ಗಳ SDK ಸಹಾಯಕರ API ಅಲ್ಲ
OpenAI Agents SDK (openai-agents package, agents ಎಂದು import ಮಾಡಲಾಗುತ್ತದೆ) ಹಳೆಯ Assistants API ಗಿಂತ ಬೇರೆ product ಆಗಿದೆ. ಈ recipe Agents SDK ಅನ್ನು target ಮಾಡುತ್ತದೆ: Responses API ಮೇಲೆ Agent + Runner + @function_tool. ನೀವು client.beta.assistants.create(...) ಅನ್ನು call ಮಾಡುತ್ತಿದ್ದರೆ, ನೀವು OpenAI wind down ಮಾಡುತ್ತಿರುವ ಹಳೆಯ threads/runs model ನಲ್ಲಿ ಇದ್ದೀರಿ - Agents SDK ಗೆ move ಮಾಡಿ ಮತ್ತು ಮೇಲಿನ function ನೇರವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ.
ಮೌಲ್ಯಗಳು 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 ಅನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು. ನಿಮ್ಮ ಕಾರ್ಯದಲ್ಲಿ ದೋಷವನ್ನು ಹಿಡಿದಿಡಿ ಮತ್ತು ಮಾದಲಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಸ್ಪಷ್ಟ ಸಂದೇಶವನ್ನು ಹಿಂತಿರುಗಿಸಿ, ರನ್ನರ್ ಲೂಪ್ನಲ್ಲಿ ಬಿಡುವುದಕ್ಕಿಂತ. ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮಿಂಟ್ಸ್ ಮಾಡಲಾದ idempotency ಕೀ ಅರ್ಥವೆಂದರೆ ಕೈಯಿಂದ ಪುನರಾವೃತ್ತವು ಡಬಲ್-ಪೇಯಿಂಗ್ ಆಗುವುದಿಲ್ಲ.
ಅಸಿಂಕ್ರೋನಸ್-ಮಾತ್ರ ರನ್ಟೈಮ್
Agents SDK async-first - await Runner.run(...). ನಿಮ್ಮ tool ಒಳಗಿನ blockchain0x call synchronous ಆಗಿದೆ, ಇದು ಒಂದೇ quick payment ಗೆ ಸರಿ, ಆದರೆ load ನಲ್ಲಿ loop ಅನ್ನು block ಮಾಡುತ್ತದೆ. ನೀವು ಹಲವು concurrent agents ಅನ್ನು run ಮಾಡುತ್ತಿದ್ದರೆ, SDK call ಅನ್ನು asyncio.to_thread ಮೂಲಕ wrap ಮಾಡಿ. sync entry point ನಿಂದ top level ನಲ್ಲಿ asyncio.run() ಬಳಸಿ.