API และ SDKคู่มือ
คำขอแรกใน Ruby ด้วย gem openai: base_url, คีย์, usage
สคริปต์ Ruby สั้น ๆ: gem openai อย่างเป็นทางการ, base_url ที่กำหนดเอง และคีย์จาก env พิมพ์ข้อความตอบกลับและ token usage

ในหน้านี้
ใช่แล้ว gem อย่างเป็นทางการของ openai ใช้งานได้กับ CheapTokens: ส่ง base_ และคีย์ของคุณไปที่ OpenAI::Client. เรียก client. แล้วอ่านข้อความจาก choices. ส่วนที่เหลือของหน้านี้คือสคริปต์เต็ม วิธีอ่านสิ่งที่ส่งกลับมา และสิ่งที่ต้องตรวจสอบเมื่อมันไม่ทำงาน
สมมติว่าคุณมี rake task ที่ติดป้ายกำกับตั๋วสนับสนุน หรือ background job ที่สรุปโน้ตก่อนบันทึก คุณต้องการ SDK อย่างเป็นทางการ ไม่ใช่ HTTP ที่เขียนเอง และคุณต้องการเห็นว่าแต่ละครั้งใช้ไปกี่โทเคน นั่นคือสิ่งที่สคริปต์นี้ทำ
สิ่งที่ต้องมีก่อนเริ่ม#
หน้า gem บน RubyGems (ตรวจสอบเมื่อ 8 พฤศจิกายน 2026) ระบุ openai 0.120.0 เผยแพร่เมื่อ 5 พฤศจิกายน 2026 ภายใต้ Apache-2.0 ต้องใช้ Ruby 3.3.0 ขึ้นไป หากคุณยังติดอยู่กับ Ruby 3.2 บันทึกของ gem เองชี้ไปที่สาย 0.75.x แพ็กเกจยังเป็น 0.x และเปลี่ยนแปลงเร็ว ดังนั้นควรปักหมุดเวอร์ชัน
ใน Gemfile ของคุณ:
gem "openai", "~> 0.120.0"จากนั้น bundle install หากไม่ใช้ Bundler gem install openai - ให้ผลเหมือนกัน
คุณยังต้องมี API key จากบัญชี CheapTokens ของคุณ เก็บไว้ให้พ้นจากโค้ด: ใส่ไว้ใน environment variable และหากคำว่า .gitignore เป็นเรื่องใหม่สำหรับคุณ คู่มือการเก็บคีย์ให้ปลอดภัยนี้ ใช้เวลาอ่านห้านาที
export CHEAPTOKENS_API_KEY="sk-your-key"สคริปต์#
สร้าง ask.rb:
require "openai"
client = OpenAI::Client.new(
api_key: ENV.fetch("CHEAPTOKENS_API_KEY"),
base_url: "https://api.cheaptokens.dev/v1"
)
completion = client.chat.completions.create(
model: "deepseek-ai/DeepSeek-V4-Flash-0731",
messages: [
{ role: "user", content: "Explain in one sentence what a token is." }
]
)
choice = completion.choices.first
puts choice.message.content
puts "finish_reason: #{choice.finish_reason}"
puts completion.usageรันด้วย ruby ask.rb มีสามจุดที่ควรดูให้ดี
ENV.fetch แทน ENV[...] หากตัวแปรหายไป fetch จะหยุดทันทีด้วย KeyError ที่ระบุชื่อตัวแปรนั้น ENV[...] ส่ง nil ผ่านไปเงียบ ๆ แล้วคุณจะเจอข้อผิดพลาดการยืนยันตัวตนที่สับสนในอีกไม่กี่บรรทัดถัดมา
base_url: เป็นบรรทัดเดียวที่ต่างจากตัวอย่าง OpenAI ใน README ของ gem ที่เหลือเป็นโค้ดเดียวกัน ซึ่งเป็นจุดสำคัญทั้งหมดของ API ที่เข้ากันได้กับ OpenAI หากแนวคิดนี้เป็นเรื่องใหม่ base_url คืออะไรและวิธีสลับ อธิบายด้วยการเปรียบเทียบร้านอาหาร
model id ต้องเป็นแบบเต็ม deepseek- ชื่อย่อจากตารางราคาจะไม่ถูกยอมรับโดย API; ใช้ id จาก เอกสาร CheapTokens หรือจาก GET /v1/models

