Bỏ qua nội dung chính
TÍCH HỢP HẠT NHÂN NGỮ NGHĨA

Tích hợp thanh toán Semantic Kernel.

Không cần gói Semantic Kernel. Bọc khách hàng blockchain0x thực trong một KernelFunction (Python hoặc Java), hoặc gọi REST API từ một KernelFunction C#. Dù bằng cách nào, tác nhân cũng chuyển USDC trên Base.

CÂU TRẢ LỜI NGẮN

Không có gói Semantic Kernel. Trong Python, bạn bọc khách hàng thực blockchain0x trong một phương thức được trang trí bằng @kernel_function; trong C#, nơi không có SDK .NET nào được gửi, một [KernelFunction] gọi REST API trực tiếp. Đăng ký nó trên kernel của bạn, đặt FunctionChoiceBehavior thành Tự động, và tác nhân có thể chuyển USDC trên Base. Các SDK cốt lõi đã được gửi là Node, Python, Ruby, Go và JVM.

TẠI SAO CHỌN SEMANTIC KERNEL

Khung tác nhân .NET cấp doanh nghiệp duy nhất.

Nếu ngăn xếp của bạn có hình dạng Microsoft (Azure, .NET, SQL Server, Teams, Copilot Studio), Semantic Kernel gần như chắc chắn là khung tác nhân đúng. Nó được xây dựng bởi Microsoft, nó tích hợp với Azure OpenAI, AKS và Entra, và nó có hỗ trợ hàng đầu trên .NET, Python và Java theo cách mà không khung nào khác phù hợp. Và nó đã cung cấp cho bạn điều bạn cần: một KernelFunction chỉ là một phương thức, vì vậy việc kết nối thanh toán là một phương thức bạn viết, không phải một gói bạn chờ đợi.

Đó là lý do tại sao không có bộ chuyển đổi Semantic Kernel để cài đặt. Trong Python và Java, bạn bọc SDK blockchain0x thực trong một KernelFunction; trong C#, nơi chưa có SDK .NET nào được phát hành, KernelFunction gọi trực tiếp REST API bằng HttpClient. Bạn giữ được tính tiện dụng theo cách diễn đạt - các phương thức được trang trí, bất đồng bộ, xác thực tham số dựa trên thuộc tính - và không có phiên bản bộ chuyển đổi nào để theo dõi. Các SDK chính tồn tại ngày nay là Node, Python, Ruby, Go và JVM.

CÀI ĐẶT

Cài đặt Semantic Kernel và, trong Python, SDK cốt lõi.

Không có gói blockchain0x Semantic Kernel nào để thêm. Python cài đặt Semantic Kernel cộng với SDK blockchain0x thực tế; C# cài đặt Microsoft.SemanticKernel và gọi REST API bằng HttpClient tích hợp sẵn. Java sử dụng Semantic Kernel cho Java cộng với SDK com.blockchain0x:sdk-jvm.

CÀI ĐẶT - PYTHON
pip install semantic-kernel blockchain0x
CÀI ĐẶT - .NET (Chỉ Semantic Kernel)
dotnet add package Microsoft.SemanticKernel
BIẾN MÔI TRƯỜNG
BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY=sk_test_...             # same key, the name the .NET REST example reads
OPENAI_API_KEY=sk-...

BLOCKCHAIN0X_API_KEY (Python client đọc giá trị này) là một khóa sk_test_ testnet hoặc sk_live_ mainnet từ dashboard của bạn; ví dụ C# REST đọc cùng giá trị từ BLOCKCHAIN0X_API_KEY. OPENAI_API_KEY (hoặc AZURE_OPENAI_* cho các model chạy trên Azure) là khóa LLM của bạn. Bộ xử lý webhook cũng cần BLOCKCHAIN0X_WEBHOOK_SECRET.

CÁC VÍ DỤ ĐẦY ĐỦ VỀ ĐẠI LÝ

Một KernelFunction ví, trong Python và C#.

Python bọc khách hàng blockchain0x thực sự trong một phương thức được trang trí bằng @kernel_function. C#, nơi không có SDK .NET nào được cung cấp, tiết lộ một [KernelFunction] gọi trực tiếp POST /v1/payments với HttpClient. Cả hai đều đăng ký trên kernel là Wallet.send_usdc; chỉ có nghi thức xung quanh là khác nhau.

PYTHON (plugin.py)
from semantic_kernel import Kernel
from semantic_kernel.functions import kernel_function
from blockchain0x import Client

blockchain0x = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

class WalletPlugin:
    @kernel_function(description="Send a USDC payment from an agent wallet.")
    def send_usdc(self, agent_id: str, to: str, amount_wei: str) -> str:
        # amount_wei is USDC base units (6 decimals): "10000" = 0.01 USDC
        return str(
            blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei})
        )

