💎【Ruby】AnthropicのClaude3をRubyから呼び出す

## 環境
macOS Ventura 13.5.2
Ruby 2.6.10p210

## やりたいこと
RubyをAnthropicのClaude3を呼び出したい
日本語記事を検索するとAmazon Bedrockを使った方法しかないので記事にしてみた

## やったこと
`@alexrudall`氏の`anthropic`のライブラリを使用します

https://github.com/alexrudall/anthropic

---

#### `Gemfile`に下記を追加
```Gemfile
source 'https://rubygems.org'
gem "anthropic"
```
#### ライブラリをインストール
ターミナルにて現在の作業ディレクトリに移動し`bundle install`を実行
```zsh
bundle install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using base64 0.2.0
Following files may not be writable, so sudo is needed:
  /Library/Ruby/Gems/2.6.0
  /Library/Ruby/Gems/2.6.0/build_info
  /Library/Ruby/Gems/2.6.0/cache
  /Library/Ruby/Gems/2.6.0/doc
  /Library/Ruby/Gems/2.6.0/extensions
  /Library/Ruby/Gems/2.6.0/gems
  /Library/Ruby/Gems/2.6.0/specifications
Using faraday-net_http 3.0.2
Using ruby2_keywords 0.0.5
Using faraday 2.8.1
Using multipart-post 2.4.1
Using faraday-multipart 1.0.4
Fetching anthropic 0.2.0


Your user account isn't allowed to install to the system RubyGems.
  You can cancel this installation and run:

      bundle install --path vendor/bundle

  to install the gems into ./vendor/bundle/, or you can enter your password
  and install the bundled gems to RubyGems using sudo.

  Password:
Installing anthropic 0.2.0
Using bundler 2.1.4
Bundle complete! 1 Gemfile dependency, 8 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
```

#### Rubyコードを記述
```claude3.rb
require "anthropic"

client = Anthropic::Client.new(access_token: "{自分のAPIキーを記述}")

response = client.messages(
  parameters: {
    model: "claude-3-haiku-20240307", # もしくは claude-3-opus-20240229 もしくは claude-3-sonnet-20240229
    system: "Respond only in Japanese.", # オプション
    messages: [
      {"role": "user", "content": "Hello! What is the most famous mountain in Japan?"},
    ],
    max_tokens: 1000
  }
)

# responseの中身からtextを取り出す
message_text = response["content"].first["text"]
puts message_text
```

#### AnthropicのAPIキーを取得しセット

[Anthropic ConsoleのAPIキーのページ](https://console.anthropic.com/settings/keys)にて自分のAPIを取得

`Create key`ボタンを押下し、出てきたダイアログに任意のAPIキーの名前を入力
その後表示されるAPIキーのダイアログの`Copy key`をクリックで取得できます
![スクリーンショット 2024-05-11 19.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188242/dce82b84-82f7-acce-a08d-bf943673a1e4.png)

このAPIキーがバレると不特定多数に勝手に使われてしまうので**絶対に共有はしないで**ください
（※このままGit push等するとバレてしまいます）
（本来であればこのAPIキーをハードコーディングするのでなくdotenvのようなものを使用して、キーを環境に安全に渡すか、Railsプロジェクトで使用している場合はRails認証情報を渡すべきです）


尚、アカウントを持っていない場合は新規登録すると$5の無料枠があるのでそれだけでも結構遊べますよ！！


上記で取得したAPIキーをRubyコードの`{自分のAPIキーを記述}`内に記述
```rb
client = Anthropic::Client.new(access_token: "{自分のAPIキーを記述}")
```

#### ターミナルで実行

```zsh
ruby claude3.rb
日本で最も有名な山は、富士山(ふじさん)です。富士山は日本を代表する3,776mの高峰で、伝統的な象徴として日本文化の中で重要な位置を占めています。富士山は美しい雪頂を持ち、春夏秋冬を通して絶景を見せてくれます。観光地としても人気が高く、多くの日本人や外国人観光客が訪れます。富士山は日本の代名詞ともいえる国民的な山なのです。
```

##### ターミナルから質問する方法

下記の様に変更することでターミナルから直接質問できます

```clade3.rb
require "anthropic"

client = Anthropic::Client.new(access_token: "{自分のAPIキーを記述}")

# ターミナルからの入力を受け取る
puts "Please enter a message:"
user_message = gets.chomp

response = client.messages(
  parameters: {
    model: "claude-3-haiku-20240307", # もしくは claude-3-opus-20240229 もしくは claude-3-sonnet-20240229
    system: "Respond only in Japanese.", # オプション
    messages: [
      {"role": "user", "content": user_message},
    ],
    max_tokens: 1000
  }
)

# responseの中身からtextを取り出す
message_text = response["content"].first["text"]
puts message_text
```

↓

```zsh
ruby claude3.rb
Please enter a message:
日本はどのような国ですか？
はい、日本は非常に興味深い国です。以下のようなことが特徴的です:

- 古くから独特の文化や伝統を持っており、それが現代にも受け継がれています。例えば、茶道、武道、盆栽など。
- 自然環境も豊かで、四季の変化を感じられる美しい国です。富士山や桜、紅葉など、自然の素晴らしい景色が多数あります。
- 最新のテクノロジーや先端技術の発展も目覚ましく、ものづくりが得意な国として知られています。
- 人々の礼儀正しさや丁寧さ、そして旅行者に対する優しさなどから、世界中から観光客を引き付けています。
- 日本食文化の多様性と繊細さは世界的に高く評価されています。寿司、らーめん、天ぷらなど、非常に魅力的な料理が多数あります。

このように、日本は伝統と革新が両立した、非常に魅力的な国だと言えるでしょう。訪れる価値の高い国だと思います。
```