Quay lại blog

Bắt đầuHướng dẫn

Yêu cầu đầu tiên đến CheapTokens với HTTPie: khóa trong env, = và :=

Một lệnh http dễ đọc gửi một hoàn thành chat với khóa trong biến môi trường, sau đó hiển thị nơi câu trả lời và mức sử dụng token.

Bởi CheapTokens TeamĐã xuất bản 5 phút đọc

Một terminal hiển thị lệnh http với biến khóa bearer và các trường JSON
Trên trang này
  1. = và := thực sự làm gì
  2. Câu trả lời ở đâu
  3. Hoán đổi mô hình: thay đổi một trường
  4. Một yêu cầu thử nghiệm tốn bao nhiêu
  5. Nếu nó không hoạt động

Bạn muốn biết rằng khóa hoạt động và id mô hình là đúng, và bạn muốn biết điều đó trong một dòng. Lệnh http của HTTPie làm được điều đó với ít dấu ngoặc kép hơn nhiều so với curl: bạn gõ các trường, nó xây dựng JSON. Đây là toàn bộ yêu cầu, và phần còn lại của bài viết giải thích từng phần.

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?"}]'

API tương thích với OpenAI, vì vậy URL cơ sở là https://api.cheaptokens.dev/v1 và các yêu cầu chat đi đến /chat/completions bên dưới nó. Id mô hình là id đầy đủ, deepseek-ai/DeepSeek-V4-Flash-0731 (tên ngắn từ bảng giá không được chấp nhận). Nếu bạn chưa lưu trữ khóa trước đây, hãy lưu trữ khóa API an toàn trước: gõ dòng export sẽ đưa khóa vào lịch sử shell của bạn, vì vậy một tệp hồ sơ hoặc trình quản lý bí mật là nơi tốt hơn để lưu nó.

Yêu cầu trong terminal: khóa bearer từ biến, mô hình dưới dạng chuỗi, max_tokens dưới dạng số, messages dưới dạng mảng thô
Cùng một yêu cầu như nó hiển thị trong terminal

= và := thực sự làm gì#

Đây là phần duy nhất của HTTPie bạn phải học. Tài liệu JSON của HTTPie (phiên bản 3.2.4, ngày 1 tháng 11 năm 2024, đọc ngày 9 tháng 11 năm 2026) nói rằng = đặt một trường chuỗi và := đặt một giá trị JSON thô: một số, boolean, mảng hoặc đối tượng. Các trường được cung cấp theo cách này được gửi dưới dạng thân JSON theo mặc định, vì vậy bạn không tự thêm tiêu đề Content-Type.

Trong yêu cầu của chúng tôi, điều đó tạo ra ba hình dạng khác nhau:

  • model=deepseek-ai/DeepSeek-V4-Flash-0731 là một chuỗi, vì vậy =.
  • max_tokens:=200 là một số, vì vậy :=. Với = bạn sẽ gửi chuỗi "200".
  • messages:=[…] là một mảng các đối tượng, vì vậy := một lần nữa, và giá trị nằm trong dấu ngoặc đơn để shell để yên các dấu ngoặc kép bên trong.

Tài liệu cũng nói rằng một thân từ stdin không thể được kết hợp với các trường dòng lệnh, vì vậy hãy chọn một phong cách. Đối với một thử nghiệm đầu tiên, các trường ngắn hơn và dễ chỉnh sửa hơn.

Kiểm tra nhanh

max_tokens=200 (với một = đơn giản) gửi gì?

Hiện đáp án

Trả lời: Chuỗi "200"

= luôn tạo một chuỗi. Đối với một số, bạn cần :=, vì vậy hãy viết max_tokens:=200.

Câu trả lời ở đâu#

Phản hồi theo định dạng hoàn thành chat của OpenAI. Bạn đang tìm ba thứ, và chúng nằm ở các vị trí khác nhau:

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

Văn bản câu trả lời là choices[0].message.content. finish_reason nằm cạnh nó trong cùng một lựa chọn, và usage ở cấp cao nhất. usage cho biết bạn đã gửi bao nhiêu token (prompt_tokens) và mô hình đã viết bao nhiêu (completion_tokens), điều này rất hữu ích để ước tính chi phí của một yêu cầu.

