1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

:muscle_tone5: 始めてのBYOK

VS Code の GitHub Copilot Chat(以下、Copilot)では、BYOK(Bring Your Own Key)機能 を使って、ローカル LLM や GitHub 以外のプロバイダーが提供する LLM を利用できます。Cline などの拡張機能 を使わずに、標準機能だけでこの仕組みを使えるのが大きなメリットです。GitHub Copilot Free アカウントを使い始めたばかりだったのですが、自動モデル選択しかない状態だったため、「さくらのAI」を BYOK で試してみることにしました。

まず結論から言うと、下図のようにさくらのモデルを登録して利用できるようになりました。

Model_Selection.jpg

📖VSCode公式:Customize the model picker

  • 登録手順は公式ドキュメントに沿って進めれば、初心者でも迷うことは少なかったです。
  • Bring your own language model key (BYOK) の公式手順に従います。詳細が書かれているので、以下では重要なポイントだけをまとめます。
  1. Add Models から Custom Endpoint を選択します。
  2. モデルのグループ名を入力します。「例: SAKURA」。後から修正可能です。
  3. API Key には、さくらの AI Engine のアカウントトークンをそのまま入力します。
  4. API タイプとして Chat Completions を選択します。
  5. VS Code がファイルを開いてモデルの詳細設定ができます。chatLanguageModels.json です。
  6. この JSON は、いつでも言語モデルの歯車メニューから「言語モデルで開く(JSON)」を選ぶことで修正可能です。ファイルを閉じても慌てる必要はありません。

Language_model.jpg

✍️最初に設定した"gpt-oss-120b"の例

  • 初回に開かれたファイルには、アクセストークン ID が PC に保存された 別のシークレット値 に置き換わっているので、再度 apiKey を入力し直す必要はありませんでした。
[
	{
		"name": "Sakura",
		"vendor": "customendpoint",
		"apiKey": "${input:chat.lm.secret.<内部に保存されたトークンIDを示す値>}",
		"apiType": "chat-completions",
		"models": [
			{
				"id": "gpt-oss-120b",
				"name": "gpt-oss-120b",
				"url": "https://api.ai.sakura.ad.jp/v1/chat/completions",
				"toolCalling": true,
				"vision": false,

                "thinking": true,
                "supportsReasoningEffort": [
                "low",
                "medium",
                "high"
                ],
				"reasoningEffortFormat": "chat-completions",
				"streaming": true
                }
			}
		]
	}
]

他にも設定可能なパラメータはあるが、デフォルトで試して調整した方がいいとAIに言われたので"temperature"などの設定無。

💡"gpt-oss-120b"のポイント

  • 検索すると、"gpt-oss-120b" の登録例は多く見つかりますが、GPT 系では思考量を [LOW, Medium, High] で設定できるものの、VS Code の JSON で設定している例をあまり見かけませんでした。上記のように設定すると、VS Code の Chat 画面に、下図のように思考量を選べるメニューが表示されます。
    ReasoningEffort.jpg

👉思考量の設定が効くのか試す

  1. 簡単な質問をしてみました。

    Q: 「国際連合加盟国は何か国ですか?」

    A: どの思考量でも「193か国」で同じ結果で、差はありませんでした。
       

  2. 誤字や誤用のある曖昧な質問に対応できるかを試してみました。

    Q: 「国債連合の数はいくつですか?」
    元の漢字の「際→債」にし、「国の数→数」として、誤った文字おこし風の表現にしてみました。

    A: 答えの概略は、以下のように異なる結果になりました。

    思考量 答えの概要(毎回キャッシュなどを完全にクリアしてから Agent モードで質問)
    LOW 現在のワークスペースからは「国債連合」に関する記述は見つかりませんでした。(他の思考量と違い、Web 検索動作はしていないように見えます)
    Medium 「国債連合」は8つです。(8つとは、追加質問で普通国債、割引国債、建設国債などを政府関連債として示したもの)
    High 「国傑連合」はありません。193か国の国際連合の可能性があります。(国傑は人名や歴史用語にある)
  • 思考量の違いは、誤字や誤用のある文章では明確に表れました。完全一致、部分一致、発音の違いなど、解釈の想定が変わると、思考のアプローチも変わるのかもしれません。
  • デフォルト値は Medium です。無指定で使っていると、"gpt-oss-120b" は性能が悪いと感じてしまう人もいるのではないかと思います。

