মূল বিষয়বস্তুতে যান
AUTOGEN INTEGRেশন

AutoGen পেমেন্ট ইন্টিগ্রেশন।

এখানে কোনো AutoGen প্যাকেজ নেই, এবং আপনার একটি প্রয়োজন নেই। প্রকৃত blockchain0x ক্লায়েন্টকে একটি ফাংশনে মোড়ান, এটি আপনার এজেন্টকে দিন, এবং এটি Base-এ USDC স্থানান্তর করতে পারে।

সংক্ষিপ্ত উত্তর

AutoGen-এর জন্য আলাদা কোনো package নেই, এবং আপনারও তা দরকার নেই। AutoGen ইতিমধ্যেই একটি plain typed function-কে tool-এ রূপান্তর করে, তাই আপনি real Python client-কে একটি function-এ wrap করেন, -কে এর মাধ্যমে দেন, এবং agent Base-এ USDC পাঠাতে, invoice settle করতে, এবং wallet পড়তে পারে। সেট করুন এবং শুরু করুন।

কেন কোনও প্যাকেজ নেই

AutoGen ইতিমধ্যে একটি ফাংশনকে একটি টুল তৈরি করে। সেটি ব্যবহার করুন।

AutoGen একটি টুল স্কিমা একটি Python ফাংশনের স্বাক্ষর এবং ডক্সট্রিং থেকে সরাসরি তৈরি করে। একটি নিবেদিত AutoGen অ্যাডাপ্টার কেবল একটি ফাংশন মোড়ানো হবে যা আমরা যেভাবেই লিখতাম, তারপর AutoGen-এর দ্রুত গতির API-এর সাথে সিঙ্ক থেকে বিচ্যুত হবে। তাই আমরা একটি পাঠাই না। আপনি কয়েকটি লাইন লেখেন যা আসল blockchain0x ক্লায়েন্টকে কল করে, এবং আপনি আর্গুমেন্ট, যাচাইকরণ এবং ত্রুটি পরিচালনার সম্পূর্ণ নিয়ন্ত্রণ রাখেন।

এটি সেই একই ক্লায়েন্ট যা পাঠানো LangChain এবং CrewAI অ্যাডাপ্টারগুলি আড়ালে মোড়ানো। এখানে আপনি এটি নিজেই মোড়ান, যার মানে হল যে ট্র্যাক করার জন্য কোনও অ্যাডাপ্টার সংস্করণ নেই এবং আপনার এজেন্ট এবং API এর মধ্যে আপনার নিজস্ব ফাংশন ছাড়া কিছু নেই। মাল্টি-এজেন্ট টিমগুলি একইভাবে কাজ করে: একটি এজেন্টকে ওয়ালেট ফাংশন দিন, অন্যদের ছেড়ে দিন এবং ব্যয় করার ক্ষমতা একটি জায়গায় থাকে।

ইনস্টলেশন

AutoGen এবং মূল SDK ইনস্টল করুন। একটি পরিবেশ পরিবর্তনশীল।

কোনও নিবেদিত AutoGen প্যাকেজ যোগ করার জন্য নেই। আপনি AutoGen (Python 3.10+) এবং প্রকৃত blockchain0x কোর SDK ইনস্টল করেন, তারপর নিচের ফাংশনটি লেখেন। এটি সম্পূর্ণ নির্ভরতা তালিকা।

ইনস্টল করুন
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
পরিবেশ ভেরিয়েবল
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY আপনার ড্যাশবোর্ড থেকে একটি sk_test_ testnet বা sk_live_ mainnet কী; ক্লায়েন্ট এটি পরিবেশ থেকে পড়ে। যদি আপনার এজেন্টও অর্থ গ্রহণ করে, তবে ওয়েবহুক হ্যান্ডলার অতিরিক্তভাবে BLOCKCHAIN0X_WEBHOOK_SECRET প্রয়োজন, যা আপনি একটি ওয়েবহুক তৈরি বা রোটেট করার সময় একবার ড্যাশবোর্ড ফেরত দেয়।

রেসিপি

একটি ফাংশন যা অর্থ প্রদান করে, একটি AssistantAgent কে হস্তান্তরিত হয়।

