Bumalik sa blog

PagsisimulaGabay

Unang request sa CheapTokens gamit ang HTTPie: key sa env, = at :=

Isang madaling basahing http command na nagpapadala ng chat completion gamit ang key sa environment variable, pagkatapos ay ipinapakita kung nasaan ang sagot at token usage.

Ni CheapTokens TeamNai-publish noong 5 min na pagbabasa

Isang terminal na nagpapakita ng http command na may bearer key variable at JSON field
Sa pahinang ito
  1. Ano ang aktwal na ginagawa ng = at :=
  2. Nasaan ang sagot
  3. Palitan ang modelo: baguhin ang isang field
  4. Magkano ang isang test request
  5. Kung hindi ito gumana

Gusto mong malaman na gumagana ang key at tama ang model id, at gusto mong malaman ito sa isang linya. Ginagawa ito ng http command ng HTTPie na may mas kaunting quoting kaysa curl: i-type mo ang mga field, siya ang bubuo ng JSON. Narito ang buong request, at ipapaliwanag ng natitirang bahagi ng artikulo ang bawat piraso.

bash
export CHEAPTOKENS_API_KEY="paste-your-key-here"

http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]'

OpenAI-compatible ang API, kaya ang base URL ay https://api.cheaptokens.dev/v1 at ang mga chat request ay napupunta sa /chat/completions sa ilalim nito. Ang model id ay ang buo, deepseek-ai/DeepSeek-V4-Flash-0731 (hindi tinatanggap ang maikling pangalan mula sa mga price table). Kung wala ka pang naka-store na key, mag-store muna ng API key nang ligtas: ang pag-type ng export line ay naglalagay ng key sa shell history mo, kaya mas mainam na ilagay ito sa profile file o secrets manager.

Ang request sa terminal: bearer key mula sa variable, model bilang string, max_tokens bilang numero, messages bilang raw array
Ang parehong request kung paano ito lumalabas sa terminal

Ano ang aktwal na ginagawa ng = at :=#

Ito lang ang bahagi ng HTTPie na kailangan mong matutunan. Ayon sa JSON documentation ng HTTPie (bersyon 3.2.4, may petsang 1 Nobyembre 2024, binasa noong 9 Nobyembre 2026), ang = ay nagtatakda ng string field at ang := ay nagtatakda ng raw JSON value: isang numero, boolean, array o object. Ang mga field na ibinigay sa ganitong paraan ay ipinapadala bilang JSON body bilang default, kaya hindi mo na kailangang magdagdag ng Content-Type header.

Sa aming request, may tatlong magkakaibang hugis:

  • Ang model=deepseek-ai/DeepSeek-V4-Flash-0731 ay isang string, kaya =.
  • Ang max_tokens:=200 ay isang numero, kaya :=. Sa =, ipapadala mo ang string na "200".
  • Ang messages:=[…] ay isang array ng mga object, kaya := muli, at ang value ay nasa single quotes para hindi galawin ng shell ang mga panloob na double quotes.

Sinasabi rin ng docs na ang body mula sa stdin ay hindi maaaring pagsamahin sa mga command-line field, kaya pumili ng isang estilo. Para sa unang pagsubok, mas maikli at mas madaling i-edit ang mga field.

Mabilisang pagsusuri

Ano ang ipinapadala ng max_tokens=200 (na may plain =)?

Ipakita ang sagot

Sagot: Ang string na "200"

Ang = ay laging gumagawa ng string. Para sa numero kailangan mo ng :=, kaya isulat ang max_tokens:=200.

Nasaan ang sagot#

Ang tugon ay sumusunod sa format ng OpenAI chat-completions. May tatlong bagay kang hinahanap, at nasa magkakaibang lugar sila:

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "…the answer text…" },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}

Ang teksto ng sagot ay choices[0].message.content. Ang finish_reason ay katabi nito sa parehong choice, at ang usage ay nasa top level. Ipinapakita ng usage kung ilang token ang ipinadala mo (prompt_tokens) at kung ilan ang isinulat ng modelo (completion_tokens), na kapaki-pakinabang para sa pagtantya ng gastos ng isang request.

