Zum Hauptinhalt springen
SEMANTISCHE KERNEL-INTEGRATION

Semantic Kernel-Zahlungsintegration.

Kein Semantic Kernel-Paket erforderlich. Wickeln Sie den echten blockchain0x-Client in eine KernelFunction (Python oder Java) ein oder rufen Sie die REST-API von einer C# KernelFunction auf. In jedem Fall bewegt der Agent USDC auf Base.

KURZE ANTWORT

Es gibt kein Semantic Kernel-Paket. In Python wickeln Sie den echten blockchain0x-Client in eine Methode ein, die mit @kernel_function dekoriert ist; in C#, wo kein .NET SDK geliefert wird, ruft ein [KernelFunction] die REST-API direkt auf. Registrieren Sie es auf Ihrem Kernel, setzen Sie FunctionChoiceBehavior auf Auto, und der Agent kann USDC auf Base bewegen. Die gelieferten Kern-SDKs sind Node, Python, Ruby, Go und JVM.

WARUM SEMANTIC KERNEL

Das einzige Enterprise-Grade .NET-Agenten-Framework.

Wenn Ihr Stack Microsoft-ähnlich ist (Azure, .NET, SQL Server, Teams, Copilot Studio), ist Semantic Kernel mit Sicherheit das richtige Agenten-Framework. Es wurde von Microsoft entwickelt, integriert sich mit Azure OpenAI, AKS und Entra und bietet erstklassige Unterstützung für .NET, Python und Java in einer Weise, die kein anderes Framework erreicht. Und es gibt Ihnen bereits das, was Sie brauchen: eine KernelFunction ist einfach eine Methode, sodass das Einbinden von Zahlungen eine Methode ist, die Sie schreiben, nicht ein Paket, auf das Sie warten.

Deshalb gibt es keinen Semantic Kernel-Adapter zu installieren. In Python und Java wickeln Sie das echte blockchain0x SDK in eine KernelFunction ein; in C#, wo noch kein .NET SDK bereitgestellt wird, ruft die KernelFunction die REST-API direkt mit HttpClient auf. Sie behalten idiomatische Ergonomie - dekorierte Methoden, asynchron, attributbasierte Parametervalidierung - und es gibt keine Adapterversion zu verfolgen. Die heute existierenden Kern-SDKs sind Node, Python, Ruby, Go und JVM.

INSTALLATION

Installieren Sie Semantic Kernel und, in Python, das Kern-SDK.

Es gibt kein blockchain0x Semantic Kernel-Paket hinzuzufügen. Python installiert Semantic Kernel plus das echte blockchain0x SDK; C# installiert Microsoft.SemanticKernel und ruft die REST-API mit dem integrierten HttpClient auf. Java verwendet Semantic Kernel für Java plus das com.blockchain0x:sdk-jvm SDK.

INSTALLIEREN - PYTHON
pip install semantic-kernel blockchain0x
INSTALLIEREN - .NET (nur Semantic Kernel)
dotnet add package Microsoft.SemanticKernel
UMGEBUNGSVARIABLEN
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 (der Python-Client liest dies) ist ein sk_test_ Testnet- oder sk_live_ Mainnet-Schlüssel von Ihrem Dashboard; das C# REST-Beispiel liest denselben Wert von BLOCKCHAIN0X_API_KEY. OPENAI_API_KEY (oder AZURE_OPENAI_* für Azure-gehostete Modelle) ist Ihr LLM-Schlüssel. Der Webhook-Handler benötigt zusätzlich BLOCKCHAIN0X_WEBHOOK_SECRET.

VOLLE AGENTENBEISPIELE

Eine Wallet-KernelFunction, in Python und C#.

Python umschließt den echten blockchain0x-Client in einer Methode, die mit @kernel_function dekoriert ist. C#, wo kein .NET SDK ausgeliefert wird, exponiert eine [KernelFunction], die POST /v1/payments direkt mit HttpClient aufruft. Beide registrieren sich im Kernel als Wallet.send_usdc; nur das umgebende Zeremoniell unterscheidet sich.

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.

WEBHOOK-VERARBEITUNG

ASP.NET Core minimale API zum Empfangen von Zahlungsereignissen.

Wenn eine Zahlung abgeschlossen ist, POSTet Blockchain0x ein signiertes Ereignis an Ihre Webhook-URL. Es gibt keinen gelieferten .NET-Überprüfer, daher überprüft der Handler manuell gegen das dokumentierte HMAC - was ein Helfer tun würde. .NET-Beispiel unten; Python und Java überprüfen auf die gleiche Weise mit ihren eigenen HMAC-Bibliotheken.

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();

Der Algorithmus ist HMAC-SHA256 über den String t.rawBody, ein 300-Sekunden-Wiederholungsfenster und ein konstanter Vergleich. Lesen Sie den Rohkörper über StreamReader, damit die Signatur intakt bleibt; deserialisieren Sie nicht und serialisieren Sie dann erneut. Die gelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test. In der Produktion läuft der Webhook oft als separater ASP.NET Core-Dienst, der sich eine Datenbank mit dem Agenten teilt, sodass die beiden koordinieren können.

QUELLE UND DOKUMENTE

Die SDKs und die REST-Oberfläche sind offen. Lesen Sie sie.

Es gibt kein Semantic Kernel-Starterpaket zum Klonen - die obigen Rezepte sind die Integration. Die blockchain0x-Kern-SDKs (Node, Python, Ruby, Go) sind Open Source auf GitHub, und ihre Methodenoberfläche sowie die REST-Routen, die das C#-Beispiel aufruft, sind in den Dokumenten dokumentiert.

