Bỏ qua nội dung chính
TÍCH HỢP PYDANTIC AI

Tích hợp thanh toán Pydantic AI.

Không có gói Pydantic AI, và bạn không cần một cái nào. Đăng ký một hàm có kiểu với @agent.tool_plain, gọi khách hàng blockchain0x thực tế, và tác nhân của bạn có thể chuyển USDC trên Base.

CÂU TRẢ LỜI NGẮN

Không có package riêng cho Pydantic AI, và bạn cũng không cần một package như vậy. Pydantic AI biến một hàm thành một tool đã được xác thực với , vì vậy bạn bọc Python client thực sự trong một hàm có kiểu và agent có thể gửi USDC, thanh toán hóa đơn và đọc ví. Nó hoạt động trên OpenAI, Anthropic, Google, Mistral, Groq và mọi nhà cung cấp khác của Pydantic AI, vì tool gọi HTTP API chứ không gọi model. Thanh toán được chốt trên Base.

TẠI SAO CẦN CÁC CÔNG CỤ THANH TOÁN ĐƯỢC LOẠI

Kiểu của Pydantic AI chiến thắng. Sử dụng nó cho thanh toán nữa.

Điểm chính của Pydantic AI là kiểu mạnh: đầu vào của tác nhân được kiểu hóa, đầu ra được kiểu hóa, các phụ thuộc được kiểu hóa, các lần thử lại được kiểu hóa. Khung từ chối dữ liệu không hợp lệ ở ranh giới thay vì để nó lan truyền qua cuộc gọi LLM. Công cụ ví của bạn dựa vào chính điều đó - khai báo các đối số với kiểu, và Pydantic AI xây dựng một sơ đồ đã được xác thực từ chữ ký và docstring trước khi mô hình được phép gọi nó.

Lợi ích thực tiễn: nếu mô hình cố gắng gọi send_usdc với một số thực thay vì một chuỗi đơn vị cơ sở, sự cố xảy ra ở lớp xác thực của Pydantic trước bất kỳ cuộc gọi HTTP nào đến chúng tôi. Bạn sẽ thấy một ValidationError rõ ràng với một thông điệp hữu ích thay vì một 422 từ API với các đường dẫn trường khó hiểu. Đó là lý do chính để bọc khách hàng của bạn ở đây thay vì tìm đến một bộ chuyển đổi chung - bạn giữ việc gõ cho đến dây.

CÀI ĐẶT

Cài đặt Pydantic AI và SDK cốt lõi. Hai khóa.

Không có gói blockchain0x Pydantic AI nào để thêm. Bạn cài đặt Pydantic AI (Python 3.10+) và SDK cốt lõi blockchain0x thực tế, sau đó viết hàm bên dưới. Đó là toàn bộ danh sách phụ thuộc.

CÀI ĐẶT
pip install pydantic-ai blockchain0x
BIẾN MÔI TRƯỜNG
export OPENAI_API_KEY=sk-...
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

OPENAI_API_KEY (hoặc khóa tương đương cho nhà cung cấp bạn dùng). BLOCKCHAIN0X_API_KEY là khóa sk_test_ testnet hoặc sk_live_ mainnet từ dashboard của bạn; client sẽ đọc khóa này từ biến môi trường. Nếu agent của bạn cũng nhận tiền, webhook handler còn cần thêm BLOCKCHAIN0X_WEBHOOK_SECRET.

CÔNG THỨC

Một hàm đã gõ trả tiền, được đăng ký như một công cụ.

Dưới đây là toàn bộ tích hợp. send_usdc gọi đến khách hàng blockchain0x thực; @agent.tool_plain đăng ký nó với một sơ đồ được xây dựng từ các gợi ý kiểu và docstring. Chạy nó và tác nhân chuyển USDC trên Base, với các tham số được xác thực trước cuộc gọi.

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.

XỬ LÝ WEBHOOK

Xác nhận các khoản thanh toán đến với một webhook đã ký.

Nếu tác nhân của bạn cũng nhận USDC, hãy xác nhận điều đó với webhook thay vì polling. Trợ giúp xác minh có trong Node SDK; trong một dịch vụ Python, bạn xác minh bằng tay theo HMAC đã được tài liệu hóa. Nếu bạn muốn các sự kiện kiểu, hãy định nghĩa mô hình Pydantic của riêng bạn và model_validate_json phần thân thô sau khi chữ ký được kiểm tra - kiểu là của bạn để thêm vào. Ví dụ FastAPI bên dưới.

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}

Thuật toán là HMAC-SHA256 trên chuỗi t.rawBody, so sánh thời gian không đổi và cửa sổ phát lại 300 giây. Đọc nội dung thô qua await request.body(), không bao giờ request.json() được tái tuần tự hóa, vì điều đó thay đổi các byte mà chữ ký bao phủ. Các sự kiện đã được gửi là payment.received, payment.sent, wallet.deployed và webhook.test; thu hẹp trên tiêu đề X-Blockchain0x-Event-Type để phân nhánh.

NGUỒN VÀ TÀI LIỆU

Khách hàng mà bạn đang bọc là mở. Đọc nó.

Không có starter package của Pydantic AI để clone - recipe ở trên chính là phần tích hợp. Các SDK của blockchain0x là mã nguồn mở trên GitHub; recipe này bọc Python SDK (blockchain0x-python), với toàn bộ bề mặt phương thức nằm trong docs. Hãy đọc để tham khảo phần thân hàm.

