ข้ามไปยังเนื้อหาหลัก
การรวม PYDANTIC AI

การรวมการชำระเงิน Pydantic AI.

ไม่มีแพ็คเกจ Pydantic AI และคุณไม่ต้องการมัน ลงทะเบียนฟังก์ชันที่มีประเภทด้วย @agent.tool_plain เรียกไคลเอนต์ blockchain0x จริง และตัวแทนของคุณสามารถย้าย USDC บน Base.

คำตอบสั้น

ไม่มีแพ็กเกจเฉพาะของ Pydantic AI และคุณก็ไม่จำเป็นต้องมี Pydantic AI แปลงฟังก์ชันให้เป็น validated tool ด้วย ดังนั้นคุณจึงห่อ Python client ของจริงไว้ในฟังก์ชันที่มี type แล้ว agent จะสามารถส่ง USDC, ชำระใบแจ้งหนี้ และอ่าน wallets ได้ มันใช้งานได้กับ OpenAI, Anthropic, Google, Mistral, Groq และผู้ให้บริการอื่น ๆ ของ Pydantic AI ทุกเจ้า เพราะ tool เรียก HTTP API ไม่ได้เรียก model การชำระเงินจะ settle บน Base

ทำไมถึงต้องมีเครื่องมือการชำระเงินที่ระบุประเภท

การพิมพ์ของ Pydantic AI ชนะ ใช้สำหรับการชำระเงินด้วย.

จุดประสงค์ทั้งหมดของ Pydantic AI คือการมีประเภทที่แข็งแกร่ง: ข้อมูลนำเข้าของตัวแทนมีประเภท, ผลลัพธ์มีประเภท, ความสัมพันธ์มีประเภท, การลองใหม่มีประเภท เฟรมเวิร์กจะปฏิเสธข้อมูลที่ไม่ถูกต้องที่ขอบเขตแทนที่จะปล่อยให้มันแพร่กระจายผ่านการเรียก LLM เครื่องมือกระเป๋าเงินของคุณขึ้นอยู่กับสิ่งนั้น - ประกาศอาร์กิวเมนต์ด้วยประเภท และ Pydantic AI สร้างสคีมาที่ได้รับการตรวจสอบจากลายเซ็นและเอกสารก่อนที่โมเดลจะได้รับอนุญาตให้เรียกมัน.

ประโยชน์ที่แท้จริง: หากโมเดลพยายามเรียก send_usdc ด้วยจำนวนทศนิยมแทนที่จะเป็นสตริงหน่วยฐาน ความล้มเหลวจะเกิดขึ้นที่ชั้นการตรวจสอบของ Pydantic ก่อนที่จะมีการเรียก HTTP ใดๆ ถึงเรา คุณจะเห็น ValidationError ที่ชัดเจนพร้อมข้อความที่มีประโยชน์แทนที่จะเป็น 422 จาก API พร้อมเส้นทางฟิลด์ที่ลึกลับ นี่คือเหตุผลทั้งหมดที่ต้องห่อหุ้มไคลเอนต์ด้วยตัวคุณเองที่นี่แทนที่จะใช้ตัวปรับทั่วไป - คุณเก็บการพิมพ์ทั้งหมดไว้จนถึงสาย.

การติดตั้ง

ติดตั้ง Pydantic AI และ SDK หลัก โดยมีคีย์สองตัว

ไม่มีแพ็คเกจ Pydantic AI ของ blockchain0x ที่จะเพิ่ม คุณติดตั้ง Pydantic AI (Python 3.10+) และ SDK หลัก blockchain0x จริง จากนั้นเขียนฟังก์ชันด้านล่าง นั่นคือรายการการพึ่งพาทั้งหมด.

ติดตั้ง
pip install pydantic-ai blockchain0x
ตัวแปรสภาพแวดล้อม
export 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 คือคีย์ sk_test_ สำหรับ testnet หรือ sk_live_ สำหรับ mainnet จากแดชบอร์ดของคุณ; ฝั่ง client จะอ่านค่าจาก environment หากเอเจนต์ของคุณรับเงินด้วย handler ของ webhook จะต้องใช้ BLOCKCHAIN0X_WEBHOOK_SECRET เพิ่มเติมด้วย

สูตร

ฟังก์ชันที่มีประเภทซึ่งจ่ายเงิน ลงทะเบียนเป็นเครื่องมือ.

ด้านล่างคือการรวมทั้งหมด send_usdc เรียกไคลเอนต์ blockchain0x จริง; @agent.tool_plain ลงทะเบียนมันด้วยสคีมาที่สร้างจากการชี้แนะประเภทและ docstring รันมันและเอเจนต์จะย้าย USDC บน Base โดยมีการตรวจสอบอาร์กิวเมนต์ก่อนการเรียก

