😎

Llama3で開発チーム向けのCopilotを構築する

2024/05/28に公開

Llama3で開発チーム向けのCopilotを構築する

Building Private Copilot for Development Teams with Llama3

https://pub.towardsai.net/building-private-copilot-for-development-teams-with-llama3-c749bf19c235

多くの開発者がGitHub Copilotを使用して、コーディングをより簡単にし、プログラミングの方法を変えています。Metaは最近、Llama3という新しいオープンソースツールをリリースし、多くのプログラミングツールやフレームワークがこれを利用しています。今日は、Llama3を使用して独自のプライベートCopilotを作成する方法について説明します。これにより、チームの連携を強化し、コードのセキュリティを確保することができます。

Copilot: あなたのプログラミングアシスタント

GitHubとOpenAIが共同で開発したCopilotは、コーディングのヘルパーツールです。AIを活用して優れたコードスニペットや情報を提供します。従来のツールとは異なり、Copilotはよりスマートで長いコード片、さらには関数やクラス全体を生成することができます。これにより、開発者の時間と労力を節約できます。また、質問に答えたり、コードを説明したり、言語を翻訳したり、ユニットテストを作成したりすることもできます。現在、Copilotを使用する方法はいくつかあります。

オンラインサービス

https://miro.medium.com/v2/resize:fit:525/1*0vQuW6K8sVdAQWjPOrx34Q.png

GitHub Copilotのようなオンラインサービスはコーディングを支援します。コーディングプログラム(IDE)にプラグインをインストールするだけで利用できます。CopilotはGitHubのコードをトレーニングに使用しているため、高品質なコードを提案できます。しかし、コードをサーバーにアップロードするため、コードのプライバシーには注意が必要です。

他のCopilotに類似したツールには以下のものがあります:

  • Codeium: このツールは、開発者がよりスマートかつ迅速にコーディングできるよう支援します。40以上のIDEで動作し、個人利用は無料です。
  • CodeGeeX: 清華大学が提供するこの無料ツールは、多くのプログラミング言語をサポートしています。
  • CodeWhisperer: AWSのツールで、コーディングを支援します。無料でセキュリティ問題をチェックします。
  • Tongyi Lingma: Alibaba Cloudのツールで、AlibabaのQwenモデルを使用し、多くの言語をサポートしています。こちらも無料です。

これらのツールを活用することで、コーディングの効率を向上させることができます。各ツールには独自の特徴があり、プロジェクトのニーズに応じて最適なツールを選択することが重要です。

ローカルサービス

https://miro.medium.com/v2/resize:fit:525/1*2NWJJga_gLlBj56itt_00g.png

二つ目の形式はローカルサービスです。ここでは、LLM(大規模言語モデル)がローカルにデプロイされ、IDEプラグインがローカルのLLM APIサービスを呼び出します。ローカルLLMをデプロイするための多くのツールが利用可能であり、OllamaLocalAIなどがあります。これらのツールは、CPUマシン上でLLMを実行することをサポートしています。

ローカルサービスの利点は次の通りです:

  • オフライン使用: インターネット接続がなくても使用できます。
  • コードプライバシーの確保: コードを外部サーバーにアップロードする必要がありません。

ただし、各開発者がローカルにLLMをインストールする必要があります。

これにより、プライバシーを守りながら高度なコード補完や生成機能を利用することができます。特に、企業内でのセキュリティ要件が厳しい場合には、このアプローチが非常に有効です。

プライベートサービス

https://miro.medium.com/v2/resize:fit:525/1*fB90T9ZqIsbrNCAX0jo2mQ.png

プライベートサービスはローカルサービスの一種です。しかし、ローカルサービスとは異なり、開発者が個別にローカルLLMをインストールする必要はありません。代わりに、開発チームが共同でLLMサービスをデプロイし、開発者はIDEプラグインを介してチームの内部LLMサービスにアクセスします。このアプローチはコードプライバシーを保護し、チームの生産性を向上させるもので、今日の議論の焦点となります。

