🙆

【完全解説】ChatGPT-GenieAI(VSCodeプラグイン)の機能と設定のすべて【拡張機能】

2023/07/05に公開

この記事の目的

  • GenieAIとはそもそも何かを知る(概念理解)
  • 課金体系やかかるお金についてトークン含め詳細に知る
  • GenieAIの使い方を詳しく知る
  • 神ツールにするための設定について詳しく知る

この記事を見れば今日からGenie AIが最高のパートナーとなる。
ではどうぞ。

目次

課金手続き

ChatGPT APIは有料なため、まずは課金設定をする。
クレカ設定を行い、利用上限額を決める。
上限が決められるので、使いすぎを防止できて便利。

メール警告10ドル、上限20ドル、くらいでとりあえずやってみる。
課金停止も2クリックで簡単でUXよい。

設定方法はこのサイトがとても分かりやすい。
https://pouhon.net/chatgpt-api/7694/#:~:text=切り替わるはずです。-,APIの課金手続きについて,-APIを使

料金とトークンについて

料金はAPI利用時に消費される「トークン量」に応じて決定される。

トークンの消費のされ方

https://auto-worker.com/blog/?p=7459

質問文、回答文、それら繰り返しによる文脈の保存、に対してトークンが消費される。

各GPTバージョンに対する文脈保存のトークン量と料金表

最新の料金表は下記から確認できる。
以前と比べるとだいぶ安くなっていてよい。

https://openai.com/pricing

一応旧料金表も下記の残しておく。

2023年11月6日版料金表

https://openai.com/blog/new-models-and-developer-products-announced-at-devday#:~:text=Lower prices and higher rate limits

モデル 1000トークン当たりの料金 (入力) 1000トークン当たりの料金 (出力)
GPT-3.5 Turbo 16K $0.001 = 0.15円 $0.002 = 0.3円
GPT-4 Turbo 128K $0.01 = 1.5円 $0.03 = 4.5円

※1ドル=150円換算

2023年6月21日版(旧料金体系)

https://dev.classmethod.jp/articles/openai-api-gpt-update-ver-0613/

モデル 1000トークン当たりの料金 (入力) 1000トークン当たりの料金 (出力)
gpt-3.5-turbo $0.0015 = 0.21円 $0.002 = 0.28円
gpt-3.5-turbo-16k $0.003 = 0.42円 $0.004 = 0.56円
gpt-4 $0.03 = 4.2円 $0.06 = 8.4円
gpt-4-32k $0.06 = 8.4円 $0.12 = 16.8円

※1ドル=140円換算

日本語トークン計算

日本語はトークンの計算方法が独特。こちらのサイトでトークン量を計算したい文章を貼り付ければ、だいたいのトークンが計算できる。
https://platform.openai.com/tokenizer

日本語やアルファベットが含まれ、だいたい1000文字=1250トークン(1.25倍)くらいと考えておけば妥当か。

利用した料金の確認方法

公式サイトから現在までに利用した料金を確認できる
https://platform.openai.com/account/usage

GenieAIの導入方法

ChatGPTのバージョンを選ぶ → APIキー発行してVSCedeへ設定 → 使う、の流れ。
APIキーはPCごとに作成して管理するのがセキュリティ的にいいかな。
APIキーの作成も削除もとても簡単。

使い方に関してもこのページが分かりやすいので紹介。
https://pouhon.net/chatgpt-api/7694/

正確な情報は公式サイト参照
https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode

GenieAIとChatGPTの違い

GenieAIとChatGPTの違いをGPT4(Genie)に聞いてみた。

あなたは会話もできるの?あなたは何ができるの?

はい、私は会話もできます。私は主にコーディングとプログラミングに関する質問を専門にしていますが、それ以外の一般的な話題についてもお手伝いできることがあります。以下に私が提供できるサポートと助言の例をいくつか挙げます。

  • プログラミング言語(Python, JavaScript, Java など)に関する質問
  • アルゴリズムやデータ構造の解説
  • エラーのトラブルシューティングと修正方法
  • コードの最適化とリファクタリング

他に質問や要望があれば、どんどんお聞きください。できる範囲でお手伝いさせていただきます。

Web版のChatGPTとあなたは何が違いますか?

Web版のChatGPTと私(Genie)の違いは、主に使用されるプラットフォームとインタラクションの方法です。以下は2つの間の主な違いを示しています。

  1. プラットフォーム:

    • Web版のChatGPT: オンラインウェブアプリケーションであり、ブラウザからアクセスして使用します。
    • Genie: テキストベースのコミュニケーションプラットフォームで利用できます。例えば、答えたりアドバイスを提供するためにここでメッセージやコメントを受け取ります。
  2. 専門分野:

    • Web版のChatGPT: 一般的な会話や質問に対応しますが、特定のトピックや専門分野に焦点を当てたスキルは限られています。
    • Genie: コーディングとプログラミングに関する質問や相談に特化しており、その分野に関するアドバイスや正確な情報を提供することが目的です。
  3. インタラクション方法

    • Web版のChatGPT: ユーザーがテキスト入力で質問し、AIは回答を生成して表示します。
    • Genie: これまでと同様、ユーザーがテキスト入力で質問し、私は適切な回答やアドバイスを提供します。ただし、私の回答は主にコーディングとプログラミングに関連しています。

