メインコンテンツにスキップ
セマンティックカーネル統合

セマンティックカーネルの支払い統合。

Semantic Kernelパッケージは必要ありません。実際のblockchain0xクライアントをKernelFunction(PythonまたはJava)でラップするか、C# KernelFunctionからREST APIを呼び出します。いずれにせよ、エージェントはBase上でUSDCを移動させます。

短い回答

Semantic Kernelパッケージはありません。Pythonでは、実際のblockchain0xクライアントを@kernel_functionで装飾されたメソッドでラップします。C#では、.NET SDKが出荷されないため、[KernelFunction]がREST APIを直接呼び出します。それをカーネルに登録し、FunctionChoiceBehaviorをAutoに設定すれば、エージェントはBase上でUSDCを移動できます。出荷されたコアSDKはNode、Python、Ruby、Go、JVMです。

SEMANTIC KERNELの理由

唯一のエンタープライズグレードの.NETエージェントフレームワーク。

もしあなたのスタックがMicrosoft型(Azure、.NET、SQL Server、Teams、Copilot Studio)であれば、Semantic Kernelはほぼ確実に正しいエージェントフレームワークです。これはMicrosoftによって構築されており、Azure OpenAI、AKS、Entraと統合されており、他のフレームワークがマッチしない方法で.NET、Python、Java全体で一流のサポートを提供しています。そして、あなたが必要とするものをすでに提供しています: KernelFunctionは単なるメソッドですので、支払いを接続するのはあなたが書くメソッドであり、待つパッケージではありません。

それが、インストールするSemantic Kernelアダプタがない理由です。PythonとJavaでは、実際のblockchain0x SDKをKernelFunctionでラップします; C#では、まだ.NET SDKが出荷されていないため、KernelFunctionはHttpClientを使用してREST APIを直接呼び出します。あなたは慣用的なエルゴノミクスを維持します - 装飾されたメソッド、非同期、属性ベースのパラメータ検証 - そして追跡するアダプタバージョンはありません。今日存在するコアSDKはNode、Python、Ruby、Go、JVMです。

インストール

Semantic Kernelをインストールし、PythonでコアSDKをインストールします。

追加するblockchain0x Semantic Kernelパッケージはありません。PythonはSemantic Kernelと実際のblockchain0x SDKをインストールします。C#はMicrosoft.SemanticKernelをインストールし、組み込みのHttpClientでREST APIを呼び出します。JavaはJava用のSemantic Kernelとcom.blockchain0x:sdk-jvm SDKを使用します。

インストール - PYTHON
pip install semantic-kernel blockchain0x
INSTALL - .NET (Semantic Kernelのみ)
dotnet add package Microsoft.SemanticKernel
環境変数
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 がこれを読み込みます) は dashboard の sk_test_ testnet または sk_live_ mainnet キーです。C# REST の例でも同じ値を BLOCKCHAIN0X_API_KEY から読み込みます。OPENAI_API_KEY (または Azure-hosted models 用の AZURE_OPENAI_*) は LLM キーです。webhook handler には追加で BLOCKCHAIN0X_WEBHOOK_SECRET が必要です。

完全なエージェントの例

ウォレットKernelFunction、PythonおよびC#で。

Pythonは、@kernel_functionで装飾されたメソッド内で実際のblockchain0xクライアントをラップします。C#では、.NET SDKが出荷されていないため、HttpClientを使用してPOST /v1/paymentsを直接呼び出す[KernelFunction]を公開します。両方ともWallet.send_usdcとしてカーネルに登録されます; 周囲の儀式だけが異なります。

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.

ウェブフック処理

支払いイベントを受信するためのASP.NET CoreミニマルAPI。

支払いが決済されると、Blockchain0xはあなたのWebhook URLに署名されたイベントをPOSTします。出荷された.NET検証ツールはないため、ハンドラーは文書化されたHMACに対して手動で検証します - これはヘルパーが行うことです。以下は.NETの例で、PythonとJavaはそれぞれのHMACライブラリで同じ方法で検証します。

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

アルゴリズムは、文字列t.rawBodyに対するHMAC-SHA256、300秒のリプレイウィンドウ、および定数時間比較です。署名がそのまま保持されるようにStreamReaderを介して生のボディを読み取ります; デシリアライズしてから再シリアライズしないでください。出荷されたイベントはpayment.received、payment.sent、wallet.deployed、およびwebhook.testです。本番環境では、Webhookはしばしばエージェントとデータベースを共有する別のASP.NET Coreサービスとして実行され、両者が調整できます。

ソースとドキュメント

SDKとRESTの表面はオープンです。読んでください。