プライベートサービスの利点

  • コードプライバシーの保護: コードが外部サーバーに送信されないため、セキュリティリスクが低減されます。
  • チームの生産性向上: チーム全体でLLMを共有することで、個々の開発者が個別に設定する手間を省き、効率的に作業を進めることができます。
  • 統一された環境: チーム全員が同じLLM環境を使用するため、開発プロセスが統一され、コラボレーションが容易になります。

導入手順

  1. LLMの選定: チームのニーズに合ったLLMを選びます(例:Llama3)。
  2. デプロイメント: 選定したLLMをチームのサーバーにデプロイします。
  3. IDEプラグインの設定: 開発者のIDEにプラグインをインストールし、内部LLMサービスに接続します。
  4. 運用とメンテナンス: 定期的にLLMを更新し、運用状況をモニタリングします。

プライベートサービスを導入することで、セキュリティと生産性のバランスを取りながら、高度なコーディング支援機能を活用することができます。次回のブログでは、実際にLlama3を使用してプライベートCopilotを構築する具体的な手順について詳しく解説します。それまで、安全に作業を進め、引き続きコーディングを楽しんでください。

Llama3 デプロイ

Llama3を使用してチームのためのプライベートCopilotを構築するには、まずLlama3をデプロイする必要があります。ここでは、Llama3をデプロイするためにvllmを使用します。vllmは、LLM推論とサービス提供のための効率的で使いやすいライブラリです。OpenAI APIと互換性のあるサービスをデプロイすることができます。類似製品と比較して、vllmの主な特徴には高スループット、低レイテンシー、そして高速性があります。

まず、Llama3モデルをダウンロードします。Llama3はHuggingFaceからダウンロードできますが、事前に申請が必要です。承認後、HuggingFace CLIを使用してモデルをダウンロードできます。次のコマンドを使用してMeta-Llama-3-8B-Instructモデルをダウンロードします:

huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --token YOUR_HF_TOKEN

次に、pipを介してvllmをインストールします:

conda create -n vllm python=3.9 -y
conda activate vllm
pip install vllm

インストール後、vllmのコマンドを使用してOpenAI APIサービスを起動します:

python -m vllm.entrypoints.openai.api_server \\
--model meta-llama/Meta-Llama-3-8B-Instruct \\
--gpu-memory-utilization 0.85

ここで、gpu-memory-utilizationはサービス起動後のGPUメモリ使用率を85%に設定します。

サービスが起動すると、サービスアドレスはhttp://localhost:8000になります。curlコマンドを使用してAPIサービスを確認できます:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "messages": \[
      {
        "role": "user",
        "content": "Hello!"
      }
    \]
  }'

\# Result
{
  "id": "cmpl-01cb80c24d4a4e32992b6328fbf09794",
  "created": 1714901485,
  "model": "meta-llama/Meta-Llama-3-8B-Instruct",
  "object": "chat.completion",
  "choices": \[
    {
      "finish_reason": "stop",
      "logprobs": null,
      "index": 0,
      "message": {
        "content": "Hello! It's nice to meet you. Is there something I can help you with, or would you like to chat?",
        "role": "assistant"
      }
    }
  \],
  "usage": {
    "prompt_tokens": 13,
    "completion_tokens": 26,
    "total_tokens": 39
  }
}

IDEプラグイン: Continue

サーバーサイドをデプロイした後、クライアントサイドをインストールしましょう。Continueは、開発者がモジュール化されたAIソフトウェア開発システムを簡単に作成できるようにするIDEプラグインです。VSCodeやJetBrainsなどのIDEをサポートし、コード生成、コードの説明、AI Q&Aなどの一般的なCopilot機能を提供します。

プラグインインストール

VSCodeを例にとると、VSCode拡張機能マーケットプレイスでContinueプラグインを検索し、インストールをクリックします。

https://miro.medium.com/v2/resize:fit:525/1*BQ0mmXXNtqn6IrVwCLZ0JA.png

設定の変更