全体として、Web版のChatGPTは一般的な会話に対応するAIであり、Genieはコーディングとプログラミングの専門知識を持つAIだと言えます。

ではプログラミングとは関係のない日常的な質問をした場合はどうなりますか?

プログラミングとは直接関係のない日常的な質問にもできる限り回答しようとしますが、私(Genie)はコーディングとプログラミングに特化したAIです。そのため、他の一般的なトピックに関する回答は限定的であり、専門外の情報については十分正確でない場合があります。もちろん、お手伝いできる範囲内であれば喜んで回答します。ただし、得意分野以外の質問に対する回答精度が低いことをご了承ください。

つまりあなたは、プログラミングに特化するようカスタマイズされたChatGPTと考えていいですか?

はい、その通りです。私(Genie)は、プログラミングとコーディングに特化した知識を持つChatGPTであり、開発者の質問や課題に対して最善の回答やアドバイスを提供します。

具体的にどんな質問をすると効果的ですか?

効果的な質問は、具体的で明確な情報を含んでいることが重要です。以下に例を挙げます:

  1. 言語や技術の指定:使用しているプログラム言語やフレームワーク、ライブラリなどを明記してください。
  2. コードスニペット提供:問題のあるコードや解決策を試しているコードを共有してください。
  3. エラーメッセージの共有:遭遇したエラーやバグに関する詳細な情報を提供してください。
  4. 目的の説明:何を達成しようとしているのか、期待される出力や結果を説明してください。

例えば:

  • Pythonで二次元配列を転置する方法は?
  • JavaScriptのPromiseとasync/awaitの使い方は?
  • JavaでFileNotFoundExceptionを解決する方法は?
  • Reactで子コンポーネントから親コンポーネントにデータを渡す方法は?

このような質問をすることで、私(Genie)は効果的かつ正確な回答やサポートを提供することができます。

あなたの使い方について質問しても答えてもらえますか?

はい、もちろんです。私に質問していただければ、可能な限り正確で詳細な回答を提供します。どのような質問でもお気軽にどうぞ。

GenieAIでできること9つ

こちら動画が分かりやすかった
https://www.youtube.com/watch?v=1ekkBNmYqk0

下記、できること9つ詳細

サイドバーで利用する機能

  1. Genie: Start a new chat(チャット機能)
    Web版のChatGPTと同様の機能。チャット欄に質問やお願い(プロンプト)をして回答を得られる。ChatGPTよりいいところは、質問と回答をマークダウンで一括出力できるところ。
    「こういうコード書いて」とお願いした場合、コードと解説が得られる。

  2. Genie: Editor view(コード生成機能)
    プロンプトを流すと、コードとコメントを生成してくれる。チャット機能のように詳しい解説はつかない。あくまでコード生成に特化。コード内容が知りたければ後述する機能で解説を得ることができる。もちろんチャット機能で質問しても良い。

右クリックから利用する機能

下記の機能はデフォルトのプロンプトが設定で用意されており、そのプロンプトにより機能が動く。

  1. Genie: Add Tests(テストを追加する)
    選択したコードに対してのテストケースやテストコードを追加してくれる。
    デフォルトプロンプト:Implement tests for the following code
  2. Genie: Find bugs(バグを見つける)
    選択したコードのバグを見つけてくれる。
    デフォルトプロンプト:Find problems with the following code
  3. Genie: Optimize (最適化する)
    選択したコードを最適化してくれる。コードを単純化したり、不要なメモリアクセスを削減したりなど。
    デフォルトプロンプト:Optimize the following code
  4. Genie: Explain (説明する)
    選択したコードに関して説明をしてくれる。
    デフォルトプロンプト:Explain the following code
  5. Genie: Add Comments (コメントの追加)
    選択したコードに対してコメントを付けてくれる。
    デフォルトプロンプト:Add comments for the following code
  6. Genie: Complete code (コードを完成させる)
    未完成の部分やかけている部分を完成させる。
    デフォルトプロンプト:Complete the following code
  7. Genie: Ad-hoc prompt(アドホックプロンプト)
    選択したコードに対して、自分が設定したプロンプトを利用し回答を得る。
    デフォルトプロンプト:なし

GenieAIの設定

