Code Llama プロンプトガイド

MetaのCode Llamaには、Instruct、Code completion、Pythonの3つの主要なバリエーションがあり、それぞれ効果を最大化するために異なるプロンプト戦略が必要です。これらの違いを理解することで、開発者は自然言語による対話から正確なコードのインフィリングまで、幅広いタスクにモデルを使用できるようになります。

Code Llama Instruct: 自然言語による対話

instructモデルは、質問に対して人間のような回答を提供するために設計されており、自然言語による説明とコードブロックを組み合わせて提供します。これは最も親しみやすいバリエーションであり、対話型AIと同様に機能します。

コード生成と説明

Instructモデルは、自然言語のリクエストに基づいて関数を生成できます。例えば、n番目のフィボナッチ数を求めるPython関数を書くようにモデルに依頼すると、実装と、使用された再帰公式の簡潔な説明の両方が得られます。

コードレビューとバグ検出

Code Llama Instructは、コミットやプルリクエストのセカンダリレビュアーとして機能し、単純なバグを特定できます。バグのある関数が提供された場合、モデルは、特定の入力ケース(例:nが1に等しい場合)の処理に失敗しているといった、具体的な論理エラーをピンポイントで指摘できます。

ユニットテストの生成

モデルは、既存の関数のためのユニットテストを生成することで、ボイラープレートのオーバーヘッドを削減します。ソースファイルのコンテンツをプロンプトに渡すことで、モデルは複数のエッジケースをカバーする包括的なunittestクラスを生成できます。

Code Completion と Infill

標準的なコード補完モデルは、提供されたプロンプトに基づいて後続のトークンを生成することに焦点を当てており、関数のシグネチャやコメントの後にコードを書くのに理想的です。

標準的な補完

関数の目的を説明するコメント(例:文字列から空白を削除する)が提供された場合、補完モデルは、その要件を満たす対応するPythonコードを生成します。

Fill-in-the-Middle (FIM) / Infill

Infillは、既存の2つのブロックの間のコードを補完する、特殊なプロンプト形式です。これは、既存の関数の途中にロジックを挿入する際に極めて重要です。この機能を使用するには、モデルは特定のタグベースの形式が必要です:

<PRE> {prefix} <SUF>{suffix} <MID>

この構造において、prefixは挿入ポイントの前のコードであり、suffixはそれに続くコードです。モデルは、応答の完了を示すために<EOT> (End of Token) タグを返却することがあります。

Code Llama Python

Pythonバリエーションは、追加で1000億のPythonトークンでファインチューニングされています。これにより、機械学習ツールやDjangoのようなWebフレームワークを含む、Python開発に特化して最適化されています。

モデルの可用性とエコシステム

Code Llamaは、7B、13B、および34Bパラメータのバージョンで利用可能です。提供された例ではOllamaを介して7Bモデルの4-bit量子化版を使用していますが、プロンプトは異なるモデルプロバイダーやランタイムと互換性があります。

Code Llamaは、すでに以下のようなツールに統合されています:

  • Cody: Infillサポートを備えた実験的なバージョンを提供しています。
  • Continue: GPT-4の代替としてCode Llamaをサポートしています。
  • Open Interpreter: ローカルターミナルの実行用に、関数を生成するためにモデルを使用します。
  • Fine-tuned variants: PhindやWizardLMなどのチームによって、特化型バージョンがリリースされています。

Sources

関連

  • Dispatch
  • Dispatch
  • Dispatch
  • プロジェクト
  • Dispatch