API at SDKGabay
Unang request sa Ruby gamit ang openai gem: base_url, key, usage
Isang maikling Ruby script: ang opisyal na openai gem, custom na base_url at key mula sa env. Nagpi-print ng reply text at token usage.

Sa pahinang ito
Oo, gumagana ang opisyal na openai gem sa CheapTokens: ipasa ang base_ at ang iyong key sa OpenAI::Client., tawagin ang client., at basahin ang teksto mula sa choices.. Ang natitirang bahagi ng pahinang ito ay ang buong script, kung paano basahin ang ibinabalik, at ano ang dapat suriin kapag hindi ito tumakbo.
Sabihin nating mayroon kang rake task na naglalagay ng label sa mga support ticket, o background job na nagbubuod ng note bago ito i-save. Gusto mo ang opisyal na SDK, hindi ang manu-manong HTTP, at gusto mong makita kung ilang token ang ginamit sa bawat tawag. Iyan mismo ang script na ito.
Ano ang kailangan mo bago magsimula#
Ang pahina ng gem sa RubyGems (sinuri noong 8 Nobyembre 2026) ay naglilista ng openai 0.120.0, na inilabas noong 5 Nobyembre 2026, Apache-2.0. Kailangan nito ng Ruby 3.3.0 o mas bago; kung stuck ka sa Ruby 3.2, ang sariling mga tala ng gem ay tumuturo sa 0.75.x na linya. Ang package ay 0.x pa rin at mabilis magbago, kaya i-pin ang version.
Sa iyong Gemfile:
gem "openai", "~> 0.120.0"Pagkatapos ay bundle install. Kung walang Bundler, gem install openai - ang gumagawa ng pareho.
Kailangan mo rin ng API key mula sa iyong CheapTokens account. Ilayo ito sa code: ilagay sa environment variable, at kung bago sa iyo ang salitang .gitignore, ang gabay na ito sa pagpapanatiling ligtas ng mga key ay limang minutong babasahin.
export CHEAPTOKENS_API_KEY="sk-your-key"Ang script#
Gumawa ng 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.usagePatakbuhin ito gamit ang ruby ask.rb. May tatlong bagay na dapat tingnan muli.
ENV.fetch sa halip na ENV[...]. Kung nawawala ang variable, agad na hihinto ang fetch na may KeyError na nagpapangalan dito. Tahimik na ipinapasa ng ENV[...] ang nil at makakakuha ka ng nakakalitong authentication error pagkalipas ng ilang linya.
Ang base_url: ang tanging linya na naiiba sa mga halimbawa ng OpenAI sa README ng gem. Ang lahat ng iba ay parehong code, na siyang buong punto ng OpenAI-compatible API. Kung bago ang ideya, ano ang base_url at paano magpalit ay ipinapaliwanag ito gamit ang analohiya ng restawran.
Ang model id ay ang buo, deepseek-. Ang maikling pangalan mula sa price table ay hindi tinatanggap ng API; kunin ang mga id mula sa CheapTokens docs o mula sa GET /v1/models.

Pagbasa ng ibinabalik#
Ang tugon ay isang object, hindi hash, kaya tumatawag ka ng mga method dito. Ang teksto ay nasa completion.; iyon din ang path na ginagamit ng README ng gem.
Dalawang linya pa ang dapat i-print mula sa unang araw:
- Sinasabi ng
finish_reasonkung bakit huminto ang modelo. Angstopay normal na pagtatapos. Anglengthay nangangahulugang may limitasyon sa haba na pumutol sa sagot. Kung makita mo iyon, bakit napuputol ang mga sagot at paano ayusin. - Ang
usageay naglalaman ng mga token na siningil para sa tawag: ang ipinadala mo at ang isinulat ng modelo. Ang script ay nagpi-print ng buong object gamit angputs completion., kaya makikita mo ang parehong numero kung paano ito ibinalik ng API.usage
Bakit i-log ang mga ito? Dahil ang mga token ang bill. Ang isang pangungusap na tanong na may isang pangungusap na sagot ay maliit, ngunit ang isang job na tumatakbo ng isang libong beses sa isang araw ay hindi. Input vs output tokens ay ipinapaliwanag kung bakit ang pangalawang numero ay karaniwang mas mahal bawat token.
Magkano ang isang tawag na ganito#
Ang DeepSeek-V4-Flash sa CheapTokens ay $0.015 bawat 1M input tokens at $0.10 bawat 1M output tokens, na may parehong presyo sa anumang oras ng araw. Kunin ang isang ticket-labeling job: mga 300 tokens in, 150 tokens out bawat ticket. Ang isang ticket ay nagkakahalaga ng $0.00002. Ang isang libong ticket ay ganito, kasama ang reference price ng OpenRouter sa susunod na column:
| Modelo | Input $/1M | Output $/1M | Bawat kahilingan | 1,000 mga kahilingan | OpenRouter, 1,000 mga kahilingan |
|---|---|---|---|---|---|
| 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 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.
Ang modelo ay tumatanggap ng hanggang 380K tokens ng context at hanggang 32,768 tokens sa isang sagot, kaya ang isang summarizing job ay bihirang tumama sa pader. Kung mas gusto mong subukan ang pangalawang modelo gamit ang parehong script, palitan lamang ang model: string sa zai- (390K context, hanggang 8,192 output tokens).
Kung hindi ito tumakbo#
Karamihan sa mga first-run failure ay isa sa limang bagay. Piliin ang tumutugma sa iyong screen.
Piliin ang iyong kaso
Ano ang nakikita mo?
Pumili ng opsyon upang makita ang sagot
KeyError: key not found: "CHEAPTOKENS_API_KEY"
Hindi naka-set ang variable sa terminal na ito. Patakbuhin muli ang export linya, o magbukas ng bagong shell at suriin gamit ang echo $CHEAPTOKENS_.
401 Unauthorized
Nandiyan ang key pero mali: may stray space o quote, na-truncate na paste, o lumang key. Kopyahin muli mula sa iyong account.
404 Not Found
Suriin muna ang base_url: nagtatapos ito sa /v1 at walang extra path pagkatapos. Pagkatapos ay suriin ang model id: ito ang buong id na may deepseek-ai/ prefix.
cannot load such file -- openai
Hindi naka-install ang gem para sa Ruby na ito. Patakbuhin ang bundle install at simulan ang script gamit ang bundle exec ruby ask..
Bundler can't find a version that works
Suriin ang ruby -v. Ang 0.120.x na linya ay nangangailangan ng Ruby 3.3.0 o mas bago; sa 3.2 i-pin ang 0.75.x na linya sa halip.
Ang 401 at 404 na mga kaso ay lumalabas sa bawat SDK, hindi lamang sa Ruby; API 401 o 404: maling key, base URL o model id ay dumadaan sa mga ito nang sunod-sunod.
Mabilisang pagsusuri
Ano ang sinasabi sa iyo ng finish_reason "length"?
Ipakita ang sagot
Sagot: Naputol ang sagot dahil sa limitasyon sa haba
Ang stop ay normal na pagtatapos; ang length ay nangangahulugang naabot ng sagot ang limitasyon bago matapos ang modelo.
Saan pupunta susunod#
Mayroon ka na ngayong pinakamaliit na kapaki-pakinabang na loop: magpadala, basahin ang teksto, i-log ang mga token. Mula dito, i-wrap ang tawag sa isang method, at idagdag ang usage na mga numero sa iyong logger. Ang parehong pattern ay umiiral sa ibang mga wika kung halo-halo ang iyong stack: Go, Java at C#. Ang buong listahan ng mga modelo at presyo ay nasa models page, at ang API reference ay nasa docs.



