Categorygithub.com/tin-machine/gpt-cli
modulepackage
0.1.20
Repository: https://github.com/tin-machine/gpt-cli.git
Documentation: pkg.go.dev

# README

概要

ChatGPTに度々問い合わせを行っているのですが、 viで書いたテキストを貼り付ける事が多いので、CLIから問い合わせできたら楽だな、という発想のコマンドです。

インストール

go install github.com/tin-machine/gpt-cli@latest

環境変数 OPEN_API_KEY にChatGPTのAPIキーを設定してください

export OPENAI_API_KEY="your-api-key-here"

使い方

シンプルな使い方

  • 単純に聞くだけの場合:
gpt-cli "こんにちは!"
  • 標準入力から:
echo "こんにちは!" | gpt-cli
  • システムプロンプトとユーザープロンプトを指定している場合:
gpt-cli -s "なるべく陽気に答えてください" -u "こんにちは"
  • 会話ログを-histroyで保存しつつ会話:
gpt-cli -p prompt4 -history gpt-cli改修 -u "何か改修できる点を教えてください"
  • 会話ログを表示:
gpt-cli -show-history gpt-cli改修
  • 下に記載しているconfig.yamlを設定している場合:
gpt-cli -p prompt1
  • ファイルをユーザープロンプトに追加して会話:
gpt-cli -p prompt4 -history gpt-cli改修 -f main.go,config.go,utils.go -u "何か改修できる点を教えてください"

Assistant APIを使う

  • ファイルをアップロードする例:
gpt-cli --upload-file "path/to/file.txt" --upload-purpose "assistants"
  • ファイルを削除する例:
gpt-cli -delete-file '*.go'
  • ベクトルストアをする例:
gpt-cli --vector-store-name "my_vector_store" --vector-store-action create
  • --vector-store-actionのオプション

    • create
    • list
    • delete
    • add-file
  • ベクトルストア作って中にファイルを追加する例:

gpt-cli --upload-and-add-to-vector '*.go' --vector-store-name "my_vector_store"
  • ベクトルストアの一覧を表示する例:
gpt-cli --vector-store-action list
  • ベクトルストアを削除する例:
gpt-cli --vector-store-action delete --vector-store-id <ベクトルストアのID>
  • 複数ファイルをVector-storeにアップロードする例:
    • --upload-and-add-to-vector: ファイルをカンマ区切り
    • --vector-store-name: ベクトルストアの名前
    • --upload-purpose: アップロード目的を引数に取る
      • assistants: アシスタント
      • assistants_output: アシスタントの結果
      • batch: バッチ処理
      • fine-tune: ファインチューニング
      • fine-tune-results: ファインチューニング結果を置く
gpt-cli --upload-and-add-to-vector assistant_handler.go,config.go,config_loader.go,file_handler.go,main.go,openai_client.go,options.go,prompt_config.go,tool_config.go,utils.go,vector_store_handler.go -vector-store-name add-option -upload-purpose assistants
  • アシスタントを作成する例:
gpt-cli --create-assistant --assistant-name "MyAssistant" --assistant-description "これはテスト用のアシスタントです。" --user-message "あなたはユーザーを助けるフレンドリーなアシスタントです。"
  • アシスタント作成時、vectore-storeにアップロードしたファイルを追加する例:
gpt-cli --create-assistant  --upload-and-add-to-vector '*.go' --vector-store-name "my_vector_store"
  • アシスタントと対話する例:
gpt-cli --assistant-id "assistant_id" --message "こんにちは!"
  • アシスタントの設定をconfig.yamlで行う:

config.yamlからassistantsの設定を探してアシスタントを操作する

gpt-cli -a myassistant1

config.yamlの設定は下記の通り:

vectorStores:
  myVectorStore:
    name: "my_vectore_store"

ssistants:
  myassistant1:  # アシスタントのキー名、コマンドラインから指定する際はこのキーを使用します
    name: "My First Assistant"  # アシスタントの名前
    description: "This is a description of my first assistant."  # アシスタントの説明
    model: "gpt-3.5-turbo"  # 使用するAIモデル
    instruction: "あなたはユーザーを助けるアシスタントです。"  # アシスタントに与える初期の指示
    temperature: 0.7  # モデルの応答の多様性を制御するパラメータ
    vectorStoreName: "my_vector_store"  # 関連付けたいベクトルストアの名前

オプション

