រំលងទៅមាតិកា
ការរាប់ token

ការរាប់ token

រាប់ token នៃអត្ថបទ ឬនៃ request ទាំងមូលមុនពេលអ្នកផ្ញើវា។

POST https://api.shannon-ai.com/v1/tokenize

POST https://api.shannon-ai.com/v1/messages/count_tokens

endpoint ទាំងពីររាប់ដោយ tokenizer របស់ម៉ូដែលដែលអ្នកដាក់ឈ្មោះ ហើយគ្មានម៉ូដែលណាដំណើរការទេ។ ពួកវាគ្របដណ្តប់ម៉ូដែល open-weight ដែលបង្ហោះ។ /v1/tokenize ទទួលអត្ថបទធម្មតា ឬការសន្ទនា Chat Completions។ /v1/messages/count_tokens ទទួល request ក្នុងទ្រង់ទ្រាយ Anthropic Messages ដែលជាការហៅដែល Anthropic SDK និង Claude Code ធ្វើ។

ការរាប់គឺឥតគិតថ្លៃ។ ការហៅត្រូវការ API key របស់អ្នក មិនយកអ្វីពីសមតុល្យរបស់អ្នក ហើយមិនលេចក្នុង usage log របស់អ្នកទេ។

រាប់អត្ថបទ

សូមផ្ញើ model និង text។ អត្ថបទត្រូវបានរាប់ដូចដែលវាជា ដោយគ្មានទ្រង់ទ្រាយ chat ជុំវិញវាទេ។

import requests

response = requests.post(
    "https://api.shannon-ai.com/v1/tokenize",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
        "text": "Hello, world",
    },
)
print(response.json()["tokens"])
200 ចម្លើយ
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

លេខក្នុងចម្លើយនៅលើទំព័រនេះគឺជាឧទាហរណ៍។ អត្ថបទដូចគ្នាផ្តល់ចំនួនរាប់ខុសគ្នាលើម៉ូដែលខុសគ្នា។

រាប់ request chat

សូមផ្ញើ model និង messages ជាមួយ tools នៅពេល request មានវា ដូចគ្នាបេះបិទនឹងអ្វីដែលអ្នកនឹងផ្ញើទៅ /v1/chat/completions។ ចម្លើយគឺជាទំហំនៃ input ទាំងមូល។

import requests

request = {
    "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    "messages": [
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "What is the weather in Paris?"},
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Current weather for a city",
                "parameters": {
                    "type": "object",
                    "properties": {"city": {"type": "string"}},
                    "required": ["city"],
                },
            },
        }
    ],
}

response = requests.post(
    "https://api.shannon-ai.com/v1/tokenize",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json=request,
)
print(response.json()["tokens"])
200 ចម្លើយ
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

បញ្ជី field របស់ /v1/tokenize

Field ប្រភេទ ការពិពណ៌នា
model string ចាំបាច់។ id របស់ម៉ូដែល open-weight ដែលបង្ហោះ។ អក្សរធំ និងអក្សរតូចត្រូវបានចាត់ទុកដូចគ្នា។
text string អត្ថបទដែលត្រូវរាប់ដូចដែលវាជា ដោយគ្មានទ្រង់ទ្រាយ chat។ រហូតដល់ 4,000,000 byte។ សូមផ្ញើ text ឬ messages៖ នៅពេលមានទាំងពីរ text ត្រូវបានរាប់។
messages array សារ chat ក្នុងទ្រង់ទ្រាយ Chat Completions។ ពួកវាត្រូវបានរាប់ជា input ពេញលេញនៃ request៖ រាល់សារជាមួយទ្រង់ទ្រាយដែល chat template របស់ម៉ូដែលដាក់ជុំវិញវា។
tools array និយមន័យ tool ដើម្បីបញ្ចូលក្នុងការរាប់។ ប្រើរួមជាមួយ messages។

ចម្លើយគឺជា JSON object ដែលមាន field ទាំងនេះ៖

Field ប្រភេទ ការពិពណ៌នា
model string model id ដែលការរាប់ត្រូវបានធ្វើសម្រាប់ ក្នុងការសរសេរដែលបានបោះពុម្ពផ្សាយរបស់វា។
tokens integer ជាមួយ text៖ token នៃអត្ថបទ។ ជាមួយ messages៖ token នៃ input ទាំងមូល រួមទាំងរូបភាព។

រាប់ request Messages

សូមផ្ញើខ្លឹមសារដែលអ្នកនឹងផ្ញើទៅ /v1/messages៖ model, messages និង system និង tools នៅពេលអ្នកប្រើវា។ Anthropic SDK ផ្លូវការហៅ endpoint នេះតាមរយៈ messages.count_tokens។

import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com",
)