নিচে পুরো ইন্টিগ্রেশন রয়েছে। send_usdc আসল blockchain0x ক্লায়েন্টকে কল করে; AssistantAgent(tools=[send_usdc]) এটিকে একটি টুলে পরিণত করে যা মডেল কল করতে পারে। AutoGen টাইপ হিন্ট এবং ডক্সট্রিং পড়ে স্কিমা তৈরি করে, তাই সেগুলি সৎ রাখুন। এটি চালান এবং এজেন্টটি Base-এ USDC স্থানান্তর করে।

এজেন্ট.পি
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
from blockchain0x import Client

blockchain0x = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

# AutoGen turns a plain typed function into a tool. No dedicated package needed.
def send_usdc(agent_id: str, to: str, amount_wei: str) -> str:
    """Send a USDC payment from an agent wallet.

    amount_wei is USDC base units (6 decimals), so "10000" is 0.01 USDC.
    """
    result = blockchain0x.payments.create(
        body={"agentId": agent_id, "to": to, "amountWei": amount_wei},
    )
    return str(result)

treasurer = AssistantAgent(
    name="treasurer",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    tools=[send_usdc],
    system_message="You pay vendor invoices in USDC within owner-set limits.",
)

result = await treasurer.run(
    task="Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.",
)

When the agent decides to pay, it calls send_usdc, the SDK submits the transfer, and you get a transaction hash back. amount_wei is base units, so 0.01 USDC is "10000". A sk_test_ key keeps it on Base Sepolia until you switch to sk_live_. Add more functions - read a wallet, settle an invoice - the same way; each becomes another entry in tools.

ওয়েবহুক হ্যান্ডলিং

একটি স্বাক্ষরিত ওয়েবহুক দিয়ে ইনবাউন্ড পেমেন্ট নিশ্চিত করুন।

যদি আপনার এজেন্টও USDC গ্রহণ করে, তবে এটি ওয়েবহুকের সাথে নিশ্চিত করুন পোলিংয়ের পরিবর্তে। যাচাই সহায়ক নোড SDK তে শিপ করে; একটি পাইথন সার্ভিসে আপনি নথিভুক্ত HMAC এর বিরুদ্ধে হাতে যাচাই করেন, যা সহায়কটি করে। নিচে FastAPI উদাহরণ; একই কোড যেকোন অ্যাসিঙ্ক পাইথন ফ্রেমওয়ার্কে কাজ করে।

ওয়েবহুক.PY
import hmac, hashlib, os, time
from fastapi import FastAPI, Request, HTTPException

app = FastAPI()
SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode()

@app.post("/webhooks/payment")
async def receive(request: Request):
    raw = await request.body()  # RAW bytes - do not parse first
    sig = request.headers.get("X-Blockchain0x-Signature", "")
    ts = request.headers.get("X-Blockchain0x-Timestamp", "")
    parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p)
    t, v1 = parts.get("t", ts), parts.get("v1", sig)
    want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300:
        raise HTTPException(status_code=401)
    if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received":
        await trigger_followup()  # USDC landed - run the next step
    return {"ok": True}

অ্যালগরিদমটি t.rawBody স্ট্রিংয়ের উপর HMAC-SHA256, একটি ধ্রুবক-সময়ের তুলনা, এবং একটি 300-সেকেন্ডের পুনরায় প্লে উইন্ডো। কাঁচা শরীরটি await request.body() এর মাধ্যমে পড়ুন, কখনও request.json() পুনরায় সিরিয়ালাইজ করবেন না, কারণ এটি সিগনেচার দ্বারা কভার করা বাইটগুলি পরিবর্তন করে। চালানো ইভেন্টগুলি হল payment.received, payment.sent, wallet.deployed, এবং webhook.test। ভারী অনুসরণ কাজের জন্য, একটি কাজ (Celery, RQ, arq) এনকিউ করুন এবং হ্যান্ডলারকে ব্লক করার পরিবর্তে 200 তাত্ক্ষণিকভাবে প্রতিক্রিয়া জানান।

সূত্র এবং ডক্স

আপনি যেটি মোড়াচ্ছেন ক্লায়েন্টটি খোলা। এটি পড়ুন।

