Ana içeriğe atla
ANLAMSEL ÇEKİRDEK ENTEGRASYONU

Semantic Kernel ödeme entegrasyonu.

Semantic Kernel paketi gerekmez. Gerçek blockchain0x istemcisini bir KernelFunction (Python veya Java) içine sarın veya bir C# KernelFunction'dan REST API'yi çağırın. Her durumda, ajan Base üzerinde USDC taşır.

KISA CEVAP

Semantic Kernel paketi yoktur. Python'da gerçek blockchain0x istemcisini @kernel_function ile süslenmiş bir yöntem içinde sararsınız; C#'da, .NET SDK'sı gönderilmeyen yerde, bir [KernelFunction] REST API'yi doğrudan çağırır. Bunu çekirdeğinize kaydedin, FunctionChoiceBehavior'ı Auto olarak ayarlayın ve ajansınız Base üzerinde USDC taşıyabilir. Gönderilen çekirdek SDK'lar Node, Python, Ruby, Go ve JVM'dir.

NEDEN SEMANTİK ÇEKİRDEK

Tek kurumsal düzeyde .NET ajan çerçevesi.

Eğer yığınınız Microsoft şekilli ise (Azure, .NET, SQL Server, Teams, Copilot Studio), Semantic Kernel muhtemelen doğru ajan çerçevesidir. Microsoft tarafından inşa edilmiştir, Azure OpenAI, AKS ve Entra ile entegre olur ve diğer hiçbir çerçevenin eşleşmediği şekilde .NET, Python ve Java'da birinci sınıf destek sunar. Ve zaten ihtiyacınız olan şeyi size verir: bir KernelFunction sadece bir yöntemdir, bu nedenle ödemeleri bağlamak, beklediğiniz bir paket değil, yazdığınız bir yöntemdir.

Bu nedenle, kurulum için bir Semantic Kernel adaptörü yoktur. Python ve Java'da gerçek blockchain0x SDK'sını bir KernelFunction içinde sararsınız; C#'da, henüz .NET SDK'sı yoksa, KernelFunction REST API'yi doğrudan HttpClient ile çağırır. İdiomatik ergonomiyi korursunuz - süslü yöntemler, asenkron, öznitelik tabanlı parametre doğrulaması - ve takip edilecek bir adaptör sürümü yoktur. Bugün mevcut olan temel SDK'lar Node, Python, Ruby, Go ve JVM'dir.

KURULUM

Semantic Kernel'i ve Python'da çekirdek SDK'yı kurun.

Ekleyecek bir blockchain0x Semantic Kernel paketi yoktur. Python, Semantic Kernel'ı ve gerçek blockchain0x SDK'sını kurar; C#, Microsoft.SemanticKernel'ı kurar ve REST API'yi yerleşik HttpClient ile çağırır. Java, Java için Semantic Kernel'ı ve com.blockchain0x:sdk-jvm SDK'sını kullanır.

KUR - PYTHON
pip install semantic-kernel blockchain0x
KURULUM - .NET (Sadece Semantic Kernel)
dotnet add package Microsoft.SemanticKernel
ORTAM DEĞİŞKENLERİ
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 istemcisi bunu okur) dashboard'unuzdan alınan bir sk_test_ testnet veya sk_live_ mainnet anahtarıdır; C# REST örneği aynı değeri BLOCKCHAIN0X_API_KEY'den okur. OPENAI_API_KEY (veya Azure-hosted modeller için AZURE_OPENAI_*) sizin LLM anahtarınızdır. Webhook handler ayrıca BLOCKCHAIN0X_WEBHOOK_SECRET gerektirir.

TAM AJAN ÖRNEKLERİ

Bir cüzdan KernelFunction, Python ve C#'da.

Python, gerçek blockchain0x istemcisini @kernel_function ile süslenmiş bir yöntemle sarar. .NET SDK'sının gönderilmediği C#, doğrudan HttpClient ile POST /v1/payments çağıran bir [KernelFunction] sunar. Her ikisi de çekirdek üzerinde Wallet.send_usdc olarak kaydedilir; yalnızca çevresindeki tören farklıdır.

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 İŞLEME

Ödeme olaylarını almak için ASP.NET Core minimal API.

Bir ödeme yerleştiğinde, Blockchain0x imzalı bir olayı webhook URL'nize POST eder. Gönderilen bir .NET doğrulayıcı yoktur, bu nedenle işleyici belgelenmiş HMAC'a karşı elle doğrular - bu da bir yardımcı programın yapacağı tek şeydir. Aşağıdaki .NET örneği; Python ve Java kendi HMAC kütüphaneleri ile aynı şekilde doğrular.

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

Algoritma, t.rawBody dizesi üzerinde HMAC-SHA256, 300 saniyelik bir tekrar penceresi ve sabit zamanlı karşılaştırma ile çalışır. İmzanın bozulmaması için ham veriyi StreamReader aracılığıyla okuyun; serileştirmeyin ve ardından yeniden serileştirmeyin. Gönderilen olaylar payment.received, payment.sent, wallet.deployed ve webhook.test'tir. Üretimde, webhook genellikle bir veritabanını ajansla paylaşan ayrı bir ASP.NET Core hizmeti olarak çalışır, böylece ikisi koordine olabilir.

KAYNAK VE BELGELER

SDK'lar ve REST yüzeyi açıktır. Okuyun.

