Category: ChatGPT

ChatGPTをCLIから使いたい

背景

ChatGPTのAPIをCLIから使いたい。シェルスクリプトやvimから手軽に使えるようにしたい。 簡単なGolangのスクリプトを書いた tin-machine/gpt-cli

※ 2023年後半からclaude, codex, gemini cliなど各社cliを出してきたので情報が古いです

Golangのopenaiライブラリを使った際にタイムアウト設定する時に少しハマった

2024/06/17 NewClientWithConfig()で少しハマった

画像を添付しようとした際にエラーが出た。 応答に時間がかかっている可能性を考えてタイムアウトを伸ばそうと考えた。

// カスタムHTTPクライアントの作成
httpClient := &http.Client{
 Timeout: 60 * time.Second, // タイムアウトを60秒に設定
}

// OpenAIクライアントの作成
config := openai.DefaultConfig(os.Getenv("OPENAI_API_KEY"))
config.HTTPClient = httpClient
client := openai.NewClientWithConfig(config)

resp, err := client.CreateChatCompletion(
 context.Background(),
 openai.ChatCompletionRequest{
  Model:    openai.GPT4o, // 必要に応じてモデルを変更
  Messages: messages,
 },
)

github.com/sashabaranov/go-openai の NewClientWithConfig の使い方を見ると

ClientConfigを渡すらしい。 openai package - github.com/sashabaranov/go-openai - Go Packages のサンプルコードが参考になりそう。結構、複雑な接続設定が可能なようだ。

config := openai.DefaultConfig(os.Getenv("OPENAI_API_KEY"))
port := os.Getenv("OPENAI_PROXY_PORT")
proxyURL, err := url.Parse(fmt.Sprintf("http://localhost:%s", port))
if err != nil {
 panic(err)
}
transport := &http.Transport{
 Proxy: http.ProxyURL(proxyURL),
}
config.HTTPClient = &http.Client{
 Transport: transport,
}

client := openai.NewClientWithConfig(config)

client.CreateChatCompletion( //nolint:errcheck // outside of the scope of this example.
 context.Background(),
 openai.ChatCompletionRequest{
  // etc...
 },
)

一旦、configを作りconfig.HTTPClientでオプションを渡すようだ。

Read more...