【新人エンジニア必見】LLMの“うっかりミス”をなくす思考の鎖、「Chain of Thought」入門

こんにちは。ゆうせいです。

「AIが書いたコード、なんだか動きがおかしい…」「この文章、ちょっと意味が通じないな」。大規模言語モデル(LLM)を使っていて、そんな風に感じたことはありませんか?LLMは非常に優秀ですが、時として人間では考えられないような、奇妙な間違いをすることがあります。

新人エンジニアのあなたも、これからLLMと協力して仕事を進める機会がどんどん増えていくはずです。そんなとき、LLMの間違いをただ修正するだけでなく、なぜ間違えたのかを理解し、正しく導くことができれば、あなたの生産性は劇的に向上するでしょう。

今回は、LLMのポテンシャルを最大限に引き出し、その間違いを正すための強力なテクニック、「Chain of Thought(CoT)」について、一緒に学んでいきましょう!

Chain of Thoughtって、そもそも何?

Chain of Thought、日本語に訳すと「思考の連鎖」となります。なんだか難しそうに聞こえますか?

大丈夫、まったく難しい話ではありません。一言で言えば、これは「LLMに、答えを出すまでの“考え方”や“手順”を声に出して説明させる」ようなものです。

例えば、算数の問題を解くときを想像してみてください。

「リンゴが5個あります。そこから2個食べました。残りは何個でしょう?」

この問いに、いきなり「3個」と答えるのではなく、

  1. 最初にリンゴが5個あった。
  2. そこから2個食べたということは、引き算をする。
  3. 計算式は 5 - 2 になる。
  4. だから、答えは3個だ。

というように、結論に至るまでのステップを一つひとつ言葉にしていく。これがChain of Thoughtの基本的な考え方です。

人間にとっては当たり前のプロセスですよね?でも、LLMにこれをさせることで、驚くほど精度が向上し、間違いが減ることがわかっています。

なぜCoTで間違いが減るの?

では、なぜ思考のステップを書き出させると、LLMは賢くなるのでしょうか?

主な理由は2つあります。

一つは、複雑な問題を小さなステップに分解できるからです。いきなり大きな課題に取り組むと、どこから手をつけていいか分からなくなったり、途中で大事なことを見落としたりしますよね。これはLLMも同じです。問題を細かく分けて一つずつ処理させることで、LLMは思考の迷子になりにくくなります。

もう一つは、私たち人間がその思考プロセスを検証しやすくなるからです。LLMが最終的な答えだけを出してきた場合、それが間違っていても、どこでどう間違えたのかを知ることは困難です。しかし、思考の過程が示されていれば、「あ、この計算の前提が間違っているな」「この解釈がおかしいぞ」というように、間違いの根本原因を特定し、的確に修正を指示することができます。

実践!LLMの間違いをCoTで正す方法

それでは、具体的にどうやってCoTを使ってLLMの間違いを正していくのか、見ていきましょう。

例えば、あなたが書いたPythonのコードがうまく動かず、LLMにデバッグをお願いしたとします。

Python

def calculate_average(numbers):
  total = sum(numbers)
  return total / len(numbers)

my_list = [1, 2, 3, '4', 5]
result = calculate_average(my_list)
print(result)

このコードを実行すると、数値と文字列を足し合わせようとしてエラーが出てしまいます。このコードをLLMに渡して「このコードの間違いを直して」と単純に指示したとしましょう。

もしかしたら、LLMは正しい修正案を提示してくれるかもしれません。しかし、なぜか見当違いな回答をしてくることもあります。

そんなときこそ、Chain of Thoughtの出番です!次のように指示をしてみてください。

「以下のPythonコードのエラーを修正したいです。Chain of Thoughtの手法を使って、以下のステップで考えて、最終的なコードを提案してください。

  1. コードが何をするためのものか、目的を説明してください。
  2. コードを実行すると、どのようなエラーが発生するか予測してください。
  3. そのエラーが発生する根本的な原因を特定してください。
  4. 原因を解決するための修正方針を立ててください。
  5. 修正方針に基づいて、最終的なコードを書いてください。」

このように、思考のステップを明確に指示することで、LLMは以下のように順を追って考えてくれるようになります。

  1. 目的の理解: このコードは、リストに含まれる数値の平均を計算するためのものです。
  2. エラーの予測: my_list には '4' という文字列が含まれているため、sum() 関数で数値を足し合わせる際に TypeError が発生します。
  3. 原因の特定: 原因は、数値のリストに文字列が混入していることです。Pythonでは数値と文字列を直接足し算することはできません。
  4. 修正方針: リスト内のすべての要素を数値に変換してから計算処理を行う必要があります。
  5. 修正コードの提案:

Python

def calculate_average(numbers):
  # リスト内の各要素を数値に変換する
  numeric_numbers = [int(n) for n in numbers]
  total = sum(numeric_numbers)
  return total / len(numeric_numbers)

my_list = [1, 2, 3, '4', 5]
result = calculate_average(my_list)
print(result)

どうでしょうか?ただ「直して」と指示するよりも、はるかにLLMの思考が整理され、的確な答えにたどり着きやすくなるのが分かりますよね。そして、私たちもLLMが何を考えているのか手に取るようにわかるようになります。

これが、Chain of Thoughtの力なのです。

CoTを使いこなすためのヒント

CoTは非常に強力なテクニックですが、さらにうまく活用するためのコツをいくつか紹介します。

メリット

  • 複雑な問題に強い: 複数のステップや条件が絡み合う複雑な問題ほど、CoTの効果は大きくなります。
  • 間違いの発見が容易: 思考の過程が可視化されるため、どこで論理が破綻したのかを一目で確認できます。
  • LLMの教育にもなる: 正しい思考プロセスを何度も示すことで、LLMがより良い回答を生成するための学習データにもなり得ます。

デメリット

  • 指示が長くなる: ステップを細かく指示するため、プロンプト(指示文)が長くなる傾向があります。
  • 必ずしも正解にたどり着けるわけではない: CoTを使っても、LLMが根本的に知識を持っていないことについては、やはり間違えることがあります。

これからの学習のために

Chain of Thoughtは、LLMとのコミュニケーションを円滑にし、その能力を最大限に引き出すための第一歩です。この考え方を応用すれば、プログラミングだけでなく、文章作成、アイデア出し、データ分析など、あらゆる場面でLLMをあなたの強力な相棒にすることができます。

まずは、あなたが普段LLMに投げかけている質問に、「ステップを踏んで考えてみて」と一言付け加えてみることから始めてみてください。きっと、これまでとは違う、LLMの新たな一面が見えてくるはずです。

LLMは魔法の箱ではありません。対話を通じて、正しく導いてあげることで真価を発揮するツールです。ぜひCoTをマスターして、LLMとの共同作業を楽しんでください!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。