AGENT.PY
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.

การจัดการเว็บฮุก

ยืนยันการชำระเงินขาเข้าด้วย webhook ที่ลงนาม.

หากเอเจนต์ของคุณยังได้รับ USDC, ยืนยันด้วย webhook แทนที่จะตรวจสอบ. ตัวช่วยยืนยันจะถูกส่งใน Node SDK; ในบริการ Python คุณจะตรวจสอบด้วยมือกับ HMAC ที่มีการบันทึก. หากคุณต้องการเหตุการณ์ที่มีประเภท, กำหนดโมเดล Pydantic ของคุณเองและ model_validate_json ร่างกายดิบหลังจากที่ลายเซ็นได้รับการตรวจสอบ - การกำหนดประเภทเป็นของคุณที่จะเพิ่ม. ตัวอย่าง FastAPI ด้านล่าง.

WEBHOOK.PY
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}

อัลกอริธึมคือ HMAC-SHA256 บนสตริง t.rawBody การเปรียบเทียบในเวลาคงที่ และหน้าต่างการเล่นซ้ำ 300 วินาที อ่านร่างดิบผ่าน await request.body() ไม่เคย request.json() ที่ถูกถอดรหัสใหม่ เพราะจะเปลี่ยนไบต์ที่ลายเซ็นครอบคลุม เหตุการณ์ที่ส่งคือ payment.received, payment.sent, wallet.deployed และ webhook.test; แคบลงที่ส่วนหัว X-Blockchain0x-Event-Type เพื่อแยก

แหล่งที่มาและเอกสาร

ไคลเอนต์ที่คุณกำลังห่อหุ้มอยู่เปิดอยู่ อ่านมัน.

ไม่มี starter package ของ Pydantic AI ให้ clone - สูตรด้านบนคือการเชื่อมต่อจริง SDK ของ blockchain0x เป็น open source บน GitHub; สูตรนี้ห่อหุ้ม Python SDK (blockchain0x-python) โดยมี surface ของเมธอดทั้งหมดอยู่ใน docs อ่านไว้เป็นตัวอย่างอ้างอิงสำหรับ body ของฟังก์ชัน

github.com/tosh-labs/blockchain0x-python

surface ของเมธอดใน SDK และ scopes ทั้งหมดถูกอธิบายไว้ที่ the docs. เริ่มด้วยคีย์ sk_test_ บน Base Sepolia ก่อน แล้วค่อยสลับเป็น sk_live_ เมื่อฟังก์ชันทำงานได้ตามที่คุณคาดไว้

ข้อผิดพลาดทั่วไป

ห้าหมายที่เฉพาะเจาะจงเกี่ยวกับ Pydantic AI ที่ควรหลีกเลี่ยง

การพิมพ์ที่แข็งแกร่งของ Pydantic AI จับข้อผิดพลาดในการรวมส่วนใหญ่ที่ขอบเขต; นี่คือไม่กี่ข้อที่หลุดรอดไป.

PITFALL 1

ไม่มีแพ็คเกจ Pydantic AI - คุณลงทะเบียนเครื่องมือ

Blockchain0x ส่งอะแดปเตอร์สำหรับ LangChain และ CrewAI พร้อมกับเซิร์ฟเวอร์ MCP; ไม่มีแพ็คเกจ Pydantic AI ที่เฉพาะเจาะจง สูตรข้างต้นคือเส้นทาง: ฟังก์ชันที่มีประเภทธรรมดาที่ตกแต่งด้วย @agent.tool_plain ที่เรียกใช้ไคลเอนต์ blockchain0x ที่แท้จริง Pydantic AI อ่านลายเซ็นและ docstring เพื่อสร้างสคีมาของเครื่องมือที่ได้รับการตรวจสอบ ซึ่งเป็นชัยชนะในการพิมพ์ที่คุณมาที่ Pydantic AI.

PITFALL 2

เก็บจำนวนเป็นสตริง; ให้ 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.

PITFALL 3

send_payment สามารถตอบ 503 ได้ในระยะเริ่มต้น

payments.create จะไม่ลองใหม่โดยค่าเริ่มต้นและสามารถส่งคืน 503 จนกว่าตัวแปลงเครือข่ายจะถูกเชื่อมต่อ Catch ข้อผิดพลาดภายในเครื่องมือของคุณและส่งคืนข้อความที่ชัดเจนที่โมเดลสามารถดำเนินการได้ แทนที่จะให้เอเจนต์ทำงานวนซ้ำ คีย์ idempotency ที่สร้างโดยอัตโนมัติหมายความว่าการลองใหม่ด้วยตนเองจะไม่จ่ายสองครั้ง

PITFALL 4

สตริงโมเดลที่มีคำนำหน้าผู้ให้บริการ