次に、Continueの設定を変更します。ショートカットキーを使用してプラグイン設定ファイルを開きます:cmd/ctrl + shift + Pを押し、"Continue config"と入力して、Open config.jsonを選択します。

次に、設定ファイルを更新します。ContinueはデフォルトでローカルのLLMデプロイにOllamaを使用します。しかし、既にLLMサービスをデプロイしている場合は、modelsおよびtabAutocompleteModelの設定を変更して独自のLLMサービスを使用することができます。例えば:

"models": \[
  {
      "title": "llama3-8b",
      "model": "meta-llama/Meta-Llama-3-8B-Instruct",
      "apiBase": "http://your-llama3-api-host:8000/v1",
      "provider": "openai",
      "apiKey": "empty"
  }
\]
"tabAutocompleteModel": {
  "title": "Tab Autocomplete Model",
  "model": "meta-llama/Meta-Llama-3-8B-Instruct",
  "apiBase": "http://your-llama3-api-host:8000/v1",
  "provider": "openai",
  "apiKey": "empty"
}

  • LLM設定でprovideropenaiを記入し、OpenAIの形式を利用します。
  • apiBaseには、デプロイしたLLMサービスのアドレスを記入します。例:http://your-llama3-api-host:8000/v1(必ず末尾にv1パスを含めること)。
  • modelには、ダウンロードしたLlama3モデルを記入します。例:meta-llama/Meta-Llama-3-8B-Instruct
  • apiKeyは任意の値を入力できます。
  • titleはプラグインに表示されるモデル名です。
  • modelsは、AI Q&Aおよびコード生成機能で利用可能なモデルを指定します。
  • tabAutocompleteModelは、コード自動補完に使用するモデルを指定します。

次に、Continueプラグインでllama3-8bモデルを選択し、Llama3の使用を開始します:

使用方法の紹介

まず、AI Q&A機能を探索してみましょう。質問を入力すると、LLMが回答を生成します:

https://miro.medium.com/v2/resize:fit:525/1*qVdFemXL0F4EWCnUAwUZUg.png

次に、コード生成機能を試してみましょう。コードを選択し、cmd/ctrl + Iを押すと、入力ボックスが表示され、LLMがメソッドを補完します:

https://miro.medium.com/v2/resize:fit:525/1*nsVnoh1M2qPYpGJ3No9hQg.png

https://miro.medium.com/v2/resize:fit:525/1*HLe0Fa9dgGOcRJuKqt1waA.png

コードの説明も行えます。コードを選択し、cmd/ctrl + Lを押すと、選択されたコードが質問ボックスにコピーされます。LLMはコードに基づいて回答を生成します:

https://miro.medium.com/v2/resize:fit:525/1*wNN-fr5yxM2-7-hxWfkgUQ.png

単体テストの生成もコード生成機能の一部であり、以前の操作と同様です。

https://miro.medium.com/v2/resize:fit:525/1*CuiQk2eIu5tR6C36vnuvFw.png

https://miro.medium.com/v2/resize:fit:525/1*Hj5WumNivgSe-IaSQxHz5Q.png

Continueプラグインのさらなる使用方法については、公式ドキュメントを参照してください。

注意事項

使用中にLlama3の出力が終了しない場合は、設定ファイルにcompletionOptionsを追加してこの問題を修正します:

{
  "title": "llama3-8b",
  "model": "meta-llama/Meta-Llama-3-8B-Instruct",
  "apiBase": "<http://your-llama3-api-host:8000/v1>",
  "provider": "openai",
  "apiKey": "empty",
  "completionOptions": {
    "stop": [""]
  }
}

Llama3に加えて、コード支援のための他のオープンソースLLMも利用可能です。例えば、CodeQwen1.5–7B-Chatは良い選択肢です。

結論

オープンソースのLLMをチームのコード支援ツールとして使用することで、開発効率を向上させ、コードのプライバシーを保護することができます。現在、オープンソースのLLMはGitHub Copilotなどの企業所有のオンラインLLMに遅れを取っていますが、オープンソースのLLMが進化し続けるにつれて、そのギャップは縮小すると期待されています。

Discussion