LLMの仕組みとツールの工夫を学んでみる
はじめに
近年、Claude Code や Cursor といった生成 AI ツールが開発現場に浸透し、私たちのコーディングスタイルを根底から変えつつあります。しかし、同じ目的でプロンプトを入力しても、ツールによって全く異なるコードが提案されることに、驚きや戸惑いを覚えた経験はないでしょうか。
「なぜ、これほどまでに違いが生まれるのか。」
この疑問の答えは、AI の頭脳である LLM(大規模言語モデル)そのものの違いと、それを活用する AI ツール側の工夫にあります。本記事では、まず LLM の基礎的な仕組みを解説し、その上で AI ツールごとに出力が異なる技術的な背景を分かりやすく説明します。
本記事が、AI ツールの特性を理解し、その能力を最大限に引き出すための一助となれば幸いです。
LLM を動かすエンジン:Transformer の仕組み
現在主流の LLM のほとんどは、2017 年に Google が発表した論文「Attention Is All You Need」で提唱された、Transformerというアーキテクチャに基づいています。このモデルの登場が、今日の生成 AI 革命の引き金となりました。Transformer がどのようにテキストを理解し、次の単語を予測するのか、その主要な要素を見ていきましょう。
1. トークン化:言葉を AI の理解できる単位へ
LLM は、私たちが使う言葉をそのまま理解するわけではありません。「トークン」という最小単位に分割して処理します。このトークン化はTokenizerという専用のモジュールが担当し、この処理方式がモデルによって異なることが、出力の差を生む最初の要因となります。
例えば、「TypeScript」という単語を考えてみましょう。
- ある Tokenizer では
["TypeScript"]→ 1 トークン - 別の Tokenizer では
["Type", "Script"]→ 2 トークン
Tokenizer は学習データに基づいて最適化されており、コードに特化した Tokenizer はプログラミング用語を 1 つのトークンとして扱う傾向があります。このように、同じ単語でも分割のされ方が異なると、モデルが持つ単語のニュアンスや文脈の捉え方に違いが生まれるのです。
2. エンベディング:トークンを意味を持つベクトルへ
トークン化された各単位は、次に「エンベディング(埋め込み)」というプロセスを経て、高次元の数値ベクトルに変換されます。このベクトルは、トークンが持つ意味的な位置を表現しています。意味が近い単語は、ベクトル空間上で近くに配置されます。
["プログラミング", "は"] → [ [0.8, 0.2, ...], [0.5, 0.9, ...] ]
3. Positional Encoding:単語の"住所"を教える
Transformer アーキテクチャの特徴は、単語の語順をそのままでは理解できない点にあります。文章において語順は意味を決定づける重要な要素です。「猫が魚を食べた」と「魚が猫を食べた」では大違いです。
そこで、Positional Encoding という技術が使われます。これは、各トークンの位置情報を示す固有のベクトルをエンベディングベクトルに加算する手法です。これにより、モデルは各単語が文中のどの位置にあるのかを把握し、語順を考慮した文脈理解が可能になります。
4. アテンション機構:文脈の"つながり"を見抜く力
Transformer の核心技術は アテンション(Attention)機構 であり、その中核をなすのが 自己注意(Self-Attention) です。これは、文章中のある単語が、他のすべての単語とどれほど強く関連しているかを数値化(スコアリング)する仕組みです。
例えば、「関数を定義するそれは、まず名前を決めることから始まる」という文があったとします。この場合、アテンション機構は「それ」という代名詞が「関数を定義すること」を強く関連付けます。
このアテンションを複数同時に行うMulti-Head Attentionにより、モデルは「文法的なつながり」や「意味的なつながり」など、多様な観点から文脈を複眼的に捉えることができるのです。
これらのプロセスを経て、LLM は入力されたテキストの深い文脈を理解します。そして次に来る確率が最も高いトークンを予測し、自然な文章や精度の高いコードを生成するのです。
出力差を生む 2 大要素:「LLM そのもの」と「ツールの工夫」
LLM の基本的な仕組みが分かったところで、いよいよ本題に入ります。なぜ異なる AI ツールでは、同じ指示でも出力が違うのでしょうか。この理由は、大きく「LLM(ベースモデル)そのものの違い」と「ツール側の工夫」という 2 つの階層で説明できます。
第 1 部:すべての土台となる「ベースモデル(LLM)」の違い
出力の最も根本的な差は、各サービスが採用する LLM、すなわち AI の「脳」そのものに起因します。
モデルのアーキテクチャと学習データ 異なる LLM(ベースモデル)を使用することが、出力の差を生む最大の要因です。
- GPT シリーズ(OpenAI):GitHub Copilot で長く使われてきた Codex モデルや、現在広く使われている GPT-4o など。Codex は特に GitHub 上の膨大な公開リポジトリを学習データとしており、コード生成に極めて特化している。
- Claude シリーズ(Anthropic):Claude 3.5 Sonnet や Claude 4 など、長いコンテキストの理解と詳細な説明を得意とする。ヘルプフルネス(有用性)と無害性のバランスを重視した学習が行われている。
同じ Transformer ベースでも、アーキテクチャの詳細、学習データの種類と比率、学習期間(知識のカットオフ日)が異なります。これらの違いが、モデルの得意・不得意や応答スタイルの癖を決定づけます。
GitHub 中心のデータで学んだモデルはオープンソースの作法に強く、書籍や論文を多く含むデータで学んだモデルは理論的な説明に長けている、といった傾向が生まれるのです。
第 2 部:ツールの腕の見せどころ - LLM の性能を引き出す「付加価値」
現在、多くの AI ツールが複数の LLM を選択できるようになってきました。GitHub Copilot でも 2024 年から GPT-4、Claude 3.5 Sonnet、Gemini Pro など複数のモデルから選択可能になっています。そのため、同じ LLM を使ったとしても、ツール側の「使い方」次第で、最終的な出力の質は大きく変わります。これがツールの付加価値であり、差別化ポイントとなっています。
1. サービスの味付け - プロンプトとコンテキスト戦略
ユーザーが入力したプロンプトは、そのまま LLM に送られているわけではありません。各サービスは LLM が性能を最大限発揮できるよう、内部でプロンプトを加工・拡張しています。これをプロンプトエンジニアリングと呼びます。
例えば、Cursor はユーザーの指示を次のように拡張していると考えられます。
You are an expert programmer specializing in {language}.
Your task is to {user_request}.
Here is the relevant context from the user's codebase:
# File: {filename}
# Current code:
{code_context}
# Recently viewed files:
{recent_files_context}
# Git history:
{git_diff}
Please provide the best possible solution.
このように、ファイルの内容や最近開いたファイル、Git の差分など、豊富なコンテキストを自動で付与します。これにより、LLM はより的確な判断を下せるようになるのです。この"お膳立て"の上手さが、サービスの質の差となって現れます。
RAG(Retrieval-Augmented Generation) さらに高度な手法として、RAGがあります。これは、ユーザーの要求に関連する情報をプロジェクト全体や連携ドキュメントから検索し、その内容をプロンプトに補強して LLM に渡す技術です。
Cursor のような高機能なエディターは、この RAG の仕組みを駆使しています。その結果、プロジェクト全体を見渡したような広範な文脈理解を実現しているのです。
2. 人間の好みの反映 - RLHF とアライメント
LLM は、人間のフィードバックを元に応答を改善する RLHF(Reinforcement Learning from Human Feedback) というプロセスを経ます。これにより、より「人間好み」の応答をするように調整されます。
この過程で、モデル開発元がどのような価値観(安全性、正確性、創造性など)を重視するかが、モデルの「性格」を決定づけます。
AI ツールのサービス提供者は、自社の製品方針に合ったアライメントを持つモデルを選択したり、ユーザーに選択肢を提供したりします。
例えば、OpenAI 社の GPT シリーズと Anthropic 社の Claude シリーズでは、応答のスタイルに違いがあります。GPT シリーズは比較的積極的で簡潔な提案を、Claude シリーズはより慎重で詳細な説明を含む回答を返す傾向があります。このモデル固有の特性が、同じツール内でもモデルを切り替えた際に体感の差が生まれる理由です。
3. 生成の多様性 - サンプリング手法とパラメータ制御
LLM が次に来る単語を予測する際、最も確率の高いものを常に選ぶわけではありません。出力に多様性を持たせるため、いくつかのサンプリング手法が用いられます。
- Temperature:値が低い(例: 0.1)と最も確率の高い予測に近くなり、決定的で一貫した出力になる。値が高い(例: 0.8)と、より確率の低い単語も選ばれやすくなり、創造的で多様な出力が生まれる。
- Top-p / Top-K サンプリング:予測確率の上位 p%や上位 K 個の中からランダムに選ぶ手法。これにより、全く見当違いな単語が選ばれるのを防ぎつつ、多様性を確保する。
AI ツールは、タスクに応じてこれらの設定を使い分けていると考えられます。例えばコード補完では低めの Temperature で正確性を重視し、チャットでのブレインストーミングでは高めの Temperature で創造性を重視する、といった具合です。このパラメータ調整が、ツールの個性を形成する一因となっています。
まとめ
生成 AI ツールの出力がそれぞれ異なるのは、偶然や気まぐれではありません。それは、各サービスが採用する技術的な選択の積み重ねが生んだ、必然的な"個性"なのです。
その違いは、大きく 2 つの階層に分けて理解できます。
-
LLM という「素材」の違い
- どの LLM を使い、どの Tokenizer で処理し、何を学習したかが性能の土台を決める。
-
ツールという「調理法」の違い
- プロンプトをどう拡張し、どんなコンテキストを与え、どのようにパラメータを制御するかが最終的な体験の質を決める。
現在は多くのツールで同じ LLM が選択できるようになったため、ツール側の「調理法」の巧拙がより重要になってきています。卓越したコーディング体験は、強力な LLM(素材)と、それを最大限に使いこなす賢い AI ツール(調理法)との、見事な掛け算によって生まれます。
LLM の仕組みとこれらの関係性を理解することは、魔法の杖をただ振るうのではなく、その杖の材質や芯の特性を知り、最適な呪文を唱えることに似ています。
今後も LLM と AI コーディングツールは急速に進化を続けるでしょう。しかし、その根底にある基本原理を理解していれば、新しいツールが登場してもその本質を見抜き、効果的に活用していくことができるはずです。この記事が、皆さんの AI との協働を新たなレベルに引き上げる一助となれば幸いです。
Discussion