ข้ามไปยังเนื้อหาหลัก
การรวม SEMANTIC KERNEL

การรวมการชำระเงินของ Semantic Kernel.

ไม่จำเป็นต้องมีแพ็คเกจ Semantic Kernel ห่อหุ้มลูกค้า blockchain0x จริงในฟังก์ชัน KernelFunction (Python หรือ Java) หรือเรียก REST API จากฟังก์ชัน KernelFunction C# ไม่ว่าทางใดตัวแทนจะย้าย USDC บน Base

คำตอบสั้น

ไม่มีแพ็คเกจ Semantic Kernel ใน Python คุณห่อหุ้มไคลเอนต์จริง blockchain0x ในวิธีที่ตกแต่งด้วย @kernel_function; ใน C# ซึ่งไม่มี SDK .NET ที่จัดส่ง [KernelFunction] เรียก REST API โดยตรง ลงทะเบียนมันในเคอร์เนลของคุณ ตั้งค่า FunctionChoiceBehavior เป็น Auto และตัวแทนสามารถย้าย USDC บน Base 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 คุณห่อหุ้ม SDK blockchain0x จริงใน KernelFunction; ใน C# ซึ่งยังไม่มี SDK .NET ตัว KernelFunction จะเรียก REST API โดยตรงด้วย HttpClient คุณรักษาความสะดวกสบายแบบอัตลักษณ์ - วิธีการที่ตกแต่ง, async, การตรวจสอบพารามิเตอร์ตามแอตทริบิวต์ - และไม่มีเวอร์ชันตัวเชื่อมให้ติดตาม SDK หลักที่มีอยู่ในปัจจุบันคือ Node, Python, Ruby, Go และ JVM

การติดตั้ง

ติดตั้ง Semantic Kernel และ SDK หลักใน Python

ไม่มีแพ็คเกจ Semantic Kernel ของ blockchain0x ที่จะเพิ่ม Python ติดตั้ง Semantic Kernel พร้อมกับ SDK blockchain0x จริง; C# ติดตั้ง Microsoft.SemanticKernel และเรียก REST API ด้วย HttpClient ที่มีอยู่ Java ใช้ Semantic Kernel สำหรับ Java พร้อมกับ SDK com.blockchain0x:sdk-jvm.

ติดตั้ง - 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 (Python client จะอ่านค่านี้) คือคีย์ sk_test_ สำหรับ testnet หรือ sk_live_ สำหรับ mainnet จากแดชบอร์ดของคุณ; ตัวอย่าง C# REST จะอ่านค่าจาก BLOCKCHAIN0X_API_KEY ค่าเดียวกัน OPENAI_API_KEY (หรือ AZURE_OPENAI_* สำหรับโมเดลที่โฮสต์บน Azure) คือคีย์ LLM ของคุณ ส่วน webhook handler ยังต้องใช้ BLOCKCHAIN0X_WEBHOOK_SECRET เพิ่มเติมด้วย

ตัวอย่างตัวแทนเต็มรูปแบบ

KernelFunction ของกระเป๋าเงิน ใน Python และ C#.

Python ห่อหุ้มลูกค้า blockchain0x จริงในวิธีที่ตกแต่งด้วย @kernel_function C#, ที่ไม่มี SDK .NET ส่ง, เปิดเผย [KernelFunction] ที่เรียก POST /v1/payments โดยตรงด้วย HttpClient ทั้งสองลงทะเบียนในเคอร์เนลเป็น 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 minimal API สำหรับรับเหตุการณ์การชำระเงิน

เมื่อการชำระเงินถูกชำระ Blockchain0x POST เหตุการณ์ที่ลงนามไปยัง URL webhook ของคุณ ไม่มีตัวตรวจสอบ .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();

อัลกอริธึมคือ HMAC-SHA256 บนสตริง t.rawBody หน้าต่างการเล่นซ้ำ 300 วินาที และการเปรียบเทียบในเวลาคงที่ อ่านร่างดิบผ่าน StreamReader เพื่อให้ลายเซ็นยังคงอยู่; อย่าถอดรหัสแล้วทำการถอดรหัสใหม่ เหตุการณ์ที่ส่งคือ payment.received, payment.sent, wallet.deployed และ webhook.test ในการผลิต webhook มักทำงานเป็นบริการ ASP.NET Core แยกต่างหากที่แชร์ฐานข้อมูลกับตัวแทนเพื่อให้ทั้งสองสามารถประสานงานกันได้

แหล่งที่มาและเอกสาร

SDKs และพื้นผิว REST เป็นแบบเปิด อ่านพวกเขา

ไม่มี starter package ของ Semantic Kernel ให้ clone - สูตรด้านบนคือการเชื่อมต่อจริง SDK หลักของ blockchain0x (Node, Python, Ruby, Go) เป็น open source บน GitHub และ surface ของเมธอดพร้อมกับ REST routes ที่ตัวอย่าง C# เรียกใช้งาน ถูกอธิบายไว้ใน docs

docs.blockchain0x.com/docs/overview

