OpenAI SDK
OpenAI Node.js SDK는 바로 사용 가능합니다.설치
- npm
- yarn
- pnpm
npm install openai
yarn add openai
pnpm add openai
기본 사용법
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.arouter.ai/v1",
apiKey: "lr_live_xxxx",
});
const response = await client.chat.completions.create({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(response.choices[0].message.content);
멀티 Provider
// OpenAI SDK를 통한 Anthropic 사용
const response = await client.chat.completions.create({
model: "anthropic/claude-sonnet-4.6",
messages: [{ role: "user", content: "Hello!" }],
});
// OpenAI SDK를 통한 DeepSeek 사용
const response = await client.chat.completions.create({
model: "deepseek/deepseek-v3.2",
messages: [{ role: "user", content: "Hello!" }],
});
스트리밍
const stream = await client.chat.completions.create({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "시를 써주세요." }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
Anthropic SDK
Anthropic Node.js SDK는 네이티브로 사용 가능합니다.설치
- npm
- yarn
- pnpm
npm install @anthropic-ai/sdk
yarn add @anthropic-ai/sdk
pnpm add @anthropic-ai/sdk
기본 사용법
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.arouter.ai",
apiKey: "lr_live_xxxx",
});
const message = await client.messages.create({
model: "claude-sonnet-4.6",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello!" }],
});
console.log(message.content[0].text);
스트리밍
const stream = client.messages.stream({
model: "claude-sonnet-4.6",
max_tokens: 1024,
messages: [{ role: "user", content: "이야기를 해주세요." }],
});
for await (const event of stream) {
if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
process.stdout.write(event.delta.text);
}
}
ARouter SDK
퍼스트파티@arouter/sdk는 key 관리 및 사용량 추적 등 추가 기능을 제공합니다.
설치
- npm
- yarn
- pnpm
npm install @arouter/sdk
yarn add @arouter/sdk
pnpm add @arouter/sdk
채팅 완성
import { ARouter } from "@arouter/sdk";
const router = new ARouter({
apiKey: "lr_live_xxxx",
baseURL: "https://api.arouter.ai",
});
const response = await router.chatCompletion({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(response.choices[0].message.content);
스트리밍
const stream = await router.chatCompletionStream({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "하이쿠를 써주세요." }],
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
Key 관리
관리 키(lr_mgmt_)를 사용하여 API key를 생성하고 관리합니다.
const mgmt = new ARouter({
apiKey: "lr_mgmt_xxxx",
baseURL: "https://api.arouter.ai",
});
const key = await mgmt.createKey({
name: "backend-service",
allowed_providers: ["openai", "anthropic"],
limit: 150,
limit_reset: "monthly",
});
console.log("API Key:", key.key);
const keys = await mgmt.listKeys();
console.log("Keys:", keys.data);
await mgmt.updateKey(key.data.hash, { disabled: true });
await mgmt.deleteKey(key.data.hash);
지갑 JWT + x402 결제
암호화폐 지갑을 가진 AI 에이전트는 SIWx로 인증하고 x402로 크레딧을 결제할 수 있습니다. SDK는 지갑 JWT를 캐시하고 이후 요청의 Bearer token으로 사용합니다.EVM(Base)
import { ARouter, withX402EvmPayment } from "@arouter/sdk";
import { privateKeyToAccount } from "viem/accounts";
const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`);
const client = withX402EvmPayment(
new ARouter({ baseURL: "https://api.arouter.ai", apiKey: "" }),
signer,
);
const response = await client.chatCompletion({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "Hello" }],
});
Solana
import { ARouter, withX402SolanaPayment } from "@arouter/sdk";
const client = withX402SolanaPayment(
new ARouter({ baseURL: "https://api.arouter.ai", apiKey: "" }),
solanaSigner,
{ address: solanaAddress, signMessage: (msg) => signEd25519(msg) },
);
SIWx만(자동 결제 없음)
import { ARouter, withSIWxAuth } from "@arouter/sdk";
const client = await withSIWxAuth(
new ARouter({ baseURL: "https://api.arouter.ai", apiKey: "" }),
{ address: "0xYourAddress", signMessage: (msg) => signer.signMessage({ message: msg }) },
);