Nơi cần xem trong phản hồi: choices, message.content, finish_reason và usage
Ba trường cần đọc trong mỗi phản hồi

Nếu bạn chỉ muốn văn bản, hãy chuyển thân qua 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'
Tự mình thử xemHãy thử: đặt giới hạn quá nhỏ và đọc finish_reasonHiện đáp án

Thay đổi max_tokens:=200 thành max_tokens:=5 và chạy lại. Câu trả lời bị cắt, và finish_reason đọc length thay vì stop: giới hạn đã dừng mô hình, không phải kết thúc suy nghĩ. Tại sao câu trả lời bị cắt đề cập đến cách khắc phục.

Hoán đổi mô hình: thay đổi một trường#

Mô hình là một chuỗi, vì vậy thử một mô hình khác là một chỉnh sửa một từ. Cả hai id bên dưới đều có sẵn trên CheapTokens với một số dư; DeepSeek-V4-Flash cung cấp cho bạn ngữ cảnh 380K và tối đa 32.768 token đầu ra mỗi câu trả lời, GLM-5.3-Flash ngữ cảnh 390K và tối đa 8.192.

Một yêu cầu, hai mô hình

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."}]'

Không chắc nên dùng id nào? Liệt kê các mô hình với GET /v1/models và sao chép chuỗi chính xác.

Một yêu cầu thử nghiệm tốn bao nhiêu#

Một câu hỏi ngắn như thế này là rẻ. Giả sử câu hỏi khoảng 100 token và câu trả lời khoảng 150: yêu cầu đó tốn $0.000017. Một nghìn yêu cầu như vậy trông như thế này, với đầu vào và đầu ra được tính cùng nhau:

Mô hình Mỗi yêu cầu 1.000 yêu cầu OpenRouter, 1.000 yêu cầu
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 token đầu vào và 150 token đầu ra mỗi yêu cầu. Giá trên 1 triệu token là giá hiện hành và thay đổi cùng với biểu phí của chúng tôi; cột OpenRouter hiển thị giá tham chiếu cho cùng khối lượng công việc.

Tổng cộng, với đầu vào và đầu ra được tính cùng nhau, DeepSeek-V4-Flash rẻ hơn so với OpenRouter, và giá là một mức cố định không có giờ cao điểm. Giá hiện tại cho mọi mô hình có trên trang giá.

Nếu nó không hoạt động#

  • Bạn đã gõ messages=[…] với một = đơn giản. Mảng được gửi dưới dạng chuỗi, không phải danh sách tin nhắn. Sử dụng := và dấu ngoặc đơn xung quanh toàn bộ giá trị.
  • JSON bên trong := không hợp lệ. Mọi khóa và chuỗi cần dấu ngoặc kép, và dấu ngoặc kép bên ngoài phải là dấu ngoặc đơn. Nếu bạn chỉnh sửa văn bản tin nhắn, hãy giữ dấu ngoặc kép cân bằng.
  • Khóa trống. echo ${#CHEAPTOKENS_API_KEY} in độ dài mà không hiển thị khóa; 0 có nghĩa là biến không được đặt trong terminal này.
  • Id mô hình là tên ngắn. Sử dụng deepseek-ai/DeepSeek-V4-Flash-0731 đầy đủ. Đối với câu trả lời 401 và 404, xem sai khóa, URL cơ sở hoặc id mô hình.
  • Bạn đã dùng --session. Tài liệu xác thực của HTTPie nói rằng các tệp phiên lưu trữ thông tin đăng nhập dưới dạng văn bản thuần, vì vậy hãy giữ khóa trong môi trường và để --session ra khỏi lệnh này.

Kiểm tra phiên bản của bạn với http --version nếu một cờ hoạt động khác với ở trên. Thích Python? Yêu cầu tương tự không có SDK có trong yêu cầu đầu tiên bằng Python với requests. Để có tài liệu tham khảo API đầy đủ, xem tài liệu CheapTokens.