การอ่านสิ่งที่ส่งกลับมา#
คำตอบเป็นออบเจกต์ ไม่ใช่ hash ดังนั้นคุณจึงเรียกเมธอดบนมัน ข้อความอยู่ที่ completion.; นั่นคือเส้นทางที่ README ของ gem ใช้เช่นกัน
อีกสองบรรทัดที่ควรพิมพ์ตั้งแต่วันแรก:
finish_reasonบอกคุณว่าโมเดลหยุดเพราะอะไรstopคือการจบปกติlengthหมายความว่าขีดจำกัดความยาวตัดคำตอบ หากคุณเจอสิ่งนั้น ทำไมคำตอบจึงถูกตัดและวิธีแก้ไขusageเก็บโทเคนที่การเรียกถูกเรียกเก็บเงิน: สิ่งที่คุณส่งไปและสิ่งที่โมเดลเขียน สคริปต์พิมพ์ออบเจกต์ทั้งหมดด้วยputs completion.ดังนั้นคุณจึงเห็นทั้งสองตัวเลขตามที่ API ส่งกลับมาusage
ทำไมต้องบันทึก? เพราะโทเคนคือค่าใช้จ่าย คำถามหนึ่งประโยคพร้อมคำตอบหนึ่งประโยคนั้นเล็กมาก แต่ job ที่รันพันครั้งต่อวันไม่ใช่ โทเคนอินพุตเทียบเอาต์พุต อธิบายว่าทำไมตัวเลขที่สองมักมีราคาต่อโทเคนสูงกว่า
การเรียกแบบนี้มีค่าใช้จ่ายเท่าไร#
DeepSeek-V4-Flash บน CheapTokens ราคา $0.015 ต่อ 1M โทเคนอินพุต และ $0.10 ต่อ 1M โทเคนเอาต์พุต โดยราคาเดียวกันทุกชั่วโมงของวัน ลองใช้ job ติดป้ายกำกับตั๋ว: ประมาณ 300 โทเคนเข้า 150 โทเคนออกต่อตั๋ว หนึ่งตั๋วมีค่าใช้จ่าย $0.00002 หนึ่งพันตั๋วมีลักษณะดังนี้ โดยมีราคาอ้างอิงของ OpenRouter ในคอลัมน์ถัดไป:
| โมเดล | Input $/1M | Output $/1M | ต่อคำขอ | 1,000 คำขอ | OpenRouter, 1,000 คำขอ |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000012 | $0.012 | $0.0225 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00002 | $0.0195 | $0.042 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000038 | $0.0375 | $0.45 |
300 โทเค็นอินพุตและ 150 โทเค็นเอาต์พุตต่อคำขอ ราคาต่อ 1M โทเค็นเป็นราคาปัจจุบันและเปลี่ยนแปลงไปพร้อมกับอัตราค่าบริการของเรา คอลัมน์ OpenRouter แสดงราคาอ้างอิงสำหรับปริมาณงานเดียวกัน
โมเดลรองรับบริบทสูงสุด 380K โทเคนและสูงสุด 32,768 โทเคนในหนึ่งคำตอบ ดังนั้น job สรุปจึงแทบไม่ชนขีดจำกัด หากคุณอยากลองโมเดลที่สองด้วยสคริปต์เดียวกัน เปลี่ยนเพียงสตริง model: เป็น zai- (บริบท 390K เอาต์พุตสูงสุด 8,192 โทเคน)
หากมันไม่ทำงาน#
ความล้มเหลวในการรันครั้งแรกส่วนใหญ่เป็นหนึ่งในห้าสิ่ง เลือกอันที่ตรงกับหน้าจอของคุณ
เลือกกรณีของคุณ
คุณเห็นอะไร?
เลือกตัวเลือกเพื่อดูคำตอบ
KeyError: key not found: "CHEAPTOKENS_API_KEY"
ตัวแปรไม่ได้ตั้งค่าในเทอร์มินัลนี้ รันบรรทัด export อีกครั้ง หรือเปิดเชลล์ใหม่และตรวจสอบด้วย echo $CHEAPTOKENS_
401 Unauthorized
คีย์มีอยู่แต่ผิด: มีช่องว่างหรือเครื่องหมายคำพูดเกินมา การวางถูกตัด หรือคีย์เก่า คัดลอกอีกครั้งจากบัญชีของคุณ
404 Not Found
ตรวจสอบ base_url ก่อน: มันลงท้ายด้วย /v1 และไม่มีเส้นทางเพิ่มเติมต่อท้าย จากนั้นตรวจสอบ model id: ต้องเป็น id เต็มที่มีคำนำหน้า deepseek-ai/
cannot load such file -- openai
gem ไม่ได้ติดตั้งสำหรับ Ruby นี้ รัน bundle install และเริ่มสคริปต์ด้วย bundle exec ruby ask.
Bundler can't find a version that works
ตรวจสอบ ruby -v สาย 0.120.x ต้องใช้ Ruby 3.3.0 ขึ้นไป; บน 3.2 ให้ปักหมุดสาย 0.75.x แทน
กรณี 401 และ 404 เกิดขึ้นกับทุก SDK ไม่ใช่แค่ Ruby; API 401 หรือ 404: คีย์, base URL หรือ model id ผิด อธิบายตามลำดับ
เช็กด่วน
finish_reason "length" บอกอะไรคุณ?
แสดงคำตอบ
คำตอบ: คำตอบถูกตัดโดยขีดจำกัดความยาว
stop คือการจบปกติ; length หมายความว่าคำตอบชนขีดจำกัดก่อนที่โมเดลจะเสร็จ
ไปต่อที่ไหน#
ตอนนี้คุณมีลูปที่มีประโยชน์เล็กที่สุดแล้ว: ส่ง อ่านข้อความ บันทึกโทเคน จากตรงนี้ ห่อการเรียกในเมธอด และเพิ่มตัวเลข usage ลงใน logger ของคุณ รูปแบบเดียวกันมีในภาษาอื่นหากสแต็กของคุณผสมกัน: Go, Java และ C# รายการโมเดลและราคาทั้งหมดอยู่ที่ หน้ารุ่น และเอกสารอ้างอิง API อยู่ใน เอกสาร



