1. အစုလိုက် ခေါ်ဆိုမှု ကြိမ်နှုန်း ထိန်းချုပ်ခြင်း နှင့် rate limiting
Anthropic သည် organization အဆင့် rate limit များ ထားရှိပါတယ်။ automation စနစ်ကို ဒီဘောကျမှုအတွက် ဒီဇိုင်းလုပ်ပြီး anti-abuse classifier မဖြစ်အောင် ရှောင်ပါ။
Rate limit အဆင့်များ (2026-08 အရ)
| အကောင့် အဆင့် | RPM (တောင်းဆိုမှု/မိနစ်) | TPM (Token/မိနစ်) | နေ့စဉ် Token ကန့်သတ်ချက် |
|---|---|---|---|
| Free Tier | 5 | 40,000 | 50,000 |
| Pro Tier | 50 | 200,000 | 5,000,000 |
| Team Tier | 100 | 400,000 | 10,000,000 |
| Enterprise | စိတ်ကြိုက် | စိတ်ကြိုက် | ညှိနှိုင်း |
Adaptive rate limiter အကောင်အထည် ဖော်ခြင်း
class AdaptiveRateLimiter {
private requestQueue: Array<() => Promise> = [];
private activeRequests = 0;
private maxConcurrency: number;
private minDelay: number; // ms between requests
constructor(rpm: number, maxConcurrency = 5) {
this.maxConcurrency = maxConcurrency;
this.minDelay = (60 / rpm) * 1000;
}
async execute(fn: () => Promise): Promise {
while (this.activeRequests >= this.maxConcurrency) {
await new Promise(resolve => setTimeout(resolve, 100));
}
this.activeRequests++;
try {
const result = await fn();
await new Promise(resolve => setTimeout(resolve, this.minDelay));
return result;
} catch (error: any) {
if (error.status === 429) {
// Rate limit hit, exponential backoff
const retryAfter = error.headers?.['retry-after'] || 60;
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
return this.execute(fn); // Retry
}
throw error;
} finally {
this.activeRequests--;
}
}
}
// Usage
const limiter = new AdaptiveRateLimiter(50); // 50 RPM for Pro tier
const results = await Promise.all(
prompts.map(prompt => limiter.execute(() => callClaude(prompt)))
);
2. Anti-abuse ရှာဖွေမှုကို ရှောင်ခြင်း
Anthropic backend classifier များသည် model distillation သို့မဟုတ် ခွင့်မပြု scraping ပုံစံများကို ရှာဖွေပါတယ်။ လူ့အမူအကျင့် ကဲ့သို့ ပြုမူအောင် လုပ်ပါ။
လူ့အမူအကျင့် simulation နည်းလမ်းများ
- Prompt ကွဲပြားမှု: prompt များတွင် သဘာဝ ဘာသာစကား ကွဲပြားမှု ထည့်ပါ။ တူညီသောမေးခွန်း 1000 ခု တစ်ပြိုင်တည်း မပို့ပါနှင့်။
- Jitter ထည့်သွင်းမှု: တောင်းဆိုမှုကြား မှ delay ကို ကျပန်းပေးပါ (ဥပမာ 100-3000ms uniform distribution)။
- Session အကန့်: တောင်းဆိုမှု 20-50 ခုစီ session အဖြစ် ပိုင်းခြားပြီး 5-10 မိနစ် အနားယူပါ။
- Output အရှည် ကွဲပြားမှု: တောင်းဆိုမှုတိုင်း
max_tokensကို မတူအောင် ပြောင်းပါ၊ output အရှည် တည်ညံသော ပုံစံ မဖြစ်စေရ။
Prompt ကွဲပြားမှု ဥပမာ
const templates = [
"Refactor this code:
{code}",
"Can you improve this function?
{code}",
"Please optimize:
{code}",
"How would you rewrite this?
{code}",
];
function varyPrompt(code: string): string {
const template = templates[Math.floor(Math.random() * templates.length)];
const prefix = Math.random() > 0.5 ? "Here's my code: " : "";
return prefix + template.replace("{code}", code);
}
3. အကောင့်များစွာ polling နှင့် load balancing
အယောင်အထည်မြင့် workload များကို Claude အကောင့် များစွာတွင် ဖြန့်ဝေပါ၊ organization တစ်ခုချင်းစီ rate limit ကိုရှောင်ပြီး distillation အန္တရာယ်လျော့စေမည်။
Round-robin load balancer
class MultiAccountBalancer {
private accounts: Array<{ apiKey: string; weight: number }>;
private currentIndex = 0;
private requestCounts: Map = new Map();
constructor(accounts: Array<{ apiKey: string; weight?: number }>) {
this.accounts = accounts.map(acc => ({
apiKey: acc.apiKey,
weight: acc.weight || 1
}));
}
getNextAccount(): string {
// Weighted round-robin selection
const totalWeight = this.accounts.reduce((sum, acc) => sum + acc.weight, 0);
let random = Math.random() * totalWeight;
for (const account of this.accounts) {
random -= account.weight;
if (random <= 0) {
this.requestCounts.set(account.apiKey,
(this.requestCounts.get(account.apiKey) || 0) + 1);
return account.apiKey;
}
}
return this.accounts[0].apiKey;
}
getStats(): Record {
return Object.fromEntries(this.requestCounts);
}
}
// Usage
const balancer = new MultiAccountBalancer([
{ apiKey: "sk-ant-api03-...", weight: 2 }, // Pro account, higher weight
{ apiKey: "sk-ant-api04-...", weight: 1 }, // Free account, lower weight
]);
async function callWithBalancing(prompt: string) {
const apiKey = balancer.getNextAccount();
return await anthropic.messages.create({
apiKey,
model: "claude-sonnet-4.5-high",
messages: [{ role: "user", content: prompt }],
});
}
4. စစ်ဆေးမှတ်တမ်း နှင့် လိုက်နာမှု စစ်ဆေးစာရင်း
compliance စစ်ဆေးမှုနှင့် ပြင်ဆင်ခြင်းအတွက် automation လုပ်ဆောင်မှု မှတ်တမ်းများ ပြည့်စုံစွာ သိမ်းပါ။
Audit log schema
interface AuditLog {
timestamp: string;
accountId: string;
requestId: string;
model: string;
inputTokens: number;
outputTokens: number;
cacheHit: boolean;
latencyMs: number;
statusCode: number;
errorMessage?: string;
sourceIP: string;
userAgent: string;
}
// Log every API call
async function auditedCall(prompt: string): Promise {
const start = Date.now();
try {
const response = await anthropic.messages.create({...});
await logAudit({
timestamp: new Date().toISOString(),
accountId: "org-123",
requestId: response.id,
model: response.model,
inputTokens: response.usage.input_tokens,
outputTokens: response.usage.output_tokens,
cacheHit: response.usage.cache_read_input_tokens > 0,
latencyMs: Date.now() - start,
statusCode: 200,
sourceIP: await getPublicIP(),
userAgent: "my-automation/1.0",
});
return response;
} catch (error: any) {
await logAudit({
timestamp: new Date().toISOString(),
statusCode: error.status || 500,
errorMessage: error.message,
latencyMs: Date.now() - start,
...
});
throw error;
}
}
လိုက်နာမှု ကိုယ်တိုင် စစ်ဆေးစာရင်း
- automation တောင်းဆိုမှု အားလုံး API key သုံးမည်၊ ခိုးယူထားသော session token မဟုတ်ပါ။
- automation သည် Anthropic rate limit ကို လေးစားမည်၊ ပြင်းထန်စွာ ကျော်ပါးခြင်း မပြုလုပ်ပါ။
- output သည် ပြန်ရောင်းခြင်း သို့မဟုတ် အများသုံး model သင်ခြင်း မဟုတ် အတွင်းပိုင် tool အတွက် ဖြစ်ရမည်။
- စစ်ဆေးမှတ်တမ်း အတွက် log 90 ရက် သိမ်းမည်။
- API traffic အတွက် residential IP သုံးမည်၊ အမြောက်အမြား automation အတွက် datacenter IP မသုံးပါ။
- automation workflow တွင် prompt injection နှင့် jailbreak ကြိုးစားမှု မပါဝင်ရ။