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

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

# Building Private Copilot for Development Teams with Llama3

[https://pub.towardsai.net/building-private-copilot-for-development-teams-with-llama3-c749bf19c235](https://pub.towardsai.net/building-private-copilot-for-development-teams-with-llama3-c749bf19c235https://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](https://miro.medium.com/v2/resize:fit:525/1*0vQuW6K8sVdAQWjPOrx34Q.png)

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

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

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

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

# ローカルサービス

![https://miro.medium.com/v2/resize:fit:525/1*2NWJJga_gLlBj56itt_00g.png](https://miro.medium.com/v2/resize:fit:525/1*2NWJJga_gLlBj56itt_00g.png)

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

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

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

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

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

# プライベートサービス

![https://miro.medium.com/v2/resize:fit:525/1*fB90T9ZqIsbrNCAX0jo2mQ.png](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](https://github.com/vllm-project/vllm)を使用します。vllmは、LLM推論とサービス提供のための効率的で使いやすいライブラリです。OpenAI APIと互換性のあるサービスをデプロイすることができます。類似製品と比較して、vllmの主な特徴には高スループット、低レイテンシー、そして高速性があります。

まず、Llama3モデルをダウンロードします。Llama3はHuggingFaceからダウンロードできますが、事前に申請が必要です。承認後、HuggingFace CLIを使用してモデルをダウンロードできます。次のコマンドを使用して[Meta-Llama-3-8B-Instruct](https://huggingface.co/meta-llama/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](https://www.continue.dev/)は、開発者がモジュール化されたAIソフトウェア開発システムを簡単に作成できるようにするIDEプラグインです。VSCodeやJetBrainsなどのIDEをサポートし、コード生成、コードの説明、AI Q&Aなどの一般的なCopilot機能を提供します。

# プラグインインストール

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

![https://miro.medium.com/v2/resize:fit:525/1*BQ0mmXXNtqn6IrVwCLZ0JA.png](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設定で`provider`に`openai`を記入し、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](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*nsVnoh1M2qPYpGJ3No9hQg.png)

![https://miro.medium.com/v2/resize:fit:525/1*HLe0Fa9dgGOcRJuKqt1waA.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*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*CuiQk2eIu5tR6C36vnuvFw.png)

![https://miro.medium.com/v2/resize:fit:525/1*Hj5WumNivgSe-IaSQxHz5Q.png](https://miro.medium.com/v2/resize:fit:525/1*Hj5WumNivgSe-IaSQxHz5Q.png)

Continueプラグインのさらなる使用方法については、[公式ドキュメント](https://docs.continue.dev/intro)を参照してください。

# 注意事項

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

```json
{
  "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](https://huggingface.co/Qwen/CodeQwen1.5-7B-Chat)は良い選択肢です。

# 結論

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