6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

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が進化し続けるにつれて、そのギャップは縮小すると期待されています。

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?