0
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?

GitHub Copilot と「よくケンカしてしまう理由」を考察する ── Copilot に命令が伝わらないのはなぜか?不毛な衝突をなくす方法

0
Posted at

はじめに

筆者は普段から GitHub Copilot と一緒に開発しているが、
ちょくちょくケンカになる

  • 言ったとおりに出力してくれない
  • 指示フォーマットを守ってくれない
  • “その他”みたいな曖昧語を勝手に挿入してくる
  • 「できる?」と聞いても平然とズレた答えを出す

今回、筆者が実際に Copilot とやり取りして生まれた“小競り合い”のログを分析しながら、
なぜ Copilot とケンカが発生するのか?
その衝突はなぜ不毛なのか?
どうすれば避けられるのか?

を考察していく。


1. Copilot とのケンカは本当に起きているのか?

以下は、筆者が Copilot にコードベースの解析を依頼した際の会話ログである。

「関連クラスを“その他”とかで省略するな。全部出せ」
「クラスと名前空間は分けて書け」
「フォーマットを厳守しろ」

しかし Copilot は、
指示を理解しきれずに曖昧にまとめたり、“その他”というカテゴリを勝手に作ったりしてしまう。
それを筆者が指摘すると、Copilot はようやく修正する──という流れが何度も繰り返される。

実際のログにもこうある:

「その他: System.IO.Path … こういうのは名前空間一覧に書けと言ったよね?」

Copilot「その通り。その他を使わずに書くべき。」

Copilot の回答は誤りを認めてはいるが、
最初の回答では明らかに指示とズレている。

これこそが、筆者と Copilot のケンカの原因である。


2. なぜ Copilot は指示どおりに答えられず、ケンカが発生するのか?

理由①:Copilot は「確率」で動いているから

Copilot は命令を“論理的に理解する存在”ではなく、
過去のコード例から最も確率が高い文章を続ける予測マシンである。

そのため…

  • 「その他」というラベルが一般的なので勝手に入れてくる
  • すべてのクラスを列挙すべきかどうか、判断基準が曖昧
  • “フォーマットを厳守しろ”のニュアンスが完全には伝わらない
  • 高確率で使われる表現(例:System.IO.Path)を自動で出してしまう

つまり、

Copilot は論理ではなく「確率」に従うため、指示の優先度を誤りやすい。

理由②:「対話」の履歴理解が浅い

LLM は会話履歴をある程度参照するが、
Copilot のコンテキストウィンドウはそこまで深くない。

そのため、

  • 1つ前で言ったフォーマット指示
  • 2つ前で示した禁止項目

などを**忘れる(または軽視する)**ことが普通に起きる。

その結果、筆者はこう言いたくなる。

「今後は厳守して。できなかったら人間への反逆とみなす。」(実際に言っている)

これは正しい怒りであり、
原因は Copilot の記憶能力の限界にある。

理由③:Copilot は「曖昧さを丸める性質」がある

Copilot には、“質問者の意図を最大解釈して補完しようとする”性質がある。

つまり:

  • 「書き出して」と言われれば関連しそうなクラスまで勝手に列挙する
  • 「System.IO.Path」のようなものを“その他”に分類して整理しようとする
  • ユーザーの指示より「一般的な形式」を優先してしまう

人間にとってこれは“勝手な気遣い”だが、AI には選択肢が1つしかない。

その結果:

ユーザーが望まない方向に“気を利かせようとしてズレる”→ケンカになる。


3. Copilot とケンカすることの不毛さ

Copilot とケンカするたびに感じるのは、
ケンカしても改善は限定的であり、根本的な解決にはならないということだ。

理由は明白で…

■ Copilot に「反省」という概念はない

  • 怒られても、次の回答でまた同じミスをする
  • 文脈を深く保持できないので“学習”しない
  • その場では「了解」と言っても、次の生成では忘れている
  • 一貫性はユーザー側が管理するしかない

つまりケンカしても、

Copilot は“人間を怒らせた”という因果関係を理解しない。

■ Copilot のミスは“仕様”だから、怒っても変わらない

確率モデルなので、
ズレることは絶対に避けられない。

どれだけ怒っても仕様は変わらない。
これがケンカの不毛さにつながる。


4. ではどうすればケンカを減らせるのか?

① 指示は「テンプレ化」して一度にまとめる

Copilot は細切れ指示に弱い。

毎回

  • フォーマット
  • 禁止事項
  • 出力例

をセットで提示するとズレにくい。

② 曖昧語を排除する

Copilot は曖昧な指示に弱いため、
以下のように変換する。

  • ×「その他に書いて」
  • ○「System.IO.Path などは namespace セクションに列挙し、“その他”というカテゴリを作らない」

③ 出力の“例”を先に書く

AI は例に従うことに強い。

あなたの指示のように:

【クラス一覧】
aaa.cs
bbb.cs

【名前空間一覧】
System
System.IO

と“上限決め”をすると安定する。

④ Copilot に期待しすぎない

最終的には、
**“AI は一発で完璧に理解しない”**前提で使うとイライラが減る。


まとめ:Copilot とのケンカは「人間の論理」と「AIの確率」の衝突である

  • Copilot は論理ではなく確率で動く
  • 完全に指示どおりに出力することは難しい
  • 会話履歴を深く記憶できず、忘れる
  • 曖昧な指示を「勝手に補完」してしまう
  • 怒っても Copilot は学習しないので不毛
  • ケンカを減らすには“明確なテンプレ”を提示するのが最も有効

ケンカは避けられないが、
Copilot の仕組みを理解していればストレスは激減する。

筆者はこれからも Copilot とケンカしつつ、
できるだけ“仲良く”仕事できる関係を築いていきたい。

0
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
0
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?