Định dạng API

Anthropic Format

Cách tra cứu và gọi modelTìm model theo nhóm giá, đọc bảng giá Input/Output rồi cấu hình Claude Code hoặc OpenAI SDK để gọi model.

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

TênGiá trịBắt buộcMô tả
AuthorizationBearer <Token>CóToken xác thực API của bạn.
Content-Typeapplication/jsonCóĐịnh dạng dữ liệu gửi đi.
x-api-key<API Key>Tùy chọnMột số SDK yêu cầu header này (nếu dùng qua proxy, thường chỉ cần Authorization).
Acceptapplication/jsonKhông

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: user hoặc assistant.
    • 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

TênGiá trịBắt buộc
anthropic-version2023-06-01Có
x-api-keyAPI KeyCó (hoặc Authorization: Bearer)
Content-Typeapplication/jsonCó

Request Body

Tên tham sốKiểuMô tả
modelstringBắt buộc. ID model Claude
messagesarrayBắt buộc. Danh sách message
systemstringSystem prompt
toolsarrayDanh sách tools

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
}

Bài cùng nhóm · Định dạng API