kernel = Kernel()
kernel.add_plugin(WalletPlugin(), plugin_name="Wallet")
# Add your chat service, then let the model call Wallet.send_usdc.
.NET (WalletPlugin.cs)
using System.ComponentModel;
using System.Net.Http.Json;
using Microsoft.SemanticKernel;

// There is no .NET SDK, so a C# KernelFunction calls the REST API directly.
public class WalletPlugin
{
    private static readonly HttpClient Http = new()
    {
        BaseAddress = new Uri("https://api.blockchain0x.com"),
    };

    [KernelFunction, Description("Send a USDC payment from an agent wallet. amountWei is USDC base units (6 decimals).")]
    public async Task<string> SendUsdc(string agentId, string to, string amountWei)
    {
        Http.DefaultRequestHeaders.Authorization =
            new("Bearer", Environment.GetEnvironmentVariable("BLOCKCHAIN0X_API_KEY"));
        var res = await Http.PostAsJsonAsync("/v1/payments", new { agentId, to, amountWei });
        return await res.Content.ReadAsStringAsync();
    }
}

// builder.Plugins.AddFromType<WalletPlugin>("Wallet");

Register the function on the kernel, set FunctionChoiceBehavior to Auto, and when the user's message implies a payment the model calls Wallet.send_usdc with the agent id, recipient, and amount. amountWei is base units, so 0.01 USDC is "10000". The Python path returns the SDK result; the C# path returns the REST response body.

XỬ LÝ WEBHOOK

API tối thiểu ASP.NET Core để nhận các sự kiện thanh toán.

Khi một khoản thanh toán được giải quyết, Blockchain0x POST một sự kiện đã ký đến URL webhook của bạn. Không có trình xác minh .NET nào được cung cấp, vì vậy trình xử lý xác minh bằng tay theo HMAC đã được tài liệu hóa - điều này là tất cả những gì một trợ giúp sẽ làm. Ví dụ .NET bên dưới; Python và Java xác minh theo cách tương tự với các thư viện HMAC của riêng họ.

WEBHOOK.CS
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Builder;

var app = WebApplication.CreateBuilder(args).Build();
var secret = Environment.GetEnvironmentVariable("BLOCKCHAIN0X_WEBHOOK_SECRET")!;

app.MapPost("/webhooks/payment", async (HttpRequest req) =>
{
    using var reader = new StreamReader(req.Body);
    var raw = await reader.ReadToEndAsync(); // RAW body - verify before parsing
    var sig = req.Headers["X-Blockchain0x-Signature"].ToString();
    var ts = req.Headers["X-Blockchain0x-Timestamp"].ToString();

    var parts = sig.Split(',').Select(p => p.Split('=', 2))
        .Where(p => p.Length == 2).ToDictionary(p => p[0], p => p[1]);
    var t = parts.GetValueOrDefault("t", ts);
    var v1 = parts.GetValueOrDefault("v1", sig);

    var want = Convert.ToHexString(new HMACSHA256(Encoding.UTF8.GetBytes(secret))
        .ComputeHash(Encoding.UTF8.GetBytes($"{t}.{raw}"))).ToLowerInvariant();
    var fresh = Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - long.Parse(t)) <= 300;
    if (!fresh || !CryptographicOperations.FixedTimeEquals(
            Encoding.UTF8.GetBytes(want), Encoding.UTF8.GetBytes(v1)))
        return Results.Unauthorized();

    if (req.Headers["X-Blockchain0x-Event-Type"] == "payment.received")
        await RunFollowupAsync(); // USDC landed - do the next step
    return Results.Ok();
});

app.Run();

Thuật toán là HMAC-SHA256 trên chuỗi t.rawBody, một cửa sổ phát lại 300 giây, và so sánh thời gian cố định. Đọc thân thô qua StreamReader để chữ ký giữ nguyên; không giải mã rồi tái mã hóa. Các sự kiện đã gửi là payment.received, payment.sent, wallet.deployed, và webhook.test. Trong sản xuất, webhook thường chạy như một dịch vụ ASP.NET Core riêng biệt chia sẻ cơ sở dữ liệu với tác nhân để hai bên có thể phối hợp.

NGUỒN VÀ TÀI LIỆU

Các SDK và bề mặt REST là mở. Đọc chúng.

Không có starter package của Semantic Kernel để clone - các recipe ở trên chính là phần tích hợp. Các core SDK của blockchain0x (Node, Python, Ruby, Go) là mã nguồn mở trên GitHub, và bề mặt phương thức cùng các route REST mà ví dụ C# gọi đều được tài liệu hóa trong docs.

docs.blockchain0x.com/docs/overview

Bề mặt phương thức của SDK và các route REST đượ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 KernelFunction 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ề Semantic Kernel cần tránh.