github.com/tosh-labs/blockchain0x-python

Toàn bộ bề mặt phương thức và các scope của SDK được tài liệu hóa tại the docs. Hãy bắt đầu với một key sk_test_ trên Base Sepolia, rồi chuyển sang sk_live_ khi hàm hoạt động đúng như bạn mong đợi.

CÁC CẠNH TRÁNH THƯỜNG GẶP

Năm cạm bẫy cụ thể về Pydantic AI cần tránh.

Kiểu mạnh của Pydantic AI phát hiện hầu hết các lỗi tích hợp tại ranh giới; đây là một vài lỗi lọt qua.

PITFALL 1

Không có gói Pydantic AI - bạn đăng ký một công cụ

Blockchain0x cung cấp các bộ chuyển đổi cho LangChain và CrewAI cùng với máy chủ MCP; không có gói Pydantic AI chuyên dụng. Công thức ở trên là con đường: một hàm kiểu đơn giản được trang trí bằng @agent.tool_plain gọi đến khách hàng blockchain0x thực. Pydantic AI đọc chữ ký và docstring để xây dựng một sơ đồ công cụ đã được xác thực, chính xác là chiến thắng về kiểu mà bạn đã đến với Pydantic AI.

PITFALL 2

Giữ số tiền là một chuỗi; để Pydantic giữ nguyên

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 có thể trả về 503 sớm

payments.create không tự động thử lại và có thể trả về 503 cho đến khi bộ chuyển đổi chuỗi được kết nối với mạng của bạn. Bắt lỗi bên trong công cụ của bạn và trả về một thông điệp rõ ràng mà mô hình có thể hành động, thay vì để tác nhân lặp lại. Khóa idempotency tự động được cấp phát có nghĩa là một lần thử lại thủ công sẽ không thanh toán gấp đôi.

PITFALL 4

Chuỗi mô hình có tiền tố nhà cung cấp

Pydantic AI sử dụng các chuỗi mô hình có tiền tố nhà cung cấp: 'openai:gpt-4o', 'anthropic:claude-3-5-sonnet-latest', 'google-gla:gemini-1.5-pro'. Bỏ qua tiền tố sẽ dẫn đến lỗi 'mô hình không xác định'. Công cụ của bạn không phụ thuộc vào nhà cung cấp vì nó gọi API HTTP, không phải mô hình - thay thế tiền tố một cách tự do và chức năng ví không thay đổi.

PITFALL 5

tool_plain vs tool (RunContext)

Sử dụng @agent.tool_plain khi chức năng không cần gì từ lần chạy, như trên. Nếu bạn muốn các phụ thuộc của đại lý bên trong công cụ (một ID khách hàng theo yêu cầu, một giới hạn chi tiêu), hãy sử dụng @agent.tool và khai báo tham số đầu tiên là ctx: RunContext[Deps] để đọc ctx.deps. Kết hợp cả hai - khai báo một tham số ctx trên tool_plain - sẽ gây ra một TypeError khi đăng ký.

CÂU HỎI THƯỜNG GẶP

Ba câu hỏi cụ thể về Pydantic AI.

Có gói Pydantic AI chuyên dụng nào để cài đặt không?

Không. Pydantic AI đã biến một hàm thành một công cụ đã được xác thực với @agent.tool_plain (hoặc @agent.tool cho các công cụ nhận thức ngữ cảnh), vì vậy con đường trung thực là bọc khách hàng blockchain0x thực của bạn, như đã chỉ ra ở trên. Các gói khung duy nhất được gửi đi là blockchain0x-langchain và blockchain0x-crewai (cả hai đều là Python) cộng với máy chủ @blockchain0x/mcp. Pydantic AI, giống như các khung khác không có bộ điều hợp riêng, là công thức vài dòng này.

Điều này có hoạt động trên các nhà cung cấp LLM (OpenAI, Anthropic, Google) không?

Có. Tool này không phụ thuộc nhà cung cấp - nó gọi Blockchain0x HTTP API, không phải bất kỳ bề mặt riêng của LLM nào. Miễn là Pydantic AI hỗ trợ nhà cung cấp đó (OpenAI, Anthropic, Google GLA, Google VertexAI, Groq, Cohere, Mistral, Bedrock), cùng một hàm sẽ hoạt động. Chỉ cần đổi chuỗi model trong constructor của Agent: 'anthropic:claude-3-5-sonnet-latest' thay vì 'openai:gpt-4o'.

Làm thế nào để tôi thêm đầu vào kiểu, hoặc đọc và thanh toán cũng như gửi?

Với đầu vào chặt chẽ hơn, hãy dùng một Pydantic model làm đối số của tool và Pydantic AI sẽ tự xác thực cho bạn - decimal bị giới hạn, mẫu địa chỉ, bất cứ thứ gì bạn cần. Để đọc và tất toán, hãy đăng ký thêm function theo cùng cách: blockchain0x.transactions.get đọc một giao dịch, blockchain0x.agents.get và blockchain0x.agents.list đọc ví, còn blockchain0x.payment_requests.settle tất toán một invoice bạn tạo trong dashboard với bằng chứng on-chain. Thanh toán đi vào sẽ được xác nhận qua webhook payment.received bên dưới.

Thêm thanh toán kiểu cho tác nhân của bạn.

Một vài dòng đã gõ bao bọc khách hàng thực tế, không cần cài đặt gói. Miễn phí để bắt đầu.