設定の手順

  1. 設定タブを開く
    (windows : ctrl + , )
    (mac : cmd + , )
  2. Genieで検索
  3. GenieAIの各種設定を行う

設定の詳細

基本的には設定画面の英語をDeeplで翻訳するのと、関連するOpenAIのドキュメントリンクが付属しているので、そこが一次情報。

下記に自分が解析したものを書く。

  1. Genieai: Personalized Name(AIの名前)
    チャット時の名前。デフォルトはGenie。好きな名前に変更できる。

  2. Genieai: Enable Conversation History(会話履歴の保存)
    会話履歴(チャット)を保存するかどうか。保存しておくと後で見返せるので便利。
    会話は VSCode Extension global storage とかいうところに保存されるらしい。ストレージのパスは設定の説明参照。

  3. Genieai > Openai: Model(モデル)
    どのGPTを使うかの設定ができる。
    安く済ませたければgpt-3.5、精度上げたければgpt4。的な設定をする。

  4. Genieai > Openai: Temperature(回答の創造性的な何か)
    回答のクリエイティビティを変更させるパラメーターらしい。Top_pというパラメーターとこのパラメータの両方を変更するのは非推奨とのこと。変更するならどちらか。
     
    下記のサイトがかなり分かりやすかった。
    https://qiita.com/suzuki_sh/items/8e449d231bb2f09a510c

  5. Genieai > Openai: Max Tokens(最大トークン)
    生成される回答の最大トークン数。超ざっくり説明すると、MaxTokensが2048だったら、チャットの回答が英語だと約2000単語。日本語含むと約1500文字くらいまでしか回答されない、という上限設定。
    プロンプトのトークンと、出力のトークンが、各GPTモデルの最大トークンを超えるとエラーになるらしい。
    自分が出力したいトークン数がちゃんと入るようにトークン量の設定をする。
     
    それぞれのモデルのマックストークン数は公式サイト参照。
    https://platform.openai.com/docs/models/gpt-4
     
    下記にドキュメントとその解説を書いておく。

    max_tokens
    integer
    Optional
    Defaults to 16
    The maximum number of tokens to generate in the completion.

    The token count of your prompt plus max_tokens cannot exceed the
    model's context length. Example Python code for counting tokens.

    上記の英語はどいう意味ですか?

    これはAIモデルに対する指示や制約についての説明です。具体的には以下の意味となります。

    max_tokens : これはオプションのパラメータで、生成するトークン(テキストの最小単位)の最大数を指定します。デフォルトでは16に設定されています。

    この数値を設定することで、AIが生成するレスポンスの長さを制御できます。例えば、もしmax_tokensを5に設定した場合、AIは5トークン分のテキストしか生成しないようになります。

    しかし、プロンプト(つまり、AIに与えられた入力テキスト)のトークン数とmax_tokensで指定された数の合計は、モデルが一度に理解できるトークン数(これを「コンテキスト長」といいます)を超えることはできません。例えば、あるモデルのコンテキスト長が1000であった場合、プロンプトが500トークンだったら、max_tokensは最大でも500に設定することができます。

    また、最後に「Pythonコードを使ったトークンのカウント方法の例」というフレーズがあるので、おそらくこれはトークン数を計算する方法を示すコード例があることを指しています。

  6. Genieai > Openai: Top_p(確率のゆらぎ的な何か)
    これについては難しいのでChatGPTに教えてもらう。
    以下ドキュメントとその解説。

    top_p
    number
    Optional
    Defaults to 1
    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

    We generally recommend altering this or temperature but not both.

    上記の英語はどういう意味ですか?

    top_pはAIモデルの出力を制御するためのオプションのパラメータです。具体的には以下の意味となります。

    top_p : これは「nucleus sampling」と呼ばれる手法で使われるパラメータで、モデルが生成する各トークンの確率マス(確率分布の一部)を考慮します。デフォルト値は1です。

    たとえば、top_pが0.1と設定されていた場合、AIモデルは上位10%の確率マスを持つトークンだけを考慮してレスポンスを生成します。つまり、それらのトークンが生成される確率が最も高いと考えられます。

    top_pと同様にtemperatureというパラメータも存在し、これらは共にモデルの出力のランダム性を制御します。ただし、一般的にはtop_pとtemperatureの両方を同時に変更することは推奨されていません。どちらか一方を調整して、モデルの出力の多様性とランダム性をコントロールすることが一般的です。

    よくわからないのでもう少し詳しく教えていただけますか?

    もちろんです、より詳しく説明します。

    AIモデルがテキストを生成するとき、それは様々な可能性から選択を行います。たとえば「太陽は」という文が始まったとき、「明るい」、「熱い」、「巨大な」などの単語が続く可能性があります。AIモデルはこれらの各選択肢に対して確率を割り当てます。

    ここでtop_pというパラメータが登場します。これはnucleus samplingというサンプリング手法で使用され、生成されるトークンの選択肢を制限します。たとえばtop_pが0.1の場合、モデルは各トークンが生成される確率を計算し、その確率が上位10%に入るトークンのみを選択の候補として考えます。そのため、出力されるテキストはより確定的になります。

    一方、top_pが1(デフォルト)の場合、全てのトークンが選択の候補となります。したがって、出力されるテキストはより多様になります。

    temperatureというパラメータもテキストの生成に影響を与えます。これは生成される各トークンの確率分布を「鋭く」または「平坦」にすることで、出力の予測可能性と多様性を調整します。temperatureが高いと、全てのトークンがほぼ同等の確率で選択され、出力は多様になります。逆にtemperatureが低いと、高確率のトークンが選択されやすくなり、出力は予測可能になります。

    top_pとtemperatureはどちらも出力の多様性と予測可能性を調整するツールですが、それぞれ異なる方法で働きます。したがって、両方を同時に変更すると結果が予測しにくくなるため、一般的には両方を同時に変更することは推奨されていません。