Saan titingin sa response: choices, message.content, finish_reason at usage
Tatlong field na babasahin sa bawat response

Kung teksto lang ang gusto mo, i-pipe ang body sa jq:

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]' \
  | jq -r '.choices[0].message.content'
Subukan mo mismoSubukan: masyadong maliit ang limit at basahin ang finish_reasonIpakita ang sagot

Palitan ang max_tokens:=200 ng max_tokens:=5 at patakbuhin muli. Naputol ang sagot, at ang finish_reason ay nagbabasa ng length sa halip na stop: ang limit ang pumigil sa modelo, hindi ang dulo ng kaisipan. Tinatalakay ng Bakit napuputol ang sagot ang solusyon.

Palitan ang modelo: baguhin ang isang field#

Isang string lang ang modelo, kaya ang pagsubok ng iba ay isang salitang edit. Ang parehong id sa ibaba ay available sa CheapTokens gamit ang isang balanse; ang DeepSeek-V4-Flash ay nagbibigay ng 380K context at hanggang 32,768 output token bawat sagot, ang GLM-5.3-Flash ay 390K context at hanggang 8,192.

Isang request, dalawang modelo

DeepSeek-V4-Flash

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'

GLM-5.3-Flash

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=zai-org/GLM-5.3-Flash \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'

Hindi sigurado kung aling id ang gagamitin? Ilista ang mga modelo gamit ang GET /v1/models at kopyahin ang eksaktong string.

Magkano ang isang test request#

Ang maikling tanong na tulad nito ay mura. Sabihin nating ang tanong ay mga 100 token at ang sagot ay mga 150: ang request na iyon ay nagkakahalaga ng $0.000017. Ang isang libo sa mga ito ay ganito, kasama ang input at output:

Modelo Bawat kahilingan 1,000 mga kahilingan OpenRouter, 1,000 mga kahilingan
GLM-5.3-Flash $0.000008 $0.008 $0.0158
DeepSeek-V4-Flash $0.000017 $0.0165 $0.028
MiniMax-M2.7 $0.000028 $0.0275 $0.33

100 input at 150 output na token bawat kahilingan. Ang mga presyo kada 1M token ay kasalukuyan at nagbabago kasabay ng aming mga taripa; ang column ng OpenRouter ay nagpapakita ng reference na presyo para sa parehong workload.

Sa kabuuan, kasama ang input at output, mas mura ang DeepSeek-V4-Flash kaysa OpenRouter, at ang presyo ay isang fixed rate na walang peak hours. Ang kasalukuyang rate para sa bawat modelo ay nasa pricing page.

Kung hindi ito gumana#

  • Nag-type ka ng messages=[…] na may plain =. Ang array ay ipinapadala bilang string, hindi bilang listahan ng mga mensahe. Gamitin ang := at single quotes sa buong value.
  • Invalid ang JSON sa loob ng :=. Kailangan ng double quotes ang bawat key at string, at ang panlabas na quotes ay dapat single. Kung i-edit mo ang teksto ng mensahe, panatilihing balanse ang mga quote.
  • Walang laman ang key. Ipinapakita ng echo ${#CHEAPTOKENS_API_KEY} ang haba nang hindi ipinapakita ang key; ang 0 ay nangangahulugang hindi naka-set ang variable sa terminal na ito.
  • Maikling pangalan ang model id. Gamitin ang buong deepseek-ai/DeepSeek-V4-Flash-0731. Para sa 401 at 404 na sagot, tingnan ang maling key, base URL o model id.
  • Gumamit ka ng --session. Ayon sa authentication docs ng HTTPie, ang mga session file ay nag-iimbak ng credentials sa plain text, kaya ilagay ang key sa environment at iwanan ang --session sa command na ito.

Suriin ang iyong bersyon gamit ang http --version kung kakaiba ang kilos ng isang flag kaysa sa nasa itaas. Mas gusto mo ang Python? Ang parehong request na walang SDK ay nasa unang request sa Python gamit ang requests. Para sa buong API reference, tingnan ang CheapTokens docs.