docs.blockchain0x.com/docs/overview

Die SDK-Methodenoberfläche und die REST-Routen sind in den Dokumenten dokumentiert. Beginnen Sie mit einem sk_test_ Schlüssel gegen Base Sepolia und wechseln Sie zu sk_live_, wenn die KernelFunction das tut, was Sie erwarten.

HÄUFIGE FALLSTRICK

Fünf Semantic Kernel-spezifische Fallen, die zu vermeiden sind.

Das Plugin-Modell des Semantic Kernels ist sauber, hat jedoch sprachübergreifende und verhaltensbedingte Fallstricke. Wenn man sie im Voraus kennt, spart das Zeit.

PITFALL 1

Es gibt kein Semantic Kernel-Paket, in keiner Sprache.

Es gibt keinen NuGet-, PyPI- oder Maven-Adapter. Die gelieferten Kern-SDKs sind Node, Python, Ruby, Go und JVM - nicht .NET. Ein Python-Kernel wickelt den blockchain0x-Python-Client in eine @kernel_function ein, ein Java-Kernel verwendet das com.blockchain0x:sdk-jvm SDK, und ein C#-Kernel ruft die REST-API direkt von einer KernelFunction (oben gezeigt) auf. Alle drei sind nur ein paar Zeilen.

PITFALL 2

FunctionChoiceBehavior muss Auto sein

Der Semantic Kernel ruft Plugin-Funktionen nur auf, wenn FunctionChoiceBehavior auf Auto in den Einstellungen zur Ausführung des Prompts gesetzt ist. Der Standardwert ist None, sodass das Modell Ihre Wallet-Funktion niemals aufruft, egal wie klar der Benutzer fragt. Wenn der Agent die Funktion vollständig ignoriert, überprüfen Sie dies zuerst.

PITFALL 3

Beträge sind USDC-Basiseinheiten, als Strings

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

Plugin-Bereich über Agenten hinweg

Registrieren Sie die Wallet-Funktion nur im Kernel des Agenten, der die Ausgabenberechtigung haben sollte. Das Plugin ist nicht global - ein Agent, dessen Kernel es nicht hat, kann es nicht aufrufen. Geben Sie einem Überprüfungsagenten einen Kernel ohne die Wallet-Funktion oder beschränken Sie die erlaubten Funktionen pro Agent, damit das Geld bei einer Rolle bleibt.

PITFALL 5

Überprüfen Sie Webhooks gegen den Rohkörper

Lesen Sie den Rohdatenkörper der Anfrage und verifizieren Sie, bevor Sie deserialisieren - das HMAC deckt die genauen Bytes ab, sodass eine Parse-then-Reserialize-Rundreise es bricht. Der .NET-Handler unten implementiert den dokumentierten Algorithmus: HMAC-SHA256 über t.rawBody, ein 300-Sekunden-Fenster und einen Vergleich in konstanter Zeit. Python und Java verifizieren auf die gleiche Weise mit ihren eigenen HMAC-Bibliotheken.

HÄUFIG GESTELLTE FRAGEN

Drei Semantic Kernel-spezifische Fragen.

Gibt es ein Semantic Kernel-Paket zu installieren (NuGet, PyPI oder Maven)?

Nein. Der ehrliche Weg hängt von Ihrer Sprache ab. Python Semantic Kernel wickelt den echten blockchain0x Python-Client in eine @kernel_function, wie oben gezeigt. Java Semantic Kernel verwendet das com.blockchain0x:sdk-jvm SDK innerhalb einer KernelFunction. C# und die anderen .NET-Sprachen haben kein blockchain0x SDK - die ausgelieferten Kern-SDKs sind Node, Python, Ruby, Go und JVM - daher ruft eine .NET KernelFunction die REST-API direkt auf, ebenfalls oben gezeigt. Die einzigen ausgelieferten Framework-Pakete sind blockchain0x-langchain und blockchain0x-crewai (Python) sowie der @blockchain0x/mcp-Server.

Warum gibt es eine .NET SDK-Lücke, und ist das ein Problem?

Es ist nur der Stand der SDK-Roadmap heute: Node, Python, Ruby, Go und JVM werden ausgeliefert, .NET noch nicht. Es ist kein Blocker. Die REST API ist einfaches JSON über HTTPS mit Bearer-Token-Authentifizierung, und eine C# KernelFunction, die POST /v1/payments (oben) aufruft, ist eine Handvoll Zeilen mit HttpClient. Wenn ein erstklassiges .NET SDK für Sie wichtig ist, lassen Sie es uns wissen und wir werden es gegen die Nachfrage abwägen.

Funktioniert das mit dem Agent Framework und Microsoft 365 Copilot?

Ja. Die Wallet-Funktion ist eine gewöhnliche Semantic Kernel-Funktion, sodass sie in einzelnen ChatCompletionAgent-Läufen und in AgentGroupChat-Orchestrierungen funktioniert - registrieren Sie sie nur im Kernel des Abrechnungsagenten und lassen Sie die anderen nach der Zahlungsabwicklung arbeiten. Microsoft 365 Copilot-Erweiterungen, die Semantic Kernel im Hintergrund ausführen, können sie auf die gleiche Weise registrieren; präsentieren Sie die Zahlung dem Benutzer mit Ihrer eigenen UI. Es gibt kein Copilot-spezifisches Paket; es ist dasselbe Rezept.

Fügen Sie Ihrem SK-Agenten eine Abrechnung hinzu.

Eine KernelFunction über den echten Client oder die REST API, kein Paket zu installieren. Kostenlos starten.