📈 さくらのAIで利用できる無料エンジンの性能は?

Grok の回答では、次のような比較結果になっています。
(注:他のAIサービスでは値を埋められなかったので参考値と考えた方がいい)

Model/ベンチマーク GPQA Diamond SWE-bench Verified LiveCodeBench
Kimi K2.7 Code 89.6% 78.2% 82.0%
Qwen3.5-35B-A3B 84.2% 69.2% 74.6%
gpt-oss-120b(High) 80.1% 62.4% 87.8%
gpt-oss-120b(Medium) 73.1% 52.6% ~80%前後
gpt-oss-120b(low) 67.1% 47.9% 70.7%

古いエンジンである gpt-oss-120b でも、デフォルトから High に変更すれば十分に使える水準です。にもかかわらず、設定例を確認する際に思考量を省略してしまうケースが多いのは、かなりもったいないと感じました!

🚀さくらのAI、無料エンジンでVibeコーディング

VS Code の GitHub Copilot Chat の無料枠では Agent モードを思うように回せなかったので、さくらのAI(BYOK)で上記の高機能 AI 3 つを使って、簡単な Vibe コーディングを試してみることにしました。

題材は、あきらめずに続けられるように、GitHub 上で公開されている CLI の改善案を考えることです。

この GitHub に公開されているアプリは、構文に基づいてファイルを比較する CLI の diff ツールです。文法上同一であれば、スペースやコメント、改行などの差分を拾わず、本当に意味のある言語レベルの差分だけを提示してくれます。

実用上の課題は、ハードウェア記述言語である SystemVerilog に対して、あまり正しく動作しないことです。Issue に上がっていても、マイナー言語のためか、なかなか対応されていません。

Soft開発のことはよくわかりませんが、Issue を見るとパーサーを入れ替えればいいだけのように見えたので、AI に改造してもらおうと考えました。

準備

  1. difftastic プロジェクトをローカルにコピーする
  2. サブディレクトリに置き換え対象の tree-sitter-systemverilog プロジェクトをコピーする
  3. 上手く動作しない実際の SystemVerilog コードを用意する
    • DFT_PARSE_ERROR_LIMIT=0 で parse error が 460 件出るコードです
    • なお、AI サービス側では、実際には文法的に完全に準拠していることを確認済みです

実行

  1. Readme.md に、リポジトリにはベースプロジェクトと置き換え対象のサブディレクトリがあるフォルダ構造であること、そして課題として AI に解決してほしい Issue の内容を記述します。
  2. 初回なので、プラン作成までを一度出すように指示し、確認後に継続する旨を最後に記述します。
  3. ソフトウェア初心者なのでプログラムをいじるような余計なことはせず、Chat プロンプトに Readme.md の内容を基に、プログラム修正を依頼する形でスタートしました。

