Pydantic AI पेमेंट एकत्रीकरण.
Pydantic AI पॅकेज नाही, आणि तुम्हाला एकाची आवश्यकता नाही. @agent.tool_plain सह एक प्रकारची कार्य नोंदवा, वास्तविक blockchain0x क्लायंटला कॉल करा, आणि तुमचा एजंट Base वर USDC हलवू शकतो.
Pydantic AI साठी कोणतेही विशिष्ट package नाही, आणि तुम्हाला त्याची गरजही नाही. Pydantic AI function ला सह validated tool मध्ये रूपांतरित करते, त्यामुळे तुम्ही खरा Python client typed function मध्ये wrap करता आणि एजंट USDC पाठवू शकतो, invoices settle करू शकतो, आणि wallets read करू शकतो. हे OpenAI, Anthropic, Google, Mistral, Groq, आणि इतर सर्व Pydantic AI providers across काम करते, कारण tool model नाही तर HTTP API call करते. Payments Base वर settle होतात.
Pydantic AI च्या टायपिंगमध्ये विजय मिळतो. याचा वापर पेमेंटसाठीही करा.
Pydantic AI चा संपूर्ण मुद्दा मजबूत टायपिंग आहे: एजंट इनपुट टाइप केलेले आहेत, आउटपुट टाइप केलेले आहेत, अवलंबन टाइप केलेले आहेत, पुन्हा प्रयत्न टाइप केलेले आहेत. फ्रेमवर्क सीमेमध्ये विकृत डेटा नाकारतो, LLM कॉलद्वारे त्याला पसरू देत नाही. तुमचे वॉलेट साधन अगदी त्यावर आधारित आहे - तर्कसंगत प्रकारांसह घोषित करा, आणि Pydantic AI सिग्नेचर आणि डॉकस्ट्रिंगमधून एक मान्यताप्राप्त स्कीमा तयार करते, मॉडेलला ते कॉल करण्याची परवानगी मिळण्यापूर्वी.
व्यावहारिक फायदा: जर मॉडेलने बेस-युनिट स्ट्रिंगऐवजी फ्लोटसह send_usdc कॉल करण्याचा प्रयत्न केला, तर अपयश Pydantic च्या वैधतेच्या स्तरावर होते, आमच्याकडे कोणतीही HTTP कॉल करण्यापूर्वी. तुम्हाला एक स्पष्ट ValidationError एक उपयुक्त संदेशासह दिसतो, API कडून गूढ क्षेत्रांच्या पथांसह 422 ऐवजी. हे तुम्हाला येथे क्लायंट स्वतः लपवण्याचे संपूर्ण कारण आहे, सामान्य अडॅप्टरसाठी पोहचण्याऐवजी - तुम्ही वायरपर्यंत टायपिंग ठेवता.
Pydantic AI आणि मुख्य SDK स्थापित करा. दोन की.
जोडण्यासाठी blockchain0x Pydantic AI पॅकेज नाही. तुम्ही Pydantic AI (Python 3.10+) आणि वास्तविक blockchain0x कोर SDK स्थापित करता, नंतर खालील कार्य लिहिता. ती संपूर्ण अवलंबन यादी आहे.
pip install pydantic-ai blockchain0xexport OPENAI_API_KEY=sk-... export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
OPENAI_API_KEY (किंवा तुम्ही वापरत असलेल्या कोणत्याही provider साठी समतुल्य). BLOCKCHAIN0X_API_KEY ही तुमच्या dashboard मधील sk_test_ testnet किंवा sk_live_ mainnet की आहे; client ती environment मधून वाचतो. जर तुमच्या agent ला पैसे देखील मिळत असतील, तर webhook handler ला BLOCKCHAIN0X_WEBHOOK_SECRET देखील लागतो.
एक टाइप केलेले कार्य जे पैसे देते, एक टूल म्हणून नोंदणीकृत.
खाली संपूर्ण एकत्रीकरण आहे. send_usdc वास्तविक blockchain0x क्लायंटला कॉल करते; @agent.tool_plain याला प्रकाराच्या सूचनांमधून आणि डॉकस्ट्रिंगमधून तयार केलेल्या स्कीमासह नोंदणी करते. ते चालवा आणि एजंट Base वर USDC हलवतो, कॉल करण्यापूर्वी तर्कांची पडताळणी केली जाते.
from pydantic_ai import Agent from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment agent = Agent( "openai:gpt-4o", system_prompt="You pay vendor invoices in USDC within owner-set limits.", ) # Register a plain function as a tool. No dedicated package needed. @agent.tool_plain 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}) ) result = agent.run_sync( "Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset." ) print(result.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_. Want a typed result object instead of a string? Set the agent's output_type to your own Pydantic model and return it from the tool. Add read and settle functions the same way.
स्वाक्षरी केलेल्या वेबहुकसह इनबाउंड पेमेंटची पुष्टी करा.
जर तुमचा एजंट USDC देखील प्राप्त करतो, तर ते वेबहुकद्वारे पुष्टी करा, मतदानाद्वारे नाही. सत्यापन सहाय्यक Node SDK मध्ये पाठवला जातो; एका Python सेवेमध्ये तुम्ही दस्तऐवजीकरण केलेल्या HMAC विरुद्ध हाताने सत्यापित करता. जर तुम्हाला टाइप केलेले इव्हेंट हवे असतील, तर तुमचे स्वतःचे Pydantic मॉडेल परिभाषित करा आणि स्वाक्षरीची पुष्टी झाल्यावर कच्च्या शरीराचे model_validate_json करा - टायपिंग तुम्ही जोडायची आहे.
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; शाखा करण्यासाठी X-Blockchain0x-Event-Type हेडरवर संकुचित करा.
तुम्ही लपवलेला क्लायंट ओपन आहे. त्याला वाचा.
Clone करण्यासाठी Pydantic AI 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 येथे आहे. Base Sepolia वर sk_test_ key ने सुरुवात करा, आणि function अपेक्षेप्रमाणे काम करू लागल्यावर sk_live_ वर स्विच करा.
पाच Pydantic AI-विशिष्ट जाळे टाळा.
Pydantic AI च्या मजबूत टायपिंग बहुतेक एकत्रीकरण बग्ज सीमारेषेवर पकडते; हे काही आहेत जे गळून पडतात.
Pydantic AI पॅकेज नाही - तुम्ही एक साधन नोंदवता.
Blockchain0x LangChain आणि CrewAI साठी अडॅप्टर्स आणि MCP सर्व्हर पाठवते; येथे कोणतीही समर्पित Pydantic AI पॅकेज नाही. वरील रेसिपी हा मार्ग आहे: @agent.tool_plain सह सजवलेली एक साधी टाइप केलेली कार्यक्षमता जी वास्तविक blockchain0x क्लायंटला कॉल करते. Pydantic AI स्वाक्षरी आणि डॉकस्ट्रिंग वाचतो जेणेकरून एक मान्यताप्राप्त टूल स्कीमा तयार करता येईल, जे तुम्ही Pydantic AI साठी आले होते तेच आहे.
रक्कम एक स्ट्रिंग ठेवा; Pydantic ला रेषा धरू द्या
payments.create takes amountWei: a string of USDC base units (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the tool argument as str and Pydantic AI rejects a float at the boundary with a clear ValidationError, before any HTTP call. That is the whole point of doing this in Pydantic AI - the malformed value never reaches the API.
send_payment लवकर 503 उत्तर देऊ शकते
payments.create डिफॉल्टने पुनःप्रयत्न करत नाही आणि तुमच्या नेटवर्कसाठी चेन अडॅप्टर वायर्ड होईपर्यंत 503 परत करू शकते. तुमच्या टूलमध्ये त्रुटी पकडा आणि मॉडेलवर कार्य करण्यासाठी स्पष्ट संदेश परत करा, एजंट लूप करण्याऐवजी. स्वयंचलितपणे तयार केलेला idempotency की म्हणजे एक मॅन्युअल पुनःप्रयत्न दुहेरी पेमेंट करणार नाही.
प्रदात्याने पूर्वनिर्धारित मॉडेल स्ट्रिंग्ज
Pydantic AI प्रदाता-पूर्वनिर्धारित मॉडेल स्ट्रिंग्ज वापरते: 'openai:gpt-4o', 'anthropic:claude-3-5-sonnet-latest', 'google-gla:gemini-1.5-pro'. प्रीफिक्स वगळल्यास एक गूढ 'अज्ञात मॉडेल' त्रुटी मिळते. तुमचे साधन प्रदाता-निरपेक्ष आहे कारण ते HTTP API कॉल करते, मॉडेल नाही - प्रीफिक्स मुक्तपणे बदलू शकता आणि वॉलेट कार्य अनियंत्रित राहते.
tool_plain vs tool (RunContext)
जर कार्याला चालवण्यापासून काहीही आवश्यक नसेल तर वरीलप्रमाणे @agent.tool_plain वापरा. जर तुम्हाला साधनामध्ये एजंटच्या अवलंबनांची आवश्यकता असेल (प्रत्येक विनंतीसाठी क्लायंट आयडी, खर्चाची मर्यादा), तर @agent.tool वापरा आणि ctx: RunContext[Deps] म्हणून पहिला तर्क घोषित करा जेणेकरून ctx.deps वाचता येईल. दोन्ही मिश्रण करणे - tool_plain वर ctx तर्क घोषित करणे - नोंदणीवर TypeError वाढवते.