Cài đặt
code
npm install @anthropic-ai/sdk
hoặc
code
yarn add @anthropic-ai/sdk
Khởi tạo Client
code
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({
apiKey: "your-shopaikey-api-key",
baseURL: "https://api.shopaikey.com",
});
Messages API
Gọi API cơ bản
code
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [{ role: "user", content: "Xin chào!" }],
});
console.log(message.content[0].text);
Sử dụng System Prompt
code
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
system: "Bạn là một trợ lý AI chuyên về lập trình.",
max_tokens: 1024,
messages: [
{ role: "user", content: "Giải thích về async/await trong JavaScript" },
],
});
console.log(message.content[0].text);
Streaming Response
code
const stream = await anthropic.messages.stream({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [{ role: "user", content: "Kể cho tôi một câu chuyện dài" }],
});
for await (const chunk of stream) {
if (chunk.type === "content_block_delta") {
process.stdout.write(chunk.delta.text);
}
}
Xử lý Streaming với Event Handlers
code
const stream = await anthropic.messages.stream({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [{ role: "user", content: "Viết một bài thơ" }],
});
stream.on("text", (text) => {
process.stdout.write(text);
});
const message = await stream.finalMessage();
console.log("\n\nUsage:", message.usage);
Vision API (Nhận diện hình ảnh)
code
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [
{
role: "user",
content: [
{
type: "image",
source: {
type: "url",
url: "https://example.com/image.png",
},
},
{
type: "text",
text: "Bức ảnh này có nội dung gì? Hãy mô tả chi tiết.",
},
],
},
],
});
console.log(message.content[0].text);
Vision với Base64 Image
code
const fs = require("fs");
const imageBuffer = fs.readFileSync("./image.jpg");
const base64Image = imageBuffer.toString("base64");
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [
{
role: "user",
content: [
{
type: "image",
source: {
type: "base64",
media_type: "image/jpeg",
data: base64Image,
},
},
{
type: "text",
text: "Mô tả hình ảnh này",
},
],
},
],
});
Hội thoại đa lượt (Multi-turn Conversation)
code
const messages = [{ role: "user", content: "Tôi tên là Huy" }];
let message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: messages,
});
messages.push({
role: "assistant",
content: message.content[0].text,
});
messages.push({
role: "user",
content: "Bạn nhớ tên tôi là gì không?",
});
message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: messages,
});
console.log(message.content[0].text);
Tool Use (Function Calling)
code
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
tools: [
{
name: "get_weather",
description: "Lấy thông tin thời tiết tại một địa điểm",
input_schema: {
type: "object",
properties: {
location: {
type: "string",
description: "Tên thành phố hoặc địa điểm",
},
unit: {
type: "string",
enum: ["celsius", "fahrenheit"],
},
},
required: ["location"],
},
},
],
messages: [
{ role: "user", content: "Thời tiết ở Hà Nội hôm nay như thế nào?" },
],
});
if (message.stop_reason === "tool_use") {
const toolUse = message.content.find((block) => block.type === "tool_use");
console.log("Tool to call:", toolUse.name);
console.log("Parameters:", toolUse.input);
}
Xử lý lỗi
code
try {
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});
} catch (error) {
if (error instanceof Anthropic.APIError) {
console.error("API Error:", error.status);
console.error("Message:", error.message);
} else {
console.error("Unexpected error:", error);
}
}
TypeScript Support
code
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({
apiKey: process.env.SHOPAIKEY_API_KEY!,
baseURL: "https://api.shopaikey.com",
});
async function chat(message: string): Promise<string> {
const response = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [{ role: "user", content: message }],
});
return response.content[0].type === "text" ? response.content[0].text : "";
}
Chi tiết API: Tạo hoàn thành trò chuyện (Native Stream)
(Create Chat Completion - Native Format)
API này cho phép gửi tin nhắn đến các mô hình Claude bằng định dạng gốc (/v1/messages).
- Phương thức:
POST - URL:
https://api.shopaikey.com/v1/messages
Yêu cầu (Request)
Headers
Body (application/json)
Khác với định dạng OpenAI, định dạng Anthropic cho phép tham số system nằm ở cấp cao nhất (top-level) thay vì nằm trong mảng messages.
code
{
"model": "claude-3-5-sonnet-20241022",
"system": "Bạn là một trợ lý AI hữu ích.",
"messages": [
{
"role": "user",
"content": "Bạn là ai?!"
}
],
"max_tokens": 4096,
"stream": true
}
Các tham số chính:
model(string): ID mô hình Claude (ví dụ:claude-3-5-sonnet-20241022,claude-3-opus-20240229).system(string): Lời nhắc hệ thống (System prompt) để định hình hành vi của AI.messages(array): Danh sách tin nhắn hội thoại.role:userhoặcassistant.content: Nội dung tin nhắn.
max_tokens(integer): Số lượng token tối đa cho câu trả lời.stream(boolean):trueđể nhận dữ liệu thời gian thực.
Ví dụ gọi API (cURL)
code
curl --location --request POST 'https://api.shopaikey.com/v1/messages' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "claude-3-5-sonnet-20241022",
"system": "Bạn là một trợ lý AI hữu ích.",
"messages": [
{
"role": "user",
"content": "Xin chào, hãy giới thiệu về bạn."
}
],
"max_tokens": 1024,
"stream": true
}'
Phản hồi (Response)
Trạng thái: 🟢 200 OK
code
{
"id": "msg_01X...",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Xin chào! Tôi là Claude, một mô hình ngôn ngữ AI được tạo ra bởi Anthropic."
}
],
"model": "claude-3-5-sonnet-20241022",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 15,
"output_tokens": 25
}
}
Chi tiết API: Nhận diện hình ảnh (Vision)
Anthropic Messages API hỗ trợ gửi hình ảnh trong content của message dưới dạng mảng các block.
- Phương thức:
POST - URL:
https://api.shopaikey.com/v1/messages
Cấu trúc content với hình ảnh
Thay vì content là chuỗi, truyền mảng các block image và text:
code
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/image.png"
}
},
{
"type": "text",
"text": "Bức ảnh này có nội dung gì?"
}
]
}
Với ảnh Base64:
code
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "<base64-encoded-data>"
}
}
Ví dụ cURL
code
curl --location --request POST 'https://api.shopaikey.com/v1/messages' \
--header 'anthropic-version: 2023-06-01' \
--header 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "claude-opus-4-5-20251101",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/image.png"
}
},
{
"type": "text",
"text": "Bức ảnh này có nội dung gì? Hãy mô tả chi tiết."
}
]
}
]
}'
Phản hồi (Response)
Trạng thái: 🟢 200 OK
code
{
"id": "msg_01X...",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Trong ảnh là một phong cảnh thiên nhiên tuyệt đẹp..."
}
],
"model": "claude-opus-4-5-20251101",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 85,
"output_tokens": 120
}
}
Đếm Token (Count Tokens)
Đếm số input token cho một request Claude Messages API.
- Phương thức:
POST - URL:
https://api.shopaikey.com/v1/messages/count_tokens
Headers
Request Body
Ví dụ
code
const result = await anthropic.messages.countTokens({
model: "claude-sonnet-4-20250514",
messages: [{ role: "user", content: "Xin chào!" }],
});
console.log(result.input_tokens);
Ví dụ cURL
code
curl --location --request POST 'https://api.shopaikey.com/v1/messages/count_tokens' \
--header 'anthropic-version: 2023-06-01' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "claude-sonnet-4-20250514",
"messages": [
{"role": "user", "content": "Xin chào!"}
]
}'
Response
code
{
"input_tokens": 12
}