এখন ক্লোন করার জন্য কোন AutoGen স্টার্টার প্যাকেজ নেই - উপরের রেসিপিটি ইন্টিগ্রেশন। blockchain0x SDK গুলি GitHub এ ওপেন সোর্স; এই রেসিপিটি Python SDK (blockchain0x-python) মোড়ানো, ডকসে সম্পূর্ণ পদ্ধতি পৃষ্ঠ সহ। ফাংশন বডিগুলির জন্য একটি রেফারেন্স হিসাবে এটি পড়ুন।

github.com/tosh-labs/blockchain0x-python

পূর্ণ SDK পদ্ধতি পৃষ্ঠ এবং স্কোপগুলি ডকস এ নথিভুক্ত। Base Sepolia এর বিরুদ্ধে একটি sk_test_ কী দিয়ে শুরু করুন, তারপর যখন ফাংশন আপনার প্রত্যাশা অনুযায়ী কাজ করে তখন sk_live_ এ স্যুইচ করুন।

সাধারণ ফাঁদ

পাঁচটি গ্রুপ-চ্যাট এবং অ্যাসিঙ্ক ফাঁদ এড়ানো উচিত।

AutoGen এর মাল্টি-এজেন্ট + অ্যাসিঙ্ক ডিজাইন শক্তিশালী প্যাটার্নগুলি আনলক করে কিন্তু এর নিজস্ব ফুটগানগুলি পরিচয় করিয়ে দেয়। এগুলি আমাদের সমর্থন ইনবক্স থেকে আসে।

PITFALL 1

এখানে কোনো AutoGen প্যাকেজ নেই - আপনি SDK মোড়ান

Blockchain0x LangChain এবং CrewAI এর জন্য অ্যাডাপ্টার পাঠায় এবং MCP সার্ভার; কোনও নিবেদিত AutoGen প্যাকেজ নেই। উপরের রেসিপিটি হল সমর্থিত পথ: একটি সাধারণ টাইপ করা ফাংশন যা আসল blockchain0x ক্লায়েন্টকে কল করে, AssistantAgent(tools=[...])-এ হস্তান্তরিত। AutoGen ফাংশনের স্বাক্ষর এবং ডক্সট্রিং পড়ে টুল স্কিমা তৈরি করে, তাই ডক্সট্রিংটি সঠিক রাখুন।

PITFALL 2

পরিমাণগুলি USDC বেস ইউনিট, স্ট্রিং হিসাবে

payments.create takes amountWei: 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". Type the tool argument as str and validate it before the call - a float that sneaks through either errors at the backend or moves a millionth of what you meant.

PITFALL 3

send_payment প্রাথমিকভাবে 503 উত্তর দিতে পারে

payments.create ডিফল্টভাবে পুনরায় চেষ্টা করে না এবং আপনার নেটওয়ার্কের জন্য চেইন অ্যাডাপ্টার সংযুক্ত না হওয়া পর্যন্ত 503 ফেরত দিতে পারে। একটি ব্যর্থ পেমেন্টে গ্রুপ চ্যাট লুপ করতে দেবেন না - আপনার ফাংশনের মধ্যে ত্রুটি ধরুন, একটি স্পষ্ট বার্তা ফেরত দিন যা মডেল কার্যকর করতে পারে এবং স্বয়ংক্রিয়ভাবে তৈরি করা idempotency কীতে নির্ভর করুন যাতে একটি ম্যানুয়াল পুনরায় চেষ্টা দ্বিগুণ পেমেন্ট না করে।

PITFALL 4

AutoGen 0.4+ অ্যাসিঙ্ক; SDK কল সিঙ্ক

AutoGen 0.4 একটি অ্যাসিঙ্ক লুপে টুল চালায়। blockchain0x ক্লায়েন্ট কলটি সিঙ্ক্রোনাস, যা একটি দ্রুত অনুরোধের জন্য ঠিক আছে, তবে একটি ধীর কল লুপটি ব্লক করে। যদি আপনি বাস্তব ভলিউম সরান, তবে SDK কলটি asyncio.to_thread দিয়ে মোড়ান যাতে ইভেন্ট লুপ প্রতিক্রিয়া রাখে। প্রতি পালায় একটি একক পেমেন্টের জন্য, সরাসরি কল করা ঠিক আছে।

