@gakeppuchi

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

OpenaiのAPIについてRuby使用しています

解決したいこと

RubyonRailsで質問にチャットで答えてくれるアプリを作っています。
Openaiのapiは取得済ですが、うまく返答が返ってきません。
コードの内容はほかの方が成功している内容をコピペしています。

発生している問題・エラー

undefined method `chat' for #<OpenAI::Client:0x000055e8399daa68> (NoMethodError)

該当するソースコード

require "openai"

client = OpenAI::Client.new(api_key: ENV["OPENAI_API_KEY"])

response = client.chat(
    parameters: {
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: "Hello!" }],
    })
puts response.dig("choices", 0, "message", "content")

自分で試したこと

openaiのgemが取れていないのかと考え、installされているファイルを確認、入っていました。
環境変数にapiキーは隠していますが、そちらも正常に動作しております。

require "openai"

client = OpenAI::Client.new(api_key: ENV["OPENAI_API_KEY"])

print "Enter a prompt: "
user_prompt = gets.chomp

response = client.completions(
  engine: 'davinci',
  prompt: user_prompt,
  max_tokens: 5
)

puts response.choices[0].text

このコードでは動かすことはできていますが、解答の精度が低すぎて使い物になりませんでした。なんとかgpt3.5turboでchatを動かしたいです。
こちらのコードでは動いているので、APIとインストールには問題がないと思いますが、ここから先が分かりません。何卒宜しくお願い致します。

0 likes

2Answer

ライブラリのバージョンを上げてみてください。
https://github.com/alexrudall/ruby-openai/releases/tag/v3.4.0
v3.4.0でchatメソッドが追加になっています。(使っているライブラリはこちらですよね?)

また質問する際はどのライブラリを使っているかやライブラリのバージョンを併記すると回答が得られやすいかと思います。

1Like

Comments

  1. @gakeppuchi

    Questioner

    @h_kono0707様
    解答ありがとうございます。
    使っているgemのバージョンですが
    gem listで調べたところ、
    ruby-openai (3.7.0)を使っていました。
    先ほど教えて頂いたライブラリのバージョンに変更したほうがよろしいのでしょうか?申し訳ございませんがご教授お願い致します。

openai gem と ruby-openai gem を混同されているようです。どちらも OpenAI::Client クラスを提供しますが実装は異なり、 chat メソッドは後者にしかありません。
また OpenAI::Client.newapi_key: 引数を受け付けるのは前者だけで、後者は access_token: 引数です。

1Like

Comments

  1. @gakeppuchi

    Questioner

    @usai様
    ご回答ありがとうございます。ご指摘の通り、openai gemとruby-openai gemがごっちゃになっていました。
    ruby-openai (3.7.0)を使っています。
    ```
    require "openai"


    client = OpenAI::Client.new(access_token:ENV["OPENAI_API_KEY"])

    response = client.chat(
    parameters: {
    model: "gpt-3.5-turbo",
    messages: [{ role: "user", content: "Hello!" }],
    })
    puts response.dig("choices", 0, "message", "content")

    ```
    ruby gpt.rb
    Traceback (most recent call last):
    2: from gpt.rb:4:in `<main>'
    1: from gpt.rb:4:in `new'
    /home/taichi/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/openai-0.3.0/lib/openai/client.rb:17:in `initialize': missing keyword: api_key (ArgumentError)

    ご指摘の通り、api_keyでとすると今度はこちらのエラーが出てきます。
    私の出来が悪くご迷惑をおかけします。なんとかクリアしたいのでご教授をお願い致します。
  2. > /home/taichi/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/openai-0.3.0/

    openai gem と ruby-openai gem を両方インストールされたのではないでしょうか。

    エラーを見ると openai gem がロードされています。どちらの gem も require "openai" で読み込めるようになっているので、 gem の名前順で先に来る方がロードされたように見えます。

    gem uninstall openai を実行してアンインストールすると ruby-openai gem をロードできるようになると思います。
  3. ふつうこんな現象は起きないような落とし穴なので誰でもハマると思います、お気になさらぬよう。
  4. @gakeppuchi

    Questioner

    @usai様
    お返事ありがとうございます!gemが2種類あるということを認識できたおかげで課題を解決することができました!最終的に
    ```ruby
    require 'ruby/openai'
    ```

    このように入力することにより、ruby-openaiを呼び出すことができ、chatもnomethodエラーにならずにできました!
    励ましの言葉ありがとうございます、頑張ります!

Your answer might help someone💌