Skip to content

필사 모드: コードモデルの選び方: 補完と対話、FIM、ライセンス

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

モデル情報は2026-08-12にHugging Faceのページで直接確認しました。モデルカードとライセンスは変わりうるので、使用前に原本を再確認してください。

コードモデルは2つの別の製品です

コードモデルを選ぶ最初の分岐はサイズではなく用途です。エディタでカーソル位置を埋める補完と、質問に説明付きの答えを返す対話型では、求められる能力が違います。

補完は遅延がすべてです。ユーザーがタイピングを止めた合間に結果が出る必要があるため通常は小さいモデルを使い、カーソルの前だけでなく後ろのコードも見る必要があります。対話型は数秒待てる代わりに説明と根拠を求めます。この2つをひとつのモデルで解こうとすると、たいてい両方が中途半端になります。

補完には中間埋めが必要です

エディタ補完が難しいのは、カーソルの後ろにもコードがあるからです。前半だけを見て書き継ぐと、下にすでにある関数と衝突します。そのため前と後ろの両方を与えて真ん中を埋めさせる学習が必要になります。

リポジトリlicenseサイズコンテキストFIMの記載
bigcode/starcoder2-7bbigcode-openrail-m7B16,384、スライディングウィンドウ4,096Fill-in-the-Middleの目標で学習したと明記
google/codegemma-7bgemmaスペック欄に9B params明記なし専用トークンを明記
deepseek-ai/deepseek-coder-6.7b-instructdeepseek6.7B16Kプロジェクト規模の補完と埋め込みのための穴埋め課題を明記
Qwen/Qwen2.5-Coder-1.5Bapache-2.01.54B (埋め込み除く1.31B)32,768適用可能な課題として言及、トークン名は明記なし

google/codegemma-7b のカードは使うトークン名まで書いています。<|fim_prefix|><|fim_suffix|><|fim_middle|><|file_separator|> です。エディタ拡張を自作するならこの形式を正確に合わせる必要があり、モデルごとにトークンが違うので、入れ替えるときはプロンプト組み立てのコードも一緒に変える必要があります。

注意すべきは、対話型の派生に必ずしも中間埋めの記載があるとは限らない点です。Qwen/Qwen2.5-Coder-7B-Instruct のページには中間埋めが明記されていません。補完用に使うなら、同じ系列のベースモデル側を確認する方が正しい進め方です。

ベースモデルに対話をさせないでください

bigcode/starcoder2-7b のカードは、これが指示モデルではなく、平方根を計算する関数を書けといった命令はうまく動かないと直接述べます。Qwen/Qwen2.5-Coder-1.5B のカードも、ベース言語モデルを対話に使うことは推奨しないと述べます。

この文を見落としてベースモデルに質問を投げると、モデルは質問を書き継ぎ始めます。そしてチームはこのモデルが悪いと結論します。実際には用途の違うものを使っただけです。リポジトリ名の末尾にInstructが付いているかをまず確認してください。

bigcode/starcoder2-7b はコンテキストの記載も見る価値があります。16,384と書かれていますが、スライディングウィンドウアテンションの幅が4,096という説明が併記されています。表示された最大長と、実際に一度に参照される範囲が違いうるということです。学習データはThe Stack v2で、17のプログラミング言語と記されています。

対話型のコードモデル

リポジトリlicenseサイズコンテキストカード記載の特徴
Qwen/Qwen2.5-Coder-7B-Instructapache-2.07.61B (埋め込み除く6.53B)既定32,768、YaRNで131,072コード生成・推論・修正の改善、コードエージェント用途に言及
deepseek-ai/deepseek-coder-6.7b-instructdeepseek6.7B16Kコード87パーセントと自然言語13パーセントで2兆トークン学習、命令データ20億トークンで微調整

deepseek-ai/deepseek-coder-6.7b-instruct のカードが示す学習データ構成は珍しく具体的です。英語と中国語の自然言語13パーセントにコード87パーセントという比率は、このモデルがどの言語でコードを説明しやすいかを推し量らせます。カードはこのモデルが商用利用に対応すると述べつつ、詳細はLICENSE-MODEL文書を見るよう案内します。

エージェント型コーディングはさらに別の要求です

モデルが自らファイルを読みコマンドを実行して作業を進めるには、関数呼び出しの形式が必要です。