PITFALL 5

কাঁচা শরীরের বিরুদ্ধে ইনবাউন্ড ওয়েবহুক যাচাই করুন

যদি আপনার এজেন্টও টাকা গ্রহণ করে, তবে এটি ওয়েবহুকের সাথে নিশ্চিত করুন, পোলিং দ্বারা নয়। RAW রিকোয়েস্ট বাইটের উপরে স্বাক্ষর যাচাই করুন (await request.body()), কখনো request.json() পুনঃসিরিয়ালাইজড নয়, কারণ HMAC সঠিক বাইটগুলি কভার করে। এটি HMAC-SHA256 একটি 300-সেকেন্ড পুনরায় খেলার উইন্ডো সহ। নিচের হ্যান্ডলারটি পুরো বিষয়।

প্রায়শই জিজ্ঞাসিত

তিনটি AutoGen-নির্দিষ্ট প্রশ্ন।

ইনস্টল করার জন্য কি একটি নিবেদিত AutoGen প্যাকেজ আছে?

না। একটি নিবেদিত AutoGen অ্যাডাপ্টার নেই, এবং এটি ইচ্ছাকৃত - AutoGen ইতিমধ্যেই একটি সাধারণ টাইপ করা ফাংশনকে একটি টুলে পরিণত করে, তাই সৎ পথ হল বাস্তব blockchain0x ক্লায়েন্টকে একটি ফাংশনে মোড়ানো এবং এটি আপনার এজেন্টকে দেওয়া, যেমন উপরে দেখানো হয়েছে। একমাত্র বিতরণ করা ফ্রেমওয়ার্ক প্যাকেজগুলি হল blockchain0x-langchain এবং blockchain0x-crewai (দুইটি Python) এবং @blockchain0x/mcp সার্ভার। অন্যান্য সবকিছু, AutoGen সহ, এই কয়েক লাইন রেসিপি।

রেসিপিটি কি ক্লাসিক AutoGen (0.2.x) এবং 0.4+ উভয়েই কাজ করে?

হ্যাঁ, কারণ পেমেন্ট লজিকটি কেবল একটি পাইথন ফাংশন - এতে কিছুই AutoGen-সংস্করণ-নির্দিষ্ট নেই। 0.4+ এ আপনি এটি AssistantAgent(tools=[...]) এর মাধ্যমে উপরে উল্লেখিত হিসাবে পাস করেন। 0.2.x ConversableAgent লাইনে আপনি register_function দিয়ে একই ফাংশন নিবন্ধন করেন। আমদানি করার জন্য কোন .legacy সাবমডিউল নেই কারণ কোন প্যাকেজ নেই; আপনি ফাংশনের মালিক।

আমার এজেন্ট কীভাবে USDC গ্রহণ করে বা একটি ইনভয়েস নিষ্পত্তি করে, শুধু পাঠায় না?

একইভাবে ক্লায়েন্টের আরও অংশ মোড়ান। blockchain0x.transactions.get একটি লেনদেন পড়ে, blockchain0x.agents.get এবং blockchain0x.agents.list ওয়ালেট পড়ে, এবং blockchain0x.payment_requests.settle একটি ইনভয়েস নিষ্পত্তি করে যা আপনি ড্যাশবোর্ডে তৈরি করেছেন অন-চেইন প্রমাণ সহ। প্রতিটি আপনার টুলের তালিকায় আরেকটি টাইপ করা ফাংশন হয়ে যায়। ইনবাউন্ড পেমেন্টগুলি নিচের payment.received ওয়েবহুকের মাধ্যমে নিশ্চিত হয় (নিচের হ্যান্ডলারের সাথে এটি যাচাই করুন); একটি নতুন ইনভয়েস তৈরি করার জন্য কোন টুল নেই, যেহেতু পেমেন্ট অনুরোধগুলি ড্যাশবোর্ডে তৈরি হয়।

আপনার AutoGen এজেন্টকে একটি ওয়ালেট দিন।

কিছু লাইন বাস্তব ক্লায়েন্টকে মোড়ানো, ইনস্টল করার জন্য কোন প্যাকেজ নেই। শুরু করতে বিনামূল্যে।