Go言語でOpenAI APIを使ってAIロボットを作ろう！

「ロボットを作るぞ！」  
あなたはエンジニアであり、サイエンティスト。  
目指すのは、会話ができる**超高性能AIロボット**！  

幸い、**OpenAI API** を使えば、**簡単にAIの頭脳を埋め込めます！**  
さあ、Go言語を使って、**AIロボットを組み立てる旅に出ましょう！**

## STEP 1: 必要な部品を揃えましょう（環境セットアップ）
ロボットを作るには、**部品（環境）** が必要です！  
以下の3つを準備しましょう。


### 1.ロボットの骨格（Go言語）
まず、ロボットのボディ（プログラムの土台）を作るために、**Go言語をセットアップ** しましょう。

#### Goがインストールされているか確認
ターミナルやコマンドプロンプトで、以下のコマンドを入力しましょう。

```
go version
```

結果が `go1.xx.x` のように表示されればOKです！  
もしインストールされていなければ、[Goの公式サイト](https://go.dev/dl/) からダウンロードしましょう。

![スクリーンショット 2025-02-09 23.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527611/aae81d77-ac7a-64ca-a11f-333d3eec33d8.png)


### 2. ロボットの頭脳の燃料（OpenAI APIキー）
AIを動かすには、OpenAIのAPIキーが必要です！  
以下の手順で、**APIキーを取得** しましょう。

1. [OpenAIの公式サイト](https://platform.openai.com/signup/) でアカウントを作成  
2. **APIキーを発行**（ダッシュボードの「API Keys」セクションで生成できます）  
3. 取得したキーを安全な場所に保存！**（なくすとロボットが動きません！）**

![スクリーンショット 2025-02-09 20.05.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527611/627ed74a-6305-5097-2f58-635560e582d9.png)

![スクリーンショット 2025-02-09 20.05.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527611/10a81a82-1174-d94d-730d-c1266d015356.png)

### 3. ロボットの動力モジュール（Goのライブラリ）
ロボットの脳を動かすために、必要なGoのライブラリをインストールしよう。

プロジェクト用のフォルダを作成して、Goモジュールを初期化：
```
mkdir ai-robot
cd ai-robot
go mod init ai-robot
```

OpenAIのライブラリをインストール：
```
go get github.com/sashabaranov/go-openai
```

これで、ロボットの部品がすべて揃いました！✨


## STEP 2: ロボットの頭脳を用意しましょう！
ロボットに「会話する能力」を与えましょう！  
以下のコードを `main.go` というファイルに書きましょう。


### コード：AIロボットを作成
```go
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/sashabaranov/go-openai"
)

func main() {
	// 🔋 ロボットの燃料（APIキー）
	apiKey := "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" // ★ここに自分のAPIキーを入力！

	// 🏭 AIロボットの工場（OpenAIクライアント）
	client := openai.NewClient(apiKey)

	// 🧠 ロボットの脳に初期指示を送る
	req := openai.ChatCompletionRequest{
		Model: openai.GPT3Dot5Turbo, // GPT-4を使いたいなら "openai.GPT4"
		Messages: []openai.ChatCompletionMessage{
			{
				Role:    "user",
				Content: "おはよう！君はどんなロボットなの？",
			},
		},
	}

	// 🚀 AIロボットを起動！
	resp, err := client.CreateChatCompletion(context.Background(), req)
	if err != nil {
		log.Fatalf("⚠️ ロボットの頭脳がエラーを起こした: %v", err)
	}

	// 🎤 ロボットが応答！
	fmt.Println("🤖 ロボット:", resp.Choices[0].Message.Content)
}
```


## STEP 3: ロボットのテスト運転
コードを書いたら、ロボットを動かしてみましょう！

ターミナルで以下を実行：
```
go run main.go
```

もし、以下のような応答が表示されたら成功！🎉

```
🤖 ロボット: こんにちは！私はあなたのAIアシスタントです。何かお手伝いできますか？
```

おめでとう！🚀 **君のAIロボットが誕生しました！** 🎉


## STEP 4: ロボットの不具合を修理（トラブルシューティング）
ロボットがうまく動かないときは、以下をチェック！

### エラー1: APIキーが無効
```
APIエラー: invalid_api_key
```
:::note info
🔧 **修理方法:**  
- **APIキーを確認！**（間違っていないか、`sk-xxxx` の形式か）  
- **環境変数でAPIキーを管理するのがベスト！**
  - `.env` に `OPENAI_API_KEY=sk-xxxxxxx` を保存
  - Goで `os.Getenv("OPENAI_API_KEY")` を使う
:::

---

### エラー2: レスポンスが遅い
```
Timeout error
```
:::note info
🔧 **修理方法:**  
- **モデルを `GPT-3.5` にすると速くなる！**
- **Wi-Fi環境が安定しているかチェック！**
- **APIの呼び出しに `context.WithTimeout` を設定**
:::


---

### エラー3: APIの回数制限
```
Rate limit exceeded
```
:::note info
🔧 **修理方法:**  
- **APIの無料プランでは回数制限がある！**
- **OpenAIの有料プランを検討する！**
- **エラーハンドリングをしてリトライするロジックを追加する**
:::


## まとめ
✅ **GoでOpenAI APIを使って、AIロボットを作れる！**  
✅ **APIキーをセットして、AIの脳みそをセットアップ！**  
✅ **エラーハンドリングをしっかりすれば、スムーズに動く！**  
✅ **ロボットをどんどん賢く進化させよう！**