Bumalik sa blog

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.

Ni CheapTokens TeamNai-publish noong 5 min na pagbabasa

Ruby script na may OpenAI::Client.new at custom na base_url na nakaturo sa CheapTokens
Sa pahinang ito
  1. Ano ang kailangan mo bago magsimula
  2. Ang script
  3. Pagbasa ng ibinabalik
  4. Magkano ang isang tawag na ganito
  5. Kung hindi ito tumakbo
  6. Saan pupunta susunod

Oo, gumagana ang opisyal na openai gem sa CheapTokens: ipasa ang base_url: "https://api.cheaptokens.dev/v1" at ang iyong key sa OpenAI::Client.new, tawagin ang client.chat.completions.create, at basahin ang teksto mula sa choices.first.message.content. 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:

ruby
gem "openai", "~> 0.120.0"

Pagkatapos ay bundle install. Kung walang Bundler, gem install openai -v 0.120.0 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.

bash
export CHEAPTOKENS_API_KEY="sk-your-key"

Ang script#

Gumawa ng ask.rb:

ruby
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

Patakbuhin 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-ai/DeepSeek-V4-Flash-0731. 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.

Terminal na may linya ng Gemfile, ang na-export na key at ruby ask.rb
Ang tatlong command: i-pin ang gem, i-export ang key, patakbuhin ang script.

Pagbasa ng ibinabalik#

Ang tugon ay isang object, hindi hash, kaya tumatawag ka ng mga method dito. Ang teksto ay nasa completion.choices.first.message.content; iyon din ang path na ginagamit ng README ng gem.

Dalawang linya pa ang dapat i-print mula sa unang araw:

  • Sinasabi ng finish_reason kung bakit huminto ang modelo. Ang stop ay normal na pagtatapos. Ang length ay nangangahulugang may limitasyon sa haba na pumutol sa sagot. Kung makita mo iyon, bakit napuputol ang mga sagot at paano ayusin.
  • Ang usage ay 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 ang puts completion.usage, kaya makikita mo ang parehong numero kung paano ito ibinalik ng API.

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 Bawat kahilingan 1,000 mga kahilingan OpenRouter, 1,000 mga kahilingan
GLM-5.3-Flash $0.000012 $0.012 $0.0225
DeepSeek-V4-Flash $0.00002 $0.0195 $0.042
MiniMax-M2.7 $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-org/GLM-5.3-Flash (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?

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_API_KEY.

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.rb.

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.