주 콘텐츠로 건너뛰기
시맨틱 커널 통합

시맨틱 커널 결제 통합.

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
설치 - .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 (the Python client reads this)는 dashboard의 sk_test_ testnet 또는 sk_live_ mainnet 키입니다. C# REST 예제는 같은 값을 BLOCKCHAIN0X_API_KEY에서 읽습니다. OPENAI_API_KEY (또는 Azure-hosted 모델의 AZURE_OPENAI_*)는 LLM 키입니다. webhook handler에는 추가로 BLOCKCHAIN0X_WEBHOOK_SECRET가 필요합니다.

전체 에이전트 예시들

지갑 KernelFunction, Python 및 C#에서.

Python은 @kernel_function으로 장식된 메서드에서 실제 blockchain0x 클라이언트를 래핑합니다. .NET SDK가 제공되지 않는 C#에서는 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가 귀하의 웹훅 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입니다. 프로덕션에서는 웹훅이 종종 에이전트와 데이터베이스를 공유하는 별도의 ASP.NET Core 서비스로 실행되어 두 개가 조정될 수 있습니다.

소스 및 문서

SDK와 REST 표면은 공개되어 있습니다. 읽어보십시오.

복제할 Semantic Kernel starter package는 없습니다 - 위의 recipe가 바로 integration입니다. blockchain0x core SDK(Node, Python, Ruby, Go)는 GitHub에서 open source로 제공되며, 해당 method surface와 C# 예제가 호출하는 REST route는 docs에 문서화되어 있습니다.

docs.blockchain0x.com/docs/overview

SDK method surface와 REST route는 the docs에 문서화되어 있습니다. Base Sepolia에서 sk_test_ 키로 시작한 다음, KernelFunction이 예상대로 동작하면 sk_live_로 전환하세요.

일반적인 함정

Semantic Kernel에 특화된 피해야 할 다섯 가지 함정.

시맨틱 커널의 플러그인 모델은 깔끔하지만 언어 간 및 동작 기본값에 대한 문제점이 있습니다. 이를 미리 아는 것이 시간을 절약합니다.

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를 직접 호출합니다. 세 가지 모두 몇 줄입니다.

PITFALL 2

FunctionChoiceBehavior는 자동이어야 합니다.

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

원시 본문에 대해 웹훅을 검증하십시오.

원시 요청 본문을 읽고 역직렬화하기 전에 확인하세요 - HMAC는 정확한 바이트를 커버하므로 파싱 후 재직렬화하는 왕복이 이를 깨뜨립니다. 아래의 .NET 핸들러는 문서화된 알고리즘을 구현합니다: t.rawBody에 대한 HMAC-SHA256, 300초 창, 그리고 상수 시간 비교. Python과 Java는 각자의 HMAC 라이브러리로 동일한 방식으로 확인합니다.

자주 묻는 질문

세 가지 Semantic Kernel 관련 질문.

설치할 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으로, bearer-token 인증을 사용하며, POST /v1/payments(위의) 호출하는 C# KernelFunction은 HttpClient로 몇 줄의 코드입니다. 일급 .NET SDK가 중요하다면, 알려주시면 수요에 따라 고려하겠습니다.

이것이 Agent Framework 및 Microsoft 365 Copilot과 함께 작동합니까?

네. 지갑 기능은 일반적인 Semantic Kernel 기능이므로 단일 ChatCompletionAgent 실행 및 AgentGroupChat 조정에서 작동합니다 - 결제가 정산된 후 다른 에이전트가 작업을 수행할 수 있도록 청구 에이전트의 커널에만 등록하세요. Semantic Kernel을 내부에서 실행하는 Microsoft 365 Copilot 확장도 같은 방식으로 등록할 수 있습니다; 귀하의 UI로 사용자에게 결제를 표시하세요. Copilot 특정 패키지는 없으며, 동일한 레시피입니다.

SK 에이전트에 청구를 추가하세요.

실제 클라이언트 또는 REST API에 대한 KernelFunction, 설치할 패키지가 없습니다. 무료로 시작할 수 있습니다.