クローンする Semantic Kernel の starter package はありません - 上の recipe がそのまま integration です。blockchain0x の core SDK (Node, Python, Ruby, Go) は GitHub で open source であり、メソッド一覧と C# example が呼び出す REST routes は docs に記載されています。

docs.blockchain0x.com/docs/overview

SDK のメソッド一覧と REST ルートは the docs に記載されています。まずは Base Sepolia で sk_test_ key を使い、KernelFunction が想定どおり動いたら sk_live_ に切り替えてください。

一般的な落とし穴

Semantic Kernelに特有の避けるべき5つの罠。

セマンティックカーネルのプラグインモデルはクリーンですが、クロスランゲージや動作デフォルトの落とし穴があります。事前に知っておくことで時間を節約できます。

PITFALL 1

どの言語でもSemantic Kernelパッケージはありません。

NuGet、PyPI、またはMavenアダプターはありません。出荷されたコアSDKはNode、Python、Ruby、Go、JVMであり、.NETではありません。したがって、Pythonカーネルはblockchain0x Pythonクライアントを@kernel_functionでラップし、Javaカーネルはcom.blockchain0x:sdk-jvm SDKを使用し、C#カーネルはKernelFunctionからREST APIを直接呼び出します(上記参照)。すべて3つは数行です。

PITFALL 2

FunctionChoiceBehaviorはAutoでなければなりません

Semantic Kernelは、プロンプト実行設定でFunctionChoiceBehaviorがAutoに設定されている場合にのみプラグイン関数を呼び出します。デフォルトはNoneで、ユーザーがどれだけ明確に要求してもモデルはあなたのウォレット機能を呼び出しません。エージェントが関数を完全に無視する場合は、まずこれを確認してください。

PITFALL 3

金額はUSDCの基本単位であり、文字列として表されます

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

エージェント間のプラグインスコープ

支出権限を持つべきエージェントのカーネルにのみウォレット機能を登録します。このプラグインはグローバルではありません - カーネルにそれがないエージェントは呼び出すことができません。レビュアーエージェントにウォレット機能のないカーネルを与えるか、エージェントごとに許可された機能を制限して、資金が一つの役割に留まるようにします。

PITFALL 5

生のボディに対してWebhookを確認します。

生のリクエストボディを読み取り、デシリアライズする前に検証します - HMACは正確なバイトをカバーするため、パースしてから再シリアライズするラウンドトリップは壊れます。以下の.NETハンドラーは、文書化されたアルゴリズムを実装します: t.rawBodyに対するHMAC-SHA256、300秒のウィンドウ、および定数時間比較。PythonとJavaは、それぞれのHMACライブラリで同様に検証します。

よくある質問

Semantic Kernelに特有の質問が3つ。

インストールするためのSemantic Kernelパッケージはありますか(NuGet、PyPI、またはMaven)?

いいえ。正直な道はあなたの言語によります。Python Semantic Kernelは、実際のblockchain0x Pythonクライアントを@kernel_functionでラップします。Java Semantic Kernelは、KernelFunction内でcom.blockchain0x:sdk-jvm SDKを使用します。C#や他の.NET言語にはblockchain0x SDKがありません - 出荷されたコアSDKはNode、Python、Ruby、Go、JVMです - したがって、.NET KernelFunctionはREST APIを直接呼び出します。出荷されたフレームワークパッケージはblockchain0x-langchainとblockchain0x-crewai(両方ともPython)および@blockchain0x/mcpサーバーのみです。

.NET SDKのギャップがあるのはなぜで、それは問題ですか?

これは、SDKのロードマップが今日どこにあるかです: Node、Python、Ruby、Go、JVMは出荷されますが、.NETはまだです。これはブロッカーではありません。REST APIはHTTPS上のプレーンJSONで、ベアラートークン認証を使用し、C# KernelFunctionがPOST /v1/payments(上記)を呼び出すのは、HttpClientで数行です。もし一流の.NET SDKがあなたにとって重要であれば、私たちに知らせてください、そして需要に対してそれを考慮します。

これはAgent FrameworkおよびMicrosoft 365 Copilotで動作しますか?

はい。ウォレット機能は通常のSemantic Kernel関数であるため、単一のChatCompletionAgentの実行やAgentGroupChatのオーケストレーションで機能します - 請求エージェントのカーネルにのみ登録し、支払いが決済された後に他のエージェントが作業を行えるようにします。Semantic Kernelを内部で実行するMicrosoft 365 Copilot拡張は同じ方法で登録できます。ユーザーに独自のUIで支払いを表示します。Copilot特有のパッケージはありません。それは同じレシピです。

SKエージェントに請求を追加します。

実際のクライアントまたはREST APIに対するKernelFunction、インストールするパッケージはありません。無料で始められます。