count = client.messages.count_tokens(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    system="You are a concise assistant.",
    messages=[
        {"role": "user", "content": "Summarise the attached report."}
    ],
)
print(count.input_tokens)
200 ចម្លើយ
{
  "input_tokens": 21
}

បញ្ជីវាលទាំងអស់របស់ /v1/messages/count_tokens

Field ប្រភេទ ការពិពណ៌នា
model string ចាំបាច់។ id របស់ម៉ូដែល open-weight ដែលបង្ហោះ។
messages array ចាំបាច់។ សារក្នុងទ្រង់ទ្រាយ Anthropic Messages។ block text, image, tool_use និង tool_result ត្រូវបានរាប់។
system string | array ការណែនាំជា system prompt ដែលអាចជា string ឬជា array នៃ block អត្ថបទ។
tools array និយមន័យ tool ដែលមាន name, description និង input_schema។

ទទួលយកសម្រាប់ភាពត្រូវគ្នា ដោយគ្មានឥទ្ធិពលលើចំនួនរាប់៖ tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking។ អ្នកអាចបញ្ជូនខ្លឹមសាររបស់ request ពិតដោយមិនផ្លាស់ប្តូរ។

ចម្លើយគឺជា JSON object ដែលមាន field ទាំងនេះ៖

Field ប្រភេទ ការពិពណ៌នា
input_tokens integer token នៃ input ទាំងមូល៖ system prompt សារ tool និងរូបភាព។

ម៉ូដែលដែលគាំទ្រ

endpoint ទាំងពីររាប់សម្រាប់ម៉ូដែល open-weight ដែលបង្ហោះ។ GET /v1/models រាយ /v1/tokenize និង /v1/messages/count_tokens ក្នុង endpoints នៃម៉ូដែលនីមួយៗដែលគាំទ្រពួកវា។ តម្លៃ model ផ្សេងទៀតណាមួយ រួមទាំង Shannon id ត្រូវបានឆ្លើយដោយ 400។

  • DeepSeek-V4-Pro-0813-3BIT-REAP
  • GLM-5.2-3BIT-REAP
  • Kimi-K3-3BIT-REAP
  • Nemotron3Ultra-3BIT-REAP
  • MiniMax-M3-3BIT-REAP
  • DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP
  • Kimi-K2.6-W4A16-AUTOROUND-REAP
  • Laguna-S-2.1-W4A16-AUTOROUND-REAP
  • inkling-W4A16-AUTOROUND-REAP
  • MiMo-V2.5-Pro-W8A16
  • MiMo-V2.5-W8A16
  • Hy3-W8A16

សម្រាប់ម៉ូដែល Shannon សូមអានចំនួន token ពី object usage នៃចម្លើយ។

របៀបដែលចំនួនរាប់ត្រូវបានធ្វើ

ម៉ូដែលនីមួយៗត្រូវបានរាប់ដោយ tokenizer និង chat template ផ្ទាល់ខ្លួនរបស់វា។ គ្មានការប៉ាន់ស្មានពីតួអក្សរ ឬពាក្យត្រូវបានប្រើទេ។

អ្វីដែលត្រូវបានរាប់ ច្បាប់
អត្ថបទ token នៃ string ដូចដែលបានផ្ញើ។ string ទទេរាប់ 0។
សារ សារ និង tool ត្រូវបានរៀបចំតាម chat template ផ្ទាល់ខ្លួនរបស់ម៉ូដែល រហូតដល់ចំណុចដែលចម្លើយចាប់ផ្តើម ហើយ prompt ទាំងមូលនោះត្រូវបានរាប់។
តួនាទី សារ system, user, assistant និង tool ត្រូវបានរាប់។ developer ត្រូវបានរាប់ជា system។ សារដែលគ្មានខ្លឹមសារ និងគ្មានការហៅ tool មិនបន្ថែមអ្វីទេ។
ការហៅ tool និងលទ្ធផល ការហៅ tool នៃវេន assistant មុនៗ និងលទ្ធផលរបស់ពួកវាជាផ្នែកនៃការរាប់ លើ endpoint ទាំងពីរ។
រូបភាព រូបភាពដែលផ្ញើក្នុងខ្លឹមសារ (base64 ឬ data: URL) បន្ថែមមួយ token ក្នុងមួយ patch ទំហំ 28 × 28 pixel៖ ceil(width / 28) × ceil(height / 28)។ រូបភាពដែលផ្តល់ជា http(s) URL មិនត្រូវបានទាញយកដោយ endpoint ទាំងនេះទេ ហើយរាប់ 1,024។

ឧទាហរណ៍៖ រូបភាពទំហំ 1,024 × 768 pixel រាប់ ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 token។

ចំនួនរាប់ និងអ្វីដែល request ត្រូវបានគិតថ្លៃ

