LLMの知識で使い倒すCopilot

Event:

VS Code Meetup #32 LT

Presented:

2024/11/08 nikkie

📣 みなさーん! GitHub Copilot、使ってますかー??

私「いかにCopilotにコードを書かせるか、それだけを考えている」

  • Copilotに馬車馬のように働いてもらうために、私はLLMについての知識を使う

  • 本LTのスコープは Inline suggestions です

お前、誰よ(自己紹介)

仕事でもCopilot!

../_images/uzabase-white-logo.png

プライベートでもCopilot!

Copilotが精度よく続きを書くとき(※私の感覚)

  • 再掲:Inline suggestionsのお話

  • 空に近いファイルではなく、ある程度書かれている ファイル

  • 仮説:Copilotが参考にできるコードが多いとき

自然言語処理からの裏付け

  • 再掲 参考にできるコードが多いとき、Copilotは精度よく生成

  • 実は、例示が多い とき、LLMは 精度が良くなる と一般化できる

  • キーワードは few-shot

GitHub Copilotの裏は、OpenAIのGPT

The first public version of Copilot was launched using Codex, an early version of OpenAI GPT-3, specifically fine-tuned for coding tasks.

Bringing developer choice to Copilot with Anthropic’s Claude 3.5 Sonnet, Google’s Gemini 1.5 Pro, and OpenAI’s o1-preview

GitHub Copilotの裏は、OpenAIのGPT(承前)🏃‍♂️

we have updated the base model versions multiple times, using a range from GPT 3.5-turbo to GPT 4o and 4o-mini models

Bringing developer choice to Copilot with Anthropic’s Claude 3.5 Sonnet, Google’s Gemini 1.5 Pro, and OpenAI’s o1-preview

ChatGPT(=GPT-3.5)は、いきなり出てきたわけではない

GPT-3論文「Language Models are Few-Shot Learners」

GPT-3のプロンプト

  • 自然言語 で書けばよい

  • 続きの生成を 促す

GPT-3論文 Figure 2.1 より
Translate English to French:
cheese =>

GPT-3のここがすごい!

  • 自然言語の プロンプトを変えるだけ で、1つのモデルで様々なタスクが解ける

    • コード生成、翻訳、etc.etc.

  • 🏃‍♂️後の世代(ChatGPT以降)は、加えて会話形式で生成、かつ、有害なことを言わないように追加訓練をしています

few-shot プロンプト

  • 例示 (shot) をいくつも見せ た上で続きの生成を促す

GPT-3論文 Figure 2.1 より
Translate English to French:
sea otter => loutre de mer
peppermint => menthe poivrée
plush girafe => girafe peluche
cheese =>

パラメタ数が多いモデルほど、例を見せるほど正答率向上

../_images/2005.14165_figure12.png

GPT-3論文 Figure 1.2

脱線🏃‍♂️ なぜ例示すると性能が上がるかは、まだ説明できていないらしいです

GitHub Copilotとfew-shotプロンプト

  • 参考にできるコードが多いとき、Copilotは精度よく生成する感覚を説明できていそう

  • すでに書いたコードがCopilotへの例示に なっている!

よーし、テスト書くぞー!!(直近の例)

再掲 いかにCopilotにコードを書かせるか

例:pytestを使ったPythonのテストコードのイメージ
def test_  # からのファイルに最初のテストを書くとき、Copilotはやや見当違いな生成

テストケースを1つか2つ書いた後

def test_これこれのときはTrueを返す():
    # actualを特定の引数の組で作るコード
    assert actual is True

def test_それそれのときはFalseを返す():
    # actualを上とは別の引数の組で作るコード
    assert actual is False

def test_  # まだ網羅していない引数の組でコードを書いてくれる
    # assertのsuggestionの精度もよい

ただし、例に引っ張られる

pytestとしてより良い書き換え
-assert actual is True
+assert actual

-assert actual is False
+assert not actual
  • IMO:いまのCopilotは ライブラリのベストプラクティスを提示するわけではない (だから人間に知識が必要)

まとめ🌯:LLMの知識で使い倒すCopilot

  • GPT-3論文で示された few-shotを意識 して、Copilotの Inline suggestions を使っています

  • 書き進めて例示豊富になったファイルでは、Tabで採用していくだけ

  • 例を超える生成はまだできないので、ライブラリの ベストプラクティスの知識は開発者に必要 と考えています

One more thing...

服部さん 今後の発表イベント

11/14(木) みんなのPython勉強会#110

ご清聴ありがとうございました

References・Appendixが続きます

References

GPT-3論文 Figure 2.1 (left)

../_images/2005.14165_figure21_left.png

Appendix

お前、誰よ(補足)

拙ブログ 関連記事

EOF