ChatGPTをCLIから使いたい
Posted:
背景
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でオプションを渡すようだ。
ToDo
- File Search使いたい
- OpenAI Assistants API(v2)で新しくなったFile Search(Vector Stores)を使う
- Assistants API v2のFAQでは、File Searchの制限として「ベクトルストアあたり最大10,000ファイル」などが示されている。
- Assistants API (v2) FAQ - OpenAI Help Center
- OpenAI Assistants API(v2)で新しくなったFile Search(Vector Stores)を使う
参考
画像入力
- Vision - OpenAI API
- オフィシャルの情報
- サンプルコードもあり参考になる
- Vision - OpenAI API Base64のサンプルが参考になった
- オフィシャルの情報
- Supports image input in models gpt-4o and gpt-4 · Issue #749 · sashabaranov/go-openai
- pythonコード、画像アップロードの参考になる
- GPT-4o APIでテキスト生成や画像入力して遊んでみた| Gluegent | サイオステクノロジー株式会社
- pythonのコードで画像入力のサンプル
- Vision - OpenAI API
sashabaranov/go-openai: OpenAI ChatGPT, GPT-3, GPT-4, DALL·E, Whisper API wrapper for Go
Golangのopenaiライブラリ、(すべての機能は把握してないけど)かなりの機能が実装されてる。更新頻度とスター数が凄い
openai package - github.com/sashabaranov/go-openai - Go Packages
- Golangのopenaiライブラリのリファレンスマニュアル
コードからコミュニティへ 〜 Go OpenAIと共に歩むOSSの旅 〜 | 株式会社ヌーラボ(Nulab inc.)
- コミッターの人、凄い
openai/openai-python: The official Python library for the OpenAI API
- python向けのライブラリ、私はGolangを使っていきたいがopenaiへのリクエスト自体はpythonと同様なので参考になる