生成AI・LLM

生成AI・LLMとは

LLM(Large Language Model、大規模言語モデル)は、膨大なテキストを学習して次に来る言葉を予測する能力を極めたAIモデルです。この単純な仕組みから、文章生成・要約・翻訳・プログラミング支援まで幅広い能力が生まれます。ChatGPTやClaudeがその代表です。

「次の言葉の予測」から何が生まれるか

学習はおおまかに2段階です。まず大量の文章で「次の語を当てる」練習を繰り返し、文法や言い回し、世の中の知識のパターンを身につけます(事前学習)。そのままでは続きを書くだけの装置なので、次に「質問には答える」「危険な依頼は断る」振る舞いを仕込みます(事後学習)。ここでは人間の評価を報酬に使う手法があり、[[強化学習]] の考え方が登場します。

この成り立ちから、得意・不得意はほぼ説明がつきます。

  • 文章の形を変える作業に強い — 要約・言い換え・翻訳・書式変換は、学習した言い回しのパターンがそのまま効く
  • 知らないことも文にしてしまう — 「もっともらしい続き」を選ぶだけなので、空欄を自然な言葉で埋めることを優先する。事実かどうかは判定していない([[ハルシネーション]])
  • 知識は学習した時点で止まる — 昨日更新された社内資料も今朝のニュースも入っていない。必要なら入力として渡すしかない([[RAG(検索拡張生成)]])
  • 計算や集計は不得意 — 数字も「それらしい並び」として生成される。合計金額の算出のように正確さが要る処理はプログラム側で行う

初学者向けポイント

  • LLMは「知識データベース」ではなくパターンの学習器。もっともらしい誤り(ハルシネーション)を出すことがあり、事実確認は人間の仕事
  • トークン = LLMが扱う文字列の単位。入出力の長さやAPI料金はトークン数で決まる
  • プロンプト = LLMへの指示文。具体的な指示・例示・役割設定で出力の質が大きく変わる
  • 推論パラメータ = 出力のランダムさを決める設定。同じ質問でも回答が毎回変わる理由は [[推論パラメータと出力のばらつき]] で扱う

つまずきやすいところ

  • 同じ質問に毎回同じ答えを期待する — 出力は確率分布からの抽選なので文面は毎回変わる。「返り値が期待値と完全一致するか」で判定する自動テストは、正しく動いていても落ち続ける([[LLMアプリの評価とテスト]])
  • 長い資料をまるごと貼れば読んでくれると思う — 一度に渡せる量には上限がある([[コンテキストウィンドウ]])。料金も上限も文字数ではなく [[トークンとトークナイザ]] の単位で数える
  • 自信ありげな断定をそのまま採用する — 存在しないライブラリ関数やURLを、実在するものと同じ調子で出してくる。文面から怪しさは判別できないので、出典を示させる・実際に動かすといった検証を挟む
  • 社内の非公開情報を何も考えずに貼る — 送信先が入力を学習に使うのか、契約上どこまで許されるのかを先に確認する([[AI倫理と責任あるAI]])

開発者としての関わり方

関わり方内容
API利用[[REST API]] 経由でLLMを呼び出しアプリに組み込む(入出力は [[JSON]])
RAG手元の文書を検索してLLMに渡し、根拠のある回答を作る構成([[RAG(検索拡張生成)]] 参照)
コーディング支援エディタ統合やCLIエージェントによる開発の加速
ローカル実行オープンモデルを自前マシンや [[クラウドコンピューティング]] 上で動かす

使いこなしのコツ

  • 「何をしてほしいか」だけでなく「何を出力してほしいか(形式・長さ・条件)」まで指定する
  • 生成物は必ずレビューする。特にセキュリティに関わるコードは人間の検証が必須
  • 外部の文書やWebページを読み込ませるときは、そこに書かれた文章を指示と解釈して実行してしまう [[プロンプトインジェクション]] に注意する

この先を読み進める地図