Qwen/Qwen3-Coder-30B-A3B-Instructapache-2.0 で合計30.5B、活性3.3Bと記され、ツール呼び出し能力とエージェント型コーディングのための専用の関数呼び出し形式に言及します。コンテキストは262,144を既定で支え、Yarnで100万トークンまで拡張できると記します。ただしこのモデルは非思考モードのみに対応し <think></think> ブロックを生成しないとカードが明記します。メモリ不足が起きたらコンテキストを32,768のような短い値に減らすよう案内も添えられています。

MoE構成なので、前の記事で扱った計算がそのまま当てはまります。速度は活性3.3Bに従いますが、重みは30.5B全部がメモリに載る必要があります。

コンテキスト長がコードで特に重要な理由

コードにおけるコンテキストは対話の長さではなく参照範囲です。関数をひとつ直すにはその呼び出し元、型定義、テストファイルが一緒に入る必要があり、この3つはたいてい別のファイルにあります。

そのため deepseek-ai/deepseek-coder-6.7b-instruct の16Kと Qwen/Qwen3-Coder-30B-A3B-Instruct の262,144は、性能の差ではなく扱える作業単位の差です。単一ファイルの修正なら16Kで十分ですし、リポジトリ全体をなめる作業なら最初から別の区分です。

Qwen/Qwen2.5-Coder-7B-Instruct のカードは、vLLMが静的YaRNのみに対応するため倍率が入力長に関係なく固定され、短いテキストの性能に影響しうると警告します。補完のように短い要求が大半のサービスで拡張設定を常時オンにしておくと損をしうるということです。

ライセンスに最も慎重を要する分野

コードモデルの出力はそのまま製品に入ります。そのためライセンス確認が他の分野より一段重要になります。

bigcode/starcoder2-7bbigcode-openrail-m と表記され、ページにはBigCode OpenRAIL-M v1という名称が記されています。この系列は重みを広く公開しつつ特定の用途を制限する条項を併せ持つ形なので、ApacheやMITと同じ条件だと決めつけてはいけません。google/codegemma-7bgemmadeepseek-ai/deepseek-coder-6.7b-instructdeepseek という独自識別子を使いLICENSE-MODEL文書を指します。Qwen系のコードモデルは apache-2.0 と表記されます。

同じカードが示す品質の限界も併せて読むべきです。bigcode/starcoder2-7b は、生成されたコードが意図どおり動く保証はなく、非効率でありうるし、バグや脆弱性を含みうると述べます。この文は、コードレビュー工程を省けるという期待を正面から否定します。

ライセンス全文を自分で読み、商用利用は法務レビューを通してください。この記事はカードの記載を伝えるだけで、法的助言ではありません。

コード例

# 例: 対話型のコードモデルにリファクタリングを依頼します
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "Qwen/Qwen2.5-Coder-7B-Instruct"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, torch_dtype="auto", device_map="auto")

messages = [
    {"role": "system", "content": "You are a careful code reviewer."},
    {"role": "user", "content": "この関数のエラー処理を補強してください。\n\ndef load(p):\n    return open(p).read()"},
]
prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

inputs = tok(prompt, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=512)
print(tok.decode(out[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))

選ぶ順序

  1. 補完か対話型かエージェント型かをまず分けます。
  2. 補完なら中間埋めの記載があるリポジトリだけを残し、トークン形式を確認します。
  3. リポジトリ名にInstructがあるか確認し、ベースモデルを対話に使いません。
  4. ひとつの作業で参照するファイル数を数え、必要なコンテキストを決めます。
  5. licenseフィールドをそのまま記録し、リンク先の全文を開いて使用制限の条項を探します。
  6. カードが示すコード品質の限界を、コードレビュー工程の要件に移します。

自分で試す

シリーズ案内

参考資料

  • 表のすべての値は2026-08-12に該当モデルのHugging Faceページから直接読みました。ページになかった項目は明記なしと書いています。
  • google/codegemma-7b は本文の70億パラメータという説明とスペック欄の9B paramsの表記が食い違います。両方をそのまま伝えています。
  • ライセンス全文を自分で読み、商用利用は法務レビューを通してください。

현재 단락 (1/56)

モデル情報は2026-08-12にHugging Faceのページで直接確認しました。モデルカードとライセンスは変わりうるので、使用前に原本を再確認してください。

작성 글자: 0원문 글자: 5,010작성 단락: 0/56