Mô hình plugin của Semantic Kernel rất rõ ràng nhưng có những vấn đề về ngôn ngữ và hành vi mặc định. Biết trước những điều này sẽ tiết kiệm thời gian.

PITFALL 1

Không có gói Semantic Kernel, trong bất kỳ ngôn ngữ nào

Không có bộ chuyển đổi NuGet, PyPI hoặc Maven. Các SDK cốt lõi đã được gửi là Node, Python, Ruby, Go và JVM - không phải .NET. Vì vậy, một kernel Python bọc khách hàng blockchain0x Python trong một @kernel_function, một kernel Java sử dụng SDK com.blockchain0x:sdk-jvm, và một kernel C# gọi REST API trực tiếp từ một KernelFunction (được hiển thị ở trên). Tất cả ba cái đều chỉ là vài dòng.

PITFALL 2

FunctionChoiceBehavior phải là Tự động

Semantic Kernel chỉ gọi các hàm plugin khi FunctionChoiceBehavior được đặt thành Auto trong cài đặt thực thi prompt. Mặc định là None, vì vậy mô hình sẽ không bao giờ gọi hàm ví của bạn bất kể người dùng yêu cầu rõ ràng như thế nào. Nếu tác nhân hoàn toàn bỏ qua hàm, hãy kiểm tra điều này trước.

PITFALL 3

Các số lượng là đơn vị cơ sở USDC, dưới dạng chuỗi

The payments call takes amountWei: a string of USDC base units (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the function argument as a string in any language. payments.create also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.

PITFALL 4

Phạm vi plugin giữa các đại lý

Đăng ký chức năng ví chỉ trên kernel của tác nhân nên nắm giữ quyền chi tiêu. Plugin không phải là toàn cầu - một tác nhân mà kernel của nó không có không thể gọi nó. Cung cấp cho một tác nhân đánh giá một kernel không có chức năng ví, hoặc hạn chế các chức năng được phép theo tác nhân, để tiền vẫn ở một vai trò.

PITFALL 5

Xác minh các webhook với thân dữ liệu thô

Đọc nội dung yêu cầu thô và xác minh trước khi giải mã - HMAC bao phủ các byte chính xác, vì vậy một chuyến đi phân tích sau đó giải mã lại sẽ phá vỡ nó. Bộ xử lý .NET bên dưới thực hiện thuật toán đã được tài liệu: HMAC-SHA256 trên t.rawBody, một khoảng thời gian 300 giây và so sánh thời gian cố định. Python và Java xác minh theo cách tương tự với các thư viện HMAC của riêng họ.

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

Ba câu hỏi cụ thể về Semantic Kernel.

Có gói Semantic Kernel nào để cài đặt không (NuGet, PyPI hoặc Maven)?

Không. Con đường trung thực phụ thuộc vào ngôn ngữ của bạn. Python Semantic Kernel bọc khách hàng blockchain0x Python thực trong một @kernel_function, như đã chỉ ra ở trên. Java Semantic Kernel sử dụng SDK com.blockchain0x:sdk-jvm bên trong một KernelFunction. C# và các ngôn ngữ .NET khác không có SDK blockchain0x - các SDK lõi được gửi đi là Node, Python, Ruby, Go và JVM - vì vậy một KernelFunction .NET gọi trực tiếp REST API, cũng 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.

Vì sao chưa có .NET SDK, và điều đó có phải là vấn đề không?

Đó chỉ là nơi mà lộ trình SDK hiện tại: Node, Python, Ruby, Go và JVM đã được phát hành, .NET thì chưa. Nó không phải là một trở ngại. REST API là JSON đơn giản qua HTTPS với xác thực bearer-token, và một C# KernelFunction gọi POST /v1/payments (ở trên) chỉ là một vài dòng với HttpClient. Nếu một SDK .NET hàng đầu quan trọng với bạn, hãy cho chúng tôi biết và chúng tôi sẽ cân nhắc nó với nhu cầu.

Điều này có hoạt động với Agent Framework và Microsoft 365 Copilot không?

Có. Hàm wallet là một Semantic Kernel function thông thường, nên nó hoạt động trong các lần chạy ChatCompletionAgent đơn lẻ và trong các điều phối AgentGroupChat - chỉ đăng ký nó trên kernel của billing agent và để các agent khác làm việc sau khi thanh toán hoàn tất. Các extension Microsoft 365 Copilot chạy Semantic Kernel bên dưới cũng có thể đăng ký theo cách tương tự; hiển thị khoản thanh toán cho người dùng bằng UI của riêng bạn. Không có package riêng cho Copilot; vẫn là cùng một công thức.

Thêm thanh toán vào tác nhân SK của bạn.

Một KernelFunction trên khách hàng thực tế hoặc REST API, không cần cài đặt gói. Miễn phí để bắt đầu.