ការរាប់នៃ request ទាំងមូលត្រូវបានធ្វើតាមរបៀបដូចគ្នានឹងការរាប់ input នៃ request ពិតដែលមានម៉ូដែល សារ និង tool ដូចគ្នា។ ចម្លើយរាយការណ៍លេខនោះជា usage.prompt_tokens លើ Chat Completions ជា usage.input_tokens លើ Responses និងជា usage.input_tokens បូក usage.cache_read_input_tokens លើ Messages។

  • ចំនួនរាប់គឺជា input មុនការបញ្ចុះតម្លៃ input ដែលបាន cache។ request ពិតអាចអានផ្នែកខ្លះនៃ input នោះពី cache ហើយគិតថ្លៃផ្នែកនោះតាមអត្រា cached។ ការរក្សាទុក Prompt
  • រូបភាពដែលផ្តល់ជា http(s) URL រាប់ 1,024 នៅទីនេះ។ request ពិតទាញយករូបភាព ហើយរាប់វាពីទំហំជា pixel របស់វា ដូច្នេះលេខទាំងពីរអាចខុសគ្នា។ សូមផ្ញើរូបភាពជា base64 ដើម្បីទទួលបានលេខដូចគ្នា។
  • Output មិនមែនជាផ្នែកនៃការរាប់ទេ។ ចម្លើយនៃ request ពិតត្រូវបានគិតថ្លៃជា output token បន្ថែមលើនោះ រួមទាំង reasoning។
  • ការរាប់ text គ្មានការធ្វើទ្រង់ទ្រាយ chat ទេ។ សូមប្រើវាដើម្បីវាស់ឯកសារ ឬផ្នែកមួយនៃ prompt ហើយប្រើទម្រង់ messages ដើម្បីវាស់ request។

ដើម្បីបំប្លែងចំនួនរាប់ទៅជាតម្លៃ សូមគុណវានឹងតម្លៃ input របស់ម៉ូដែលក្នុង 1M token។ ម៉ូដែល និងតម្លៃ

ដែនកំណត់

ដែនកំណត់ តម្លៃ ពេលលើសពីនោះ
ប្រវែងនៃ text 4,000,000 byte (UTF-8) 413 ជាមួយសារ text too long
ខ្លឹមសារ request 32 MiB 413
ក្នុងមួយ request អត្ថបទមួយ ឬការសន្ទនាមួយ សូមផ្ញើមួយ request ក្នុងមួយអត្ថបទ ដើម្បីរាប់អត្ថបទច្រើន។

ការហៅរាប់មិនត្រូវបានរាប់ចូលក្នុងដែនកំណត់ 120 request ក្នុងមួយនាទីទេ។ ដែនកំណត់ និងសមតុល្យ

កំហុស

Status ប្រភេទ សារ ពេលណា
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize ជាមួយ model ដែលមិនមែនជា id របស់ម៉ូដែល open-weight ដែលបង្ហោះ។
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens ជាមួយ model ដែលមិនមែនជា id របស់ម៉ូដែល open-weight ដែលបង្ហោះ ឬគ្មាន model។
400 invalid_request_error send `text` or `messages` /v1/tokenize ដែលគ្មានទាំង text ទាំង messages។
401 authentication_error Missing authentication / Invalid API key គ្មាន key ត្រូវបានផ្ញើ ឬ key មិនត្រឹមត្រូវ។
413 invalid_request_error text too long text វែងជាង 4,000,000 byte។ ខ្លឹមសារលើស 32 MiB ក៏ត្រូវបានឆ្លើយដោយ 413 ដែរ។
415 invalid_request_error Expected request with `Content-Type: application/json` request មិនបានកំណត់ប្រភេទខ្លឹមសារ (content type) ជា JSON ទេ។
422 invalid_request_error Failed to deserialize the JSON body into the target type: … field ចាំបាច់បាត់ (model លើ /v1/tokenize, messages លើ /v1/messages/count_tokens) ឬ field មានប្រភេទខុស។
503 api_error token counting is temporarily unavailable for this model មិនអាចរាប់សម្រាប់ម៉ូដែលនេះបានក្នុងពេលនេះទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។

/v1/tokenize ត្រឡប់ error ក្នុងរូបរាង OpenAI។ លើ /v1/messages/count_tokens error របស់ endpoint ផ្ទាល់ (400 សម្រាប់ម៉ូដែល 503) មកក្នុងរូបរាង Anthropic ហើយ 401, 413, 415 និង 422 មកក្នុងរូបរាង OpenAI។ សូមអានកូដ status ជាមុនសិន បន្ទាប់មក error.type និង error.message ដែលមានក្នុងរូបរាងទាំងពីរ។

400 /v1/tokenize
{
  "error": {
    "type": "invalid_request_error",
    "message": "tokenize is available for the hosted open models; unknown model: shannon-3"
  }
}
400 /v1/messages/count_tokens
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
  }
}