経過 1

  1. gpt-oss-120b (High) でプラン作成を行いました。詳細な作業内容は省略しますが、最後にタイムラインが提示されました。

    • タイムライン(合計 18 日)
    作業
    1‑2 1. 現状把握、2. 上流パーサー最新化
    3‑4 3. ハイライト・設定調整、4. 必要ならカスタムパーサー拡張
    5‑6 5. CI/テスト自動化
    7 6. ドキュメント・リリース、最終リグレッションテスト
  2. 人間が作業する前提なのかどうかは不明ですが、作業プランの詳細を順番にプロンプトに投げればよいと考え、継続しました。期待は数時間で完了する事でした。

  3. VS Code を自動承認にしていないので、時々コマンド実行の許可を求められました。

  4. 変更されたとされるファイル名を探したが、見つからないものがありました。ファイルを削除して新しいファイルを生成しているようで、実際の出力が失敗することが何度かありました。消失を指摘したあとには、ファイル修正案を表示し、ユーザーがその通りに差分を入れ替えるような手順が増えていきました。

  5. Agent と言いがたいので、エンジンを Qwen3.5-35B-A3B に切り替えて継続しました。自動でファイルの追加や変更を続ける動作が続きましたが、時々「思考ループ」と呼べる状態に陥り、思考途中のやり取りの内容が繰り返し同じものになり、一向に進まないことがありました。強制中断し、継続依頼をプロンプトに入れることが何度も発生しました。

  6. エンジンを Kimi K2.7 Code に切り替えて継続しました。しかし、思考経過の表示でファイルの読み取りが異常に遅かったり、早く進んでいるように見えても途中で、以下のエラーで止まってしまう現象がほとんどありました。

    {"message":"rate limit exceeded"}: ChatRateLimited: Rate limit exceeded
    

    上記を含む、FULL エラー内容を AI サービスに投げたところ、以下のような原因が推測されました。

    外部プロバイダーのレート制限は「トークン量」「リクエスト数」「同時接続数」など複合的。
    多くの BYOK モデルは制限を持ちます。あなたのケースでは、特に トークン量の上限 または 
    同時ストリーム数の上限 に当たった可能性が高いです。 
    

    (ユーザー側の問題ではない可能性が高いという内容でした。)
      

  7. 結局、接続の安定性を重視して gpt-oss-120b (High) を再度使うことにしました。Agent なのに、指示通りにパッチを適用するような命令が多く続きました。また、テストにはハイライト検証のパターンがなかったため、AI エンジンは SystemVerilog ハイライト定義を削除してもテストを PASS してしまう判断を繰り返し、定義ファイルを空白にする変更が何度も行われました。最終的には、Verilog ハイライトを代用する案を提示し、簡易的なプログラムを完成させる方針に切り替えました。テスト PASS 完了ステージまで 12 時間を費やしました。無料回数の実行も 3/5 分を超えていました。
    (他にも Hare / Janet / Kotlin / LaTeX / Smali はスタブ化しているため、構文ベース diff が機能しないという妥協がありました。)

経過 2

  1. 数日後、簡易的にはテストが PASS しているものの、SystemVerilog ハイライトになっていない点が気になりました。無料回数はまだ 2/5 程度残っていたので、「改善継続」を試すことにしました。
  2. エンジンを Kimi K2.7 Code に切り替え、現状のプログラムの問題点を分析するよう依頼しました。数回してすぐに止まったものの、Try Again ボタンを押し続けているうちに、たまたま一度最後まで解析が進み、これまで見えていなかった問題点などを詳しくレポートしてくれました。
  3. gpt-oss-120b (High) は、テスト PASS 条件が完全でないと既存機能を無視したり削除したりするので、これ以上ハイライト問題の完全解決に期待できません。Qwen3.5-35B-A3B の思考ループをなんとか軽減できないかと Google 検索していたところ、Qwen 系に次の対策があることを知りました。
    • 原因: presence_penalty が 0.0(無効)だと、直前に使った単語や推論のフレーズに対する抑制が働かず、同じ思考プロセスを堂々巡りしやすくなります。0〜2 の間で調整が必要です。
    • パラメータ調整: 思考(Reasoning)モードでは presence_penalty = 1.5 のように設定することで、繰り返しを抑制し、ループを防ぐ効果が高いと言われています。
    • ただし、Qwen系 は 0 より大きい方がよいとされている一方で、Qwen3.5-35B-A3B では 0 にしてみろと書かれた記事もありました。そのため、0 を設定することにしました。
      "presence_penalty": 0
      
    • デフォルトは 0 だと思われますが、あえて設定したところ、今回は思考ループに、はまらずにテスト PASS まで Agent が実行し、ハイライトとパース言語の内容を一致させたバージョンを完成させることができました。

結果

  1. スタブ化している他言語はまだ妥協していますが、利用しない言語なので、これで目標は達成したと考えています。
  2. ここまでで 2593 回 のリクエストを実行しました。

結論

  1. 「さくらのAI」で初めての BYOK(GitHub Copilot Chat)利用ができました。
  2. 素人の Vibe コーディングのため、無料リクエスト 3000 回の大部分を使うことになりました。しかし大手 AI サービスの無料枠では、この回数はとても無理だったと思います。
  3. AI コーディングツールのパラメータや LLM ごとのパラメータを最適化する必要があり、最適化できれば今回の作業も 1/10 程度でできる感覚です。使い方次第では、AI 利用の低コスト実現プランとしてかなり有効だと感じました。
  4. 一方で、パラメータ設定に関する情報は簡易的なものが多く、自分に合う情報を見つけるのに時間がかかるのが直近の課題です。また、同程度のLLMサイズで高性能なモデルが次々と発表されているので、サービス利用可能なモデルの更新にも期待しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?