LLMの周りには記事がたくさん並んでいます。全部を順に読む必要はありません。いまどの段階にいるかで選んでください。

  • 仕組みを知る — 中身が気になったらここから。土台の構造が [[Transformer]]、入力単位が [[トークンとトークナイザ]]、扱える量の上限が [[コンテキストウィンドウ]] です。さらに下の層は [[ディープラーニング]]、LLM以前の流れは [[自然言語処理]] にあります
  • 出力を安定させる — 「答えの質がばらつく」段階の悩みはここ。指示の書き方は [[プロンプトエンジニアリング]]、ばらつきの制御は [[推論パラメータと出力のばらつき]]、誤りの対策は [[ハルシネーション]]、壊れていない確認は [[LLMアプリの評価とテスト]] です
  • 自分たちのデータとつなぐ — 社内文書に基づいて答えさせたくなったら。定番構成が [[RAG(検索拡張生成)]]、検索を支えるのが [[埋め込みとベクトル検索]] と [[ベクトルデータベース]]、モデル自体に覚えさせる別路線が [[ファインチューニング]] です
  • 外のツールを操作させる — 文章を作るだけでなく処理を実行させたいとき。関数呼び出しを指示させる [[Function Calling]] が基礎、その接続方式を標準化したのが [[MCP(Model Context Protocol)]]、両者を土台に自律的に動くのが [[AIエージェント]] です。受け取った引数の形の検証には [[JSON Schema]] を使います
  • 文字以外を扱う — 画像や音声も入出力にしたいとき。全体像は [[マルチモーダルAI]]、個別には [[画像生成AI]] と [[音声認識と音声合成]] です
  • 安全に業務へ載せる — 実サービスに載せる前に読むもの。外部文書に紛れた指示に乗ってしまう [[プロンプトインジェクション]]、バイアスや著作権を扱う [[AI倫理と責任あるAI]]、開発現場での落とし穴は [[AIコーディング支援]] です
  • 動かす基盤を選ぶ — 自前で学習させずAPIで使うのが普通の出発点です。複数社のモデルを呼べる [[Amazon Bedrock]] のようなマネージドサービスがあり、その下の計算資源は [[クラウドコンピューティング]] が扱います

関連技術とのつながり

  • [[機械学習の基礎]] — LLMの土台。学習と推論・過学習などの基本概念
  • [[プロンプトエンジニアリング]] — LLMから望む出力を引き出す指示の設計
  • [[RAG(検索拡張生成)]] — 手元の文書を検索してLLMに渡す定番構成
  • [[AIエージェント]] — LLMにツールを持たせて自律的に動かす仕組み
  • [[REST API]] — LLMをアプリから使う窓口
  • [[JSON]] — APIとの入出力形式
  • [[クラウドコンピューティング]] — 学習・推論の実行基盤。GPU を積んだマシンを時間単位で借りられるため、自前で設備を抱えずに大きなモデルを動かせる
  • [[プロンプトインジェクション]] — LLM 固有の攻撃面。入力に紛れた指示をどう扱うかの設計
Q: LLMが事実と異なる内容をもっともらしく書いてしまう根本的な理由はどれ?
- [x] 「もっともらしい続き」を選ぶ仕組みで、事実かどうかを判定していないため
- [ ] 学習データを持たず、毎回インターネットを検索しているため
- [ ] 入力された文章をそのまま複製して返す仕組みのため
解説: LLMは次に来る言葉の予測器なので、知らないことも自然な言葉で埋めます。事実確認は利用する人間の仕事として残ります。

Q: 同じプロンプトを2回投げても文面が変わることの説明として正しいのはどれ?
- [ ] 通信エラーで応答の一部が欠落するため
- [x] 出力が確率分布からの抽選で決まるため、完全一致を前提にした自動テストは成立しない
- [ ] 質問の文字数がAPI側で毎回変換されるため
解説: 出力は抽選で決まるので文面は毎回揺れます。文字列の完全一致で検証しようとすると、正しく動いていてもテストが落ち続けます。

Q: 昨日更新された社内資料の内容をLLMに答えさせたいとき、記事が定番として挙げている構成はどれ?
- [ ] モデルの学習時点を遅らせる設定に変更する
- [x] 文書を検索してLLMへ渡すRAG(検索拡張生成)を使う
- [ ] Function Callingで資料の文章を生成させる
解説: LLMの知識は学習した時点で止まっているため、新しい情報は入力として渡します。手元の文書を検索して渡す構成がRAGです。