Pydantic AI ใช้สตริงโมเดลที่มีคำนำหน้าผู้ให้บริการ: 'openai:gpt-4o', 'anthropic:claude-3-5-sonnet-latest', 'google-gla:gemini-1.5-pro'. การละเว้นคำนำหน้าจะทำให้เกิดข้อผิดพลาด 'โมเดลไม่รู้จัก' ที่ลึกลับ เครื่องมือของคุณไม่ขึ้นอยู่กับผู้ให้บริการเพราะมันเรียก HTTP API ไม่ใช่โมเดล - เปลี่ยนคำนำหน้าได้อย่างอิสระและฟังก์ชันกระเป๋าเงินจะไม่เปลี่ยนแปลง.

PITFALL 5

tool_plain เทียบกับ tool (RunContext)

ใช้ @agent.tool_plain เมื่อฟังก์ชันไม่ต้องการอะไรจากการทำงาน ตามที่กล่าวไว้ข้างต้น หากคุณต้องการให้การพึ่งพาของตัวแทนอยู่ภายในเครื่องมือ (รหัสลูกค้าต่อคำขอ, ขีดจำกัดการใช้จ่าย) ใช้ @agent.tool และประกาศอาร์กิวเมนต์แรกเป็น ctx: RunContext[Deps] เพื่ออ่าน ctx.deps การผสมผสานทั้งสอง - การประกาศอาร์กิวเมนต์ ctx บน tool_plain - จะทำให้เกิด TypeError ในการลงทะเบียน

คำถามที่พบบ่อย

สามคำถามเฉพาะ Pydantic AI.

มีแพ็คเกจ Pydantic AI ที่ต้องติดตั้งโดยเฉพาะหรือไม่?

ไม่ Pydantic AI ได้เปลี่ยนฟังก์ชันให้เป็นเครื่องมือที่ได้รับการตรวจสอบแล้วด้วย @agent.tool_plain (หรือ @agent.tool สำหรับเครื่องมือที่รับรู้บริบท) ดังนั้นเส้นทางที่ตรงไปตรงมาคือการห่อหุ้มลูกค้า blockchain0x จริงด้วยตัวคุณเอง ตามที่แสดงข้างต้น แพ็คเกจเฟรมเวิร์กที่จัดส่งเพียงแพ็คเกจเดียวคือ blockchain0x-langchain และ blockchain0x-crewai (ทั้งสองเป็น Python) บวกกับเซิร์ฟเวอร์ @blockchain0x/mcp Pydantic AI เช่นเดียวกับเฟรมเวิร์กอื่น ๆ ที่ไม่มีตัวแปลงเฉพาะ เป็นสูตรไม่กี่บรรทัดนี้

สิ่งนี้ทำงานข้ามผู้ให้บริการ LLM (OpenAI, Anthropic, Google) หรือไม่?

ใช่ เครื่องมือเป็นกลางต่อผู้ให้บริการ - มันเรียก Blockchain0x HTTP API ไม่ใช่พื้นผิวเฉพาะ LLM ตราบใดที่ Pydantic AI รองรับผู้ให้บริการ (OpenAI, Anthropic, Google GLA, Google VertexAI, Groq, Cohere, Mistral, Bedrock) ฟังก์ชันเดียวกันทำงานได้ เพียงแค่เปลี่ยนสตริงโมเดลในตัวสร้าง Agent: 'anthropic:claude-3-5-sonnet-latest' แทนที่จะเป็น 'openai:gpt-4o'

ฉันจะเพิ่มข้อมูลที่มีประเภท, หรืออ่านและชำระรวมถึงการส่งได้อย่างไร?

สำหรับอินพุตที่เข้มงวดขึ้น ให้ใช้ Pydantic model เป็น argument ของ tool แล้ว Pydantic AI จะตรวจสอบให้คุณ - ไม่ว่าจะเป็น constrained decimals, รูปแบบ address หรืออะไรก็ตามที่คุณต้องการ หากต้องการอ่านและชำระ ให้ลงทะเบียนฟังก์ชันเพิ่มเติมในลักษณะเดียวกัน: blockchain0x.transactions.get อ่านธุรกรรม, blockchain0x.agents.get และ blockchain0x.agents.list อ่านกระเป๋าเงิน, และ blockchain0x.payment_requests.settle ชำระ invoice ที่คุณสร้างในแดชบอร์ดพร้อมหลักฐาน on-chain ธุรกรรมขาเข้าจะยืนยันผ่าน webhook payment.received ด้านล่าง

เพิ่มการชำระเงินที่มีประเภทให้กับตัวแทนของคุณ

มีเพียงไม่กี่บรรทัดแบบ typed ที่ห่อ real client โดยไม่ต้องติดตั้งแพ็กเกจ เริ่มใช้งานได้ฟรี