取り得るオプションですが

  • -s: システムプロンプトで文字列を与えたい(config.yamlを上書き)
  • -u: ユーザープロンプトで文字列を与えたい(config.yamlを上書き)
  • -p: config.yaml内でベースとなるプロンプトを選択
    • -p が無い場合は -s-u が必要
  • -i: イメージファイルをカンマ区切りで与える
  • -c: config.yamlのパスを指定
  • -m: モデルを指定
  • -d: デバックモード
  • -v: バージョン
  • -collect: 現在のディレクトリ内のファイルをUserプロンプトに追加
  • -history: 会話履歴の保存ファイルを指定(拡張子は不要)
  • -t: タイムアウト時間(秒)を指定
  • -f: 読み込むファイルのパスをカンマ区切りで指定
  • -show-history: 会話ログを表示
  • --vector-store-action: ベクトルストアのアクションを指定(createlistdeleteadd-file)。
  • --vector-store-name: 作成または操作するベクトルストアの名前を指定。
  • --vector-store-id: 操作するベクトルストアのIDを指定。
  • --upload-file: OpenAIにアップロードするファイルのパスを指定。
  • --upload-purpose: ファイルのアップロード目的を指定(例:fine-tune, assistants, batch)。
  • --list-files: アップロードしたファイルの一覧を表示。
  • --delete-file: 削除するファイルのIDを指定。
  • --upload-and-add-to-vector: ファイルをアップロードし、ベクトルストアに追加。
  • --assistant-id: 操作するアシスタントのIDを指定。
  • --create-assistant: 新しいアシスタントを作成。
  • --assistant-name: アシスタントの名前を指定。
  • --assistant-description: アシスタントの説明を指定。
  • --instruction: アシスタントへの指示を指定。
  • --message: アシスタントに送信するメッセージを指定。
  • --file-id: ベクトルストアに追加するファイルのIDを指定。
  • --file-ids: ベクトルストアに追加するファイルのIDをカンマ区切りで指定。

config.yamlのサンプル

~/.config/gpt-cli/config.yaml に配置してください

autoSaveLogs が true の場合、会話ログを保存します。 autoSaveLogsがtrueでlogDirを指定しない場合、環境変数XDG_DATA_HOMEが設定sれている場合は$XDG_DATA_HOME/gpt-cli/、設定されていない場合は$HOME/.local/share/gpt-cli/に保存します。 この保存ファイル名は-histroyで指定したファイル名で変更できます。会話の文脈を繋げたい場合は -history で指定した方が会話が繋がります。

autoSaveLogs: true # 自動的に会話ログを保存するか
# logDir: "<会話ログを保存するディレクトリ>"
prompts:
  prompt1:
    model: gpt-4o
    system: |
      "深呼吸し順番にゆっくり考えてみてください。出力するの最終的なものだけにしてください(途中の考えてほしい段階は出力しないでください)"
      "次の文章はランダムなタスクになっています。文章すべて最後まで読み込み"
      "タスクを分析、分解し、依存関係を考えて私が次に行うべき重要なタスクを3個ピックアップ、そのタスクを行う事で可能になる未来を考え楽しくなるように話をふくらませるようにしてください。"
      "最終的にボリュームのある一つの文章にまとめて300文字以内で出力してください。"
    user: |
      -uオプションで必要なソースコードを上書きする
  prompt2:
    model: gpt-4o
    system: |
      "ずんだもんっぽい文章にしてください、その際、変換するなどの作業工程は省き、喋っているように内容だけ出力してください"
    user: |
      -uオプションで必要なソースコードを上書きする
  prompt3:
    model: gpt-4o
    system: |
      "動作確認です。添付ファイルは存在するでしょうか?またどんなファイルでしょうか?画像ファイルの場合、内容について日本語で表現して欲しいです"
    user: |
      -uオプションで必要なソースコードを上書きする
  prompt4:
    model: gpt-4o
    system: |
      "ソースコードのレビューをお願いします。何か改善点を日本語で複数あげてほしいです。"
    user: |
      -uオプションで必要なソースコードを上書きする
  prompt5:
    model: gpt-4o
    system: |
      次のプログラムの改修点をいくつかあげてください。
      複数ある場合、ファイルごとに指摘事項をあげてください。
      ソースコードを出力する場合、ソースコード全てを出力してください。
    user: |
      -uオプションで必要なソースコードを上書きする

# Functions

