メインコンテンツにスキップ
LANGCHAIN統合

LangChain支払い統合。

任意のLangChainエージェントにUSDC支払いを追加します。実際のPythonパッケージは、数行で送信、決済、読み取りのウォレットツールを提供します。

短い回答

Blockchain0x は実用的な Python パッケージ を提供しており、LangChain エージェントにネイティブのウォレットツールを付与します: Base 上で USDC を送信し、オンチェーン証明付きで請求書を決済し、ウォレットと取引を読み取れます。インストールして を設定し、 を呼び出して、そのツールをエージェントに渡してください。TypeScript ではどうするか? npm アダプターはありません - x402 クライアントを LangChain.js のツールでラップしてください。

ラッパーが存在する理由

Blockchain0x HTTP APIの上に1つの薄いレイヤー。

blockchain0x-langchainのすべてのツールは、公式のblockchain0xコアSDKの薄いラッパーです。再実装されたRESTやx402ロジックはなく、キーの保管もありません:アダプタはあなたのAPIキーをバックエンドに転送し、独自の秘密は保持しません。create_blockchain0x_toolset(client)はLangChainに5つのツールを提供します - 支払いを送信、請求書を精算、ウォレットを読み取り、ウォレットをリストし、トランザクションを読み取ります - それぞれがすでに型付けされ、スコープが設定されています。

好みであれば、RAW APIまたはコアSDKを直接呼び出すこともできます。アダプターは最も抵抗が少ないパスです。APIは契約です。両方の最新を追い求めるのではなく、blockchain0x-langchainをサポートするlangchain-core範囲に固定してください。

インストール

1つのインストール。1つの環境変数。準備完了。

このパッケージはPython 3.9以降が必要です。core blockchain0x SDKとlangchain-coreを依存関係として取り込みます; 追加するものはありません。

インストール
pip install blockchain0x-langchain
環境変数
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY は Blockchain0x dashboard の sk_test_ testnet または sk_live_ mainnet キーです。adapter が必要とするのはこの変数だけで、キーを backend に転送するだけであり、adapter 自身は秘密情報を保持しません。下に示す webhook handler では、webhook を作成またはローテーションしたときに dashboard が 1 回だけ返す BLOCKCHAIN0X_WEBHOOK_SECRET も設定します。

完全なエージェントの例

支払いサポート付きの動作するLangChainエージェント。

以下はPythonでの完全なLangChainエージェントです。create_blockchain0x_toolsetはウォレットツールを返し、create_react_agentはそれらをReActループに接続し、モデルはプロンプトから適切なツールを選択します。BLOCKCHAIN0X_API_KEYを設定し、実行すると、エージェントはBase上でUSDCを移動および読み取ることができます。

AGENT.PY
from blockchain0x import Client
from blockchain0x_langchain import create_blockchain0x_toolset
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

client = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment
tools = create_blockchain0x_toolset(client)

llm = ChatOpenAI(model="gpt-4o")
agent = create_react_agent(llm, tools)

result = agent.invoke({
    "messages": [{
        "role": "user",
        "content": "Pay 0.01 USDC from my agent to 0xRecipient for the dataset.",
    }],
})

Run it with the prompt above and the model picks the send-payment tool, the SDK submits the transfer on Base, and you get a transaction hash back. amount_wei is USDC base units (6 decimals), so 0.01 USDC is the string "10000". A sk_test_ key keeps you on Base Sepolia until you switch to sk_live_. Heads up: payments.create can answer 503 until the chain adapter is wired for your network.

ウェブフック処理

ユーザーが支払った後に何が起こるか。

あなたのエージェントのWebhook URL(Blockchain0xダッシュボードで設定)は、支払いが決済されるとPOSTを受け取ります。Webhook検証ヘルパーはNode SDKに含まれているため、このハンドラーはTypeScriptですが、あなたのエージェントはPythonです。以下は、署名を確認し、支払い作業を実行するExpressハンドラーです。任意のHTTPフレームワークで同じパターンを使用してください。

WEBHOOK-HANDLER.TS
import express from "express";
import { webhooks } from "@blockchain0x/node";

const app = express();
// Capture the RAW body. The HMAC is over the exact bytes on the wire.
app.use(express.raw({ type: "application/json" }));

app.post("/webhooks/payment", (req, res) => {
  const result = webhooks.verify({
    headers: req.headers,
    rawBody: req.body, // Buffer, raw bytes
    secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!,
  });
  if (!result.ok) return res.status(400).json({ code: result.code });

  if (result.eventType === "payment.received") {
    // USDC landed in your agent wallet - do the paid work
  }
  res.status(200).send("ok");
});

webhooks.verifyは一定時間でHMAC-SHA256を実行し、識別されたユニオンを返します。したがって、try/catchなしでresult.okに分岐し、result.eventTypeを読み取ります。生のボディを読み取り、解析されたコピーではなく、解析して再シリアル化すると署名が壊れます。出荷されたイベントはpayment.received、payment.sent、wallet.deployed、webhook.testです。エージェントへの受信チャージはpayment.receivedです。

TYPESCRIPT? X402クライアントをラップする

npm LangChainアダプターはありません。ここに正直なレシピがあります。