surface ของเมธอดใน SDK และเส้นทาง REST ถูกอธิบายไว้ที่ the docs. เริ่มด้วยคีย์ sk_test_ บน Base Sepolia ก่อน แล้วค่อยสลับเป็น sk_live_ เมื่อ KernelFunction ทำงานได้ตามที่คุณคาดไว้

ข้อผิดพลาดทั่วไป

ห้าหมายที่เฉพาะเจาะจงเกี่ยวกับ Semantic Kernel ที่ควรหลีกเลี่ยง

โมเดลปลั๊กอินของ Semantic Kernel มีความชัดเจนแต่มีข้อควรระวังเกี่ยวกับการข้ามภาษาและพฤติกรรมเริ่มต้น การรู้จักพวกเขาล่วงหน้าช่วยประหยัดเวลา.

PITFALL 1

ไม่มีแพ็คเกจ Semantic Kernel ในภาษาใดๆ

ไม่มีตัวปรับ NuGet, PyPI หรือ Maven ตัว SDK หลักที่จัดส่งคือ Node, Python, Ruby, Go และ JVM - ไม่ใช่ .NET ดังนั้นเคอร์เนล Python จะห่อหุ้มไคลเอนต์ Python blockchain0x ใน @kernel_function เคอร์เนล Java ใช้ SDK com.blockchain0x:sdk-jvm และเคอร์เนล C# เรียก REST API โดยตรงจาก KernelFunction (แสดงข้างต้น) ทั้งสามเป็นไม่กี่บรรทัด.

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 ด้านล่างใช้วิธีการที่บันทึกไว้: HMAC-SHA256 บน t.rawBody, หน้าต่าง 300 วินาที และการเปรียบเทียบเวลาแบบคงที่ Python และ Java ตรวจสอบในลักษณะเดียวกันด้วยไลบรารี HMAC ของตนเอง.

คำถามที่พบบ่อย

สามคำถามเฉพาะ Semantic Kernel.

มีแพ็คเกจ Semantic Kernel ที่ต้องติดตั้ง (NuGet, PyPI หรือ Maven) หรือไม่?

ไม่ เส้นทางที่ตรงไปตรงมาขึ้นอยู่กับภาษาของคุณ Python Semantic Kernel ห่อหุ้มลูกค้า blockchain0x Python จริงใน @kernel_function ตามที่แสดงข้างต้น Java Semantic Kernel ใช้ SDK com.blockchain0x:sdk-jvm ภายใน KernelFunction C# และภาษา .NET อื่น ๆ ไม่มี SDK blockchain0x - SDK หลักที่จัดส่งคือ Node, Python, Ruby, Go และ JVM - ดังนั้น KernelFunction .NET จะเรียก REST API โดยตรง ซึ่งแสดงให้เห็นข้างต้น แพ็คเกจเฟรมเวิร์กที่จัดส่งเพียงแพ็คเกจเดียวคือ blockchain0x-langchain และ blockchain0x-crewai (ทั้งสองเป็น Python) บวกกับเซิร์ฟเวอร์ @blockchain0x/mcp

ทำไมถึงมีช่องว่าง SDK .NET และเป็นปัญหาหรือไม่?

นี่เป็นเพียงจุดที่แผนงาน SDK อยู่ในปัจจุบัน: Node, Python, Ruby, Go และ JVM มีการจัดส่ง แต่ .NET ยังไม่มี นี่ไม่ใช่ปัญหา REST API เป็น JSON ธรรมดาผ่าน HTTPS พร้อมการตรวจสอบสิทธิ์แบบ bearer-token และฟังก์ชัน C# KernelFunction ที่เรียก POST /v1/payments (ด้านบน) มีเพียงไม่กี่บรรทัดด้วย HttpClient หาก SDK .NET ชั้นหนึ่งมีความสำคัญกับคุณ แจ้งให้เราทราบและเราจะพิจารณามันตามความต้องการ

สิ่งนี้ทำงานร่วมกับ Agent Framework และ Microsoft 365 Copilot ได้หรือไม่?

ใช่ ฟังก์ชันกระเป๋าเงินเป็นฟังก์ชัน Semantic Kernel ธรรมดา ดังนั้นมันจึงทำงานในรอบ ChatCompletionAgent เดียวและในการจัดการ AgentGroupChat - ลงทะเบียนเฉพาะในเคอร์เนลของเอเจนต์ที่เรียกเก็บเงินและให้คนอื่นทำงานหลังจากการชำระเงินตั้งอยู่ ส่วนขยาย Microsoft 365 Copilot ที่รัน Semantic Kernel ภายใต้สามารถลงทะเบียนได้ในลักษณะเดียวกัน; แสดงการชำระเงินให้ผู้ใช้ด้วย UI ของคุณเอง ไม่มีแพ็คเกจเฉพาะ Copilot; นี่คือสูตรเดียวกัน

เพิ่มการเรียกเก็บเงินให้กับตัวแทน SK ของคุณ

A KernelFunction บนลูกค้าจริงหรือ REST API ไม่มีแพ็คเกจให้ติดตั้ง ฟรีในการเริ่มต้น.