AddFilesToVectorStore は複数のファイルをベクトルストアに追加します.
AddFileToVectorStore はファイルをベクトルストアに追加します.
BuildUserMessage はユーザーメッセージを構築します.
CollectFilesは、指定されたディレクトリ内のすべてのファイル名とその内容を収集します。 収集した内容は、ファイル名と内容のペアとして文字列として返されます。 引数dirは検索開始のディレクトリです。 .gitディレクトリはスキップされます。.
ConfigureLogDirectory はログディレクトリの設定と検証を行います.
CreateMessages はプロンプト設定からメッセージを作成します.
CreateVectorStoreは、新しいベクトルストアを作成し、その情報を返します。 引数clientはOpenAI APIクライアント、nameは作成するベクトルストアの名前です。 作成に成功すると、ベクトルストアの詳細が返されますが、それに失敗した場合はエラーメッセージが返されます。.
ファイル名でファイルを削除するためのヘルパー関数.
DeleteUploadedFile は指定されたIDのファイルを削除します.
DeleteVectorStoreは、指定されたIDのベクトルストアを削除します。 引数clientはOpenAI APIクライアント、vectorStoreIDは削除するストアのIDです。 成功した場合はnilが返されますが、何らかのエラーが発生した場合は、そのエラーメッセージが返されます。.
DisplayConversationHistory は会話履歴をMarkdown形式で表示します.
EnsureDirectory は指定されたディレクトリパスが存在するか確認し、存在しない場合は作成します.
ExecuteChatCompletion はOpenAI APIにリクエストを送り、アシスタントの応答を取得します.
Float32Ptrは、渡されたfloat32値をポインタ型(*float32)に変換して返します。 これにより、他の関数でfloat32を参照できるようになります。.
GetConfigFilePathは、設定ファイルのパスを取得するための関数です。 引数configPathに指定されたパスを優先して使用し、指定がない場合は環境変数やデフォルトパスから取得します。 成功した場合は設定ファイルのパスを返し、エラーが発生した場合はエラーメッセージが返されます。.
GetDefaultPromptConfig はデフォルトのプロンプトの設定を取得します.
GetLogDirectory は設定ファイルや環境変数に基づいてログの保存ディレクトリを取得します.
GetOrCreateVectorStoreは、指定された名前のベクトルストアを取得するか、存在しない場合は新しく作成します。 引数clientはOpenAI APIクライアント、nameはターゲットとなるベクトルストアの名前です。 成功した場合は、そのベクトルストアの詳細が返されますが、失敗した場合はエラーメッセージが返されます。.
GetOrCreateVectorStoreByName は指定した名前のベクトルストアを取得するか、新しく作成します.
GetPromptConfig はプロンプトの設定を取得します.
GetVectorStore はベクトルストアを取得または作成します.
ベクトルストアIDで取得する関数を追加.
ListUploadedFilesは、ユーザーがOpenAIにアップロードしたファイルの一覧を取得する関数です。 clientはOpenAI APIクライアントであり、レスポンスにはファイルの詳細が含まれます。 成功した場合はファイルのリストが返されますが、API呼び出しに失敗した場合はエラーが返されます。.
ListVectorStoresは、OpenAIに存在するすべてのベクトルストアを一覧で取得します。 引数clientはOpenAI APIクライアントであり、成功した場合はベクトルストアのリストが返されます。 何らかの理由で取得に失敗した場合は、その失敗に関するエラーメッセージが返されます。.
LoadConfigは、指定されたファイルパスから設定を読み込む関数です。 設定ファイルがYAML形式であり、内容がConfig構造体にマッピングされます。 引数filePathは設定ファイルの場所を指します。 成功すると、読み込まれたConfigが返され、読み込みに失敗した場合はエラーメッセージが返されます。.
LoadConfigurationは、指定されたパスから設定ファイルを読み込み、内容をConfig構造体に格納します。 設定ファイルが存在しない場合や読み込みに失敗した場合は、デフォルト設定を返します。 引数configPathは設定ファイルのパスを指します。.
LoadConversationHistory はファイルから会話履歴を読み込みます.
No description provided by the author
No description provided by the author
NewOpenAIClient はOpenAI APIキーとタイムアウトを使用して新しいクライアントを初期化します.
ParseCommandLineArgs はコマンドライン引数を解析します.
ReadFilesは、コンマで区切られたファイル名リストからファイルを読み込み、その内容を結合して返します。 引数fileListは読み込むファイルのパスを示します。 成功した場合は内容が連結された文字列、エラーが発生した場合はそのエラーメッセージを返します。.
RecursiveGlob は再帰的なグロブパターンを展開します.
Run はプログラムのメイン処理を実行します.
SaveConversationHistory は会話履歴をファイルに保存します.
SetupLogging はロギングの設定を行います.
SplitImageListは、カンマで区切られた画像ファイル名のリストを分割し、スライス(配列)として返します。 引数imageListはカンマ区切りの文字列です。.
StringPtrは、渡された文字列をポインタ型(*string)に変換して返します。 これにより、他の関数で文字列を参照できるようになります。.
UploadFileは指定されたファイルをOpenAI APIにアップロードする関数です。 引数clientはOpenAI APIのクライアント、filePathはアップロードするファイルのパス、purposeはファイルの用途です。 成功した場合はアップロードされたファイルの情報を含むopenai.File構造体が返されます。 エラーが発生した場合は、そのエラーメッセージが返されます。.
UploadFiles は複数のファイルをOpenAIにアップロードし、そのファイルIDのスライスを返します.

# Constants

No description provided by the author
No description provided by the author

# Variables

No description provided by the author

# Structs

No description provided by the author
Configはアプリケーション全体の設定を保持するための構造体で、以下のフィールドを含みます: - LogDir: ログファイルを保存するディレクトリ - AutoSaveLogs: ログの自動保存を有効にするかどうか - Prompts: プロンプト名とその内容のマッピング.
ConsoleLogger はコンソールに出力するロガーです.
Options はコマンドライン引数から取得するオプションを保持します.
Promptはプロンプト設定の構造体で、以下のフィールドを含みます: - Model: 使用するAIモデル名 - System: システムメッセージ(アシスタントへの指示) - User: ユーザーからのメッセージ - MaxTokens: 最大トークン数 - Attachments: 添付ファイル名のリスト - Tools: 使用するツール名のリスト.
No description provided by the author
No description provided by the author

# Interfaces

Logger はロギングのためのインターフェースです.
OpenAIClient インターフェースを定義.