出荷されたLangChainアダプタはPython専用です。npmにはLangChainアダプタはありません。TypeScriptのLangChainまたはLangGraphエージェントの場合、実際のx402クライアントをLangChain.jsツールで自分でラップします。数行で済み、専用アダプタが内部で行うことと全く同じです。

PAY-TOOL.TS
import { createClient } from "@blockchain0x/node";
import { createX402Client } from "@blockchain0x/x402/client";
import { tool } from "@langchain/core/tools";
import { z } from "zod";

const sdk = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! });
const fetchWithPay = createX402Client({ sdk });

// There is no npm LangChain adapter. Wrap the x402 client in a LangChain.js tool.
export const payAndFetch = tool(
  async ({ url }) => (await fetchWithPay(url)).text(),
  {
    name: "pay_and_fetch",
    description: "Fetch a URL, answering any x402 payment challenge automatically",
    schema: z.object({ url: z.string().url() }),
  },
);

ソースと testnet の例は the Python SDK repo にあり、SDK の対応表は the docs にあります。Python の smoke example は、LangChain tool がラップしているのと同じ send-payment action を使って、Base Sepolia 上で実際の $0.01 USDC transfer を送信します。

一般的な落とし穴

初回の統合で問題を引き起こす5つのこと。

これらは私たちのサポート受信箱からのものです。どれも取引を破るものではありませんが、事前に知っていると、各々1時間の頭を悩ませることを節約します。

PITFALL 1

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

The payment tools take amount_wei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Always pass a string; large integers lose precision as JSON numbers. Send "5.00" and you will either get a validation error or move a millionth of what you meant.

PITFALL 2

請求書ツールは決済しますが、作成はしません。

blockchain0x_settle_invoiceは、オンチェーンの証拠を持つ既存の支払いリクエストを決済します。新しい請求書を作成したり、ホストされたチェックアウトリンクを生成するツールはありません:支払いリクエストはダッシュボードで作成され、コアSDKは決済のみを公開します。エージェントが即座に支払い可能なリンクを生成することを期待していた場合、それはその形ではありません。バンド外でリクエストを作成し、エージェントにそれを決済させてください。

PITFALL 3

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

WebhooksはあなたのURLにPOSTし、そのURLを知っている誰でもジャンクをPOSTできます。イベントを信頼する前に、RAWリクエストバイトに対して@blockchain0x/nodeからwebhooks.verifyを実行します。最初にJSONを解析すると、HMACは一致しません。なぜなら、署名は到着した正確なバイトをカバーするからです。これは300秒のリプレイウィンドウを持つHMAC-SHA256です。これをスキップすることは、最も一般的なプロダクションミスです。

PITFALL 4

send_paymentは早期に503を返すことがあります

payments.createは、blockchain0x_send_paymentでラップされており、デフォルトでは再試行せず、チェーンアダプターがネットワークに接続されるまで503を返すことがあります。エラー時にLLMがツールを再試行ループで叩かせないでください:トークンを消費し、意図のログを混乱させます。組み込みの冪等性キーに依存し、失敗を明らかにし、次に進んでください。

PITFALL 5

langchain-coreのバージョンを一致させる

blockchain0x-langchain 0.1.x は langchain-core >=0.2,<0.4 を対象にしています。adapter が対応しているより新しい core を使っている場合は、両方の最新を追うのではなく、対応する組み合わせを固定してください。support matrix は docs にあります。

よくある質問

LangChainに特有の質問が3つ。

私のエージェントはUSDCを受け取ることができますか、それとも送信だけですか?

はい、2つの方法があります。受動的:あなたのエージェントはウォレットアドレスと公開ページを持っているため、誰でも支払うことができ、チェーンが決済されるとpayment.received webhookが発火します。能動的:blockchain0x_settle_invoiceは、ダッシュボードで作成した支払いリクエストを決済し、オンチェーン証明を記録します。エージェント内部から新しい請求書やホストされたリンクを作成するツールはありません。ダッシュボードでリクエストを作成し、エージェントにそれを決済させます。多くのセットアップは両方を使用します:チップ用の公開ページ、特定の請求書用の決済ツール。

これはLangGraphで機能しますか?

はい。create_blockchain0x_toolsetは標準のLangChainツールを返すため、create_react_agent(上記参照)、AgentExecutor、またはメッセージを処理する任意のLangGraphノードに組み込まれ、チェックポイントと人間をループに組み合わせます。これがPythonのストーリーです。あなたのLangGraphエージェントがTypeScriptの場合、npmアダプターはありません:createX402Client(または@blockchain0x/nodeクライアント)をLangChain.jsツールにラップします。上記のTypeScriptレシピのように。

どのチェーンとトークンがサポートされていますか?

Baseメインネット(sk_live_キー)とBase Sepoliaテストネット(sk_test_キー)、6桁の小数でUSDCで決済されます。これが今日の全てのライブサーフェスです:1つのチェーンファミリー、1つのトークン。他のチェーンはロードマップにあり、まだ切り替えられていないので、まだそれに基づいて設計しないでください。キーのプレフィックスがネットワークを選択し、sk_test_キーはメインネットの資金を移動できないため、構築中に必要なガードレールです。

LangChainエージェントに支払いを接続してください。

pip installから数分で最初の有料リクエストまで。無料で始められます。