・・・全部解説するのがめんどくさくなったので、以下各機能の設定はざっくりとまとめる。
以下、Explain機能で解説するが、他の機能も同じ。

  1. Genieai > Prompt Prefix: Explain(定型プロンプト)
    右クリックからExplainコマンドを利用するときの、初期プロンプト。

デフォルトでは

Explain the following code

になっているが、これは「下記のコードを説明してください。」というプロンプトがチャットの最初に付属するということ。ただし現状では英語なので、日本人は日本語で回答が得られるようにプロンプトを変更する必要がある。

Explain the following code in japanese

と英語のまま日本語指定してもいいし

下記のコードを解説してください。

のように日本語でプロンプトを書いてもいい。
トークン量節約のためには英語で書いている方がいいかと思う。
前者は9トークンで後者は22トークン。塵も積もればではある。

また、プロンプトは細かく書くこともできるので、長文にして最適なプロンプトに改良するのがベターだと思われる。
私は下記のようにしている。

Explain the following code in Japanese. Please be as detailed as possible.
  1. Genieai > Prompt Prefix: Explain-enabled(この機能使うかどうか)
    右クリックから説明機能を使うかどうかの設定。使わない機能の場合はチェックボックスをfalseにしておけばよい。

  2. Genieai > Prompt Prefix: Custom Prompt1(カスタムプロンプト)
    最初から用意されているプロンプトとは別で、オリジナルのプロンプトが用意できる。「こういうプロンプトをよく使う」というものがあればここに登録していると簡単に利用することができる。
    ちなみにカスタムプロンプトは1と2の2つ登録が可能。
    「エラーキャッチのコード追加して」とかデフォルトのプロンプトになくて個別で追加したいプロンプトを入れておく。

実践しよう

  • それぞれの機能を使ってみて、使い方を覚えよう。
  • それぞれの機能に対して、プロンプトを最適化しよう。
  • マックストークン数の調整をしよう。
  • 必要であれば、オリジナルのプロンプトを用意して利用してさらに便利にしよう。

20240329追記:429エラー発生対応

Genie AIを利用しようとした場合に、下記のエラーが発生した。

You have run out of credits or hit your maximum monthly spend. Potential reasons for HTTP 429 error:

You exceeded your current quota, please check your plan and billing details
You are sending requests too quickly
The engine is currently overloaded, please try again later.
See https://platform.openai.com/docs/guides/error-codes for more details.

{
  "error": {
  "message": "You exceeded your current quota, please check your plan and billing details.",
  "type": "insufficient_quota",
  "param": null,
  "code": "insufficient_quota"
  }
}

原因と解決策

エラーの原因は、OpenAI側でAPI課金の仕様が変わったからのよう。
ざっくり簡単に言うと、「一定の金額をOpenAI側に担保として先に預けておいて、その担保が存在していることでAPIが利用できる」という仕様になったらしい。

よって冒頭の課金手続きに加えて、さらに先払いの担保の金額の設定が必要になる。
こちらのページから担保のチャージができる。
https://platform.openai.com/account/billing/overview

このページのCredit balanceが$0だとAPIは利用できないため、チャージを行う必要がある。
担保がなくなるたびに毎回手動でチャージすることもできるし、チャージ額がある一定以下になったら自動チャージされる、ということもできる。

解決策まとめ

  1. 上記のやり方でCredit balanceにチャージを行い、金額が表示されるまで待つ。
  2. 再度OpenAIサイトで新しいAPIKeyを発行する
  3. VSCodeのGenieAIの設定でこれまでのAPIKeyを一度削除する
  4. 再度新しいAPIKeyを設定する

この手順でエラーが解消して、APIが利用できるようになる。

Discussion