Klonlanacak bir Semantic Kernel starter package yok - yukarıdaki recipe'ler entegrasyonun kendisidir. blockchain0x core SDK'leri (Node, Python, Ruby, Go) GitHub'da open source'dur ve method surface ile C# örneğinin çağırdığı REST route'lar dokümanlarda yer alır.

docs.blockchain0x.com/docs/overview

SDK method surface ve REST route'lar the docs içinde belgelenmiştir. Base Sepolia üzerinde bir sk_test_ anahtarıyla başlayın, ardından KernelFunction beklediğiniz gibi çalıştığında sk_live_ anahtarına geçin.

YAYGIN TUZAKLAR

Beş Semantic Kernel'a özgü kaçınılması gereken tuzak.

Semantic Kernel'in eklenti modeli temizdir ancak dil geçişleri ve davranış varsayılanları ile ilgili bazı sorunlar vardır. Bunları önceden bilmek zaman kazandırır.

PITFALL 1

Herhangi bir dilde Semantic Kernel paketi yoktur.

NuGet, PyPI veya Maven adaptörü yoktur. Gönderilen çekirdek SDK'lar Node, Python, Ruby, Go ve JVM'dir - .NET değil. Bu nedenle, bir Python çekirdeği blockchain0x Python istemcisini @kernel_function içinde sarar, bir Java çekirdeği com.blockchain0x:sdk-jvm SDK'sını kullanır ve bir C# çekirdeği REST API'yi doğrudan bir KernelFunction'dan (yukarıda gösterildiği gibi) çağırır. Üçü de birkaç satırdır.

PITFALL 2

FunctionChoiceBehavior otomatik olmalıdır

Semantic Kernel yalnızca FunctionChoiceBehavior, istem yürütme ayarlarında Auto olarak ayarlandığında eklenti işlevlerini çağırır. Varsayılan None'dır, bu nedenle model, kullanıcı ne kadar net bir şekilde isterse istesin cüzdan işlevinizi asla çağırmaz. Eğer ajan işlevi tamamen göz ardı ederse, önce bunu kontrol edin.

PITFALL 3

Tutarlar, dize olarak USDC temel birimleridir

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

Ajanlar arasında eklenti kapsamı

Cüzdan işlevini yalnızca harcama yetkisini tutması gereken ajanın çekirdeğine kaydedin. Eklenti küresel değildir - çekirdeğinde bu işlev olmayan bir ajan onu çağıramaz. Bir gözden geçiren ajana cüzdan işlevi olmayan bir çekirdek verin veya her ajan için izin verilen işlevleri kısıtlayın, böylece para bir rolde kalır.

PITFALL 5

Webhook'ları ham gövdeye karşı doğrula

Ham istek gövdesini okuyun ve ayrıştırmadan önce doğrulayın - HMAC, tam baytları kapsar, bu nedenle bir ayrıştırma-sonra-yeniden-serialize gidiş dönüşü onu bozar. Aşağıdaki .NET işleyici, belgelenmiş algoritmayı uygular: t.rawBody üzerinde HMAC-SHA256, 300 saniyelik bir pencere ve sabit zaman karşılaştırması. Python ve Java, kendi HMAC kütüphaneleri ile aynı şekilde doğrular.

SIKÇA SORULAN

Üç Semantic Kernel'e özgü soru.

Kurulacak bir Semantic Kernel paketi var mı (NuGet, PyPI veya Maven)?

Hayır. Dürüst yol, dilinize bağlıdır. Python Semantic Kernel, gerçek blockchain0x Python istemcisini yukarıda gösterildiği gibi bir @kernel_function içine sarar. Java Semantic Kernel, bir KernelFunction içinde com.blockchain0x:sdk-jvm SDK'sını kullanır. C# ve diğer .NET dilleri blockchain0x SDK'sına sahip değildir - gönderilen temel SDK'lar Node, Python, Ruby, Go ve JVM'dir - bu nedenle bir .NET KernelFunction, REST API'yi doğrudan çağırır, yukarıda gösterildiği gibi. Gönderilen tek çerçeve paketleri blockchain0x-langchain ve blockchain0x-crewai'dir (her ikisi de Python) ve @blockchain0x/mcp sunucusudur.

.NET SDK neden eksik ve bu bir sorun mu?

Bu, SDK yol haritasının bugün bulunduğu yerdir: Node, Python, Ruby, Go ve JVM gönderilir, .NET henüz yok. Bu bir engel değildir. REST API, bearer-token kimlik doğrulaması ile HTTPS üzerinden düz JSON'dur ve POST /v1/payments (yukarıda) çağrısını yapan bir C# KernelFunction, HttpClient ile birkaç satırdır. Birinci sınıf bir .NET SDK sizin için önemliyse, bize bildirin ve talebe göre değerlendireceğiz.

Bu, Agent Framework ve Microsoft 365 Copilot ile çalışıyor mu?

Evet. Wallet function sıradan bir Semantic Kernel function'ıdır, bu yüzden tek ChatCompletionAgent çalıştırmalarında ve AgentGroupChat orkestrasyonlarında çalışır - onu yalnızca billing agent'ın kernel'ine kaydedin ve payment settle olduktan sonra diğerlerinin işi yapmasına izin verin. Altta Semantic Kernel çalıştıran Microsoft 365 Copilot extension'ları da onu aynı şekilde kaydedebilir; payment'i kullanıcıya kendi UI'nizle gösterin. Copilot'a özel bir package yoktur; aynı recipe'dir.

SK ajanınıza faturalama ekleyin.

Gerçek istemci veya REST API üzerinde bir KernelFunction, yüklemek için paket yok. Başlamak ücretsiz.