AI コード・アシスタント Continue : セットアップ : 概要 / 構成
作成 : Masashi Okumura (@ClassCat)
作成日時 : 08/01/2024
* 本ページは、docs.continue.dev の以下のページを参考にしてまとめ直したものです :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
AI コード・アシスタント Continue : セットアップ : 概要
Contuinue は使用する大規模言語モデル (LLM) を選択できます。Anthropic API 経由の Claude 3 Opus のような商用モデル、Ollama を使用しラップトップで動作する Llama 3 のようなオープンソースモデル、そしてそれらの間のあらゆるモデルにより、それを使用することができます。
最初に Continue をインストールした場合、API キーを使用して安全に呼び出しを行うプロキシーサーバを使用して、無料で試すことができます。貴方自身の API キーは異なるモデル / プロバイダーを使用する準備ができたら、それらを config.json に追加することができます。
チャット、オートコンプリート や 埋め込み のために使用するモデルやプロバイダーを決定する必要があります。
AI コード・アシスタント Continue : セットアップ : 構成
Continue を素早く簡単にセットアップしたいですか? 様々なシナリオに対する幾つかのサンプルの config.json ファイルを用意しています。Continue サイドバーの右下にある歯車アイコンをクリックして、それらを config.json にコピー&ペーストするだけです。
クイック・セットアップ・オプション
Continue を様々な方法で使用できます。一般的な使用方法のためのいくつかのクイックセットアップは以下です :
- フリー・トライアル – 追加のセットアップなしに Continue を試します。
- ベストな総合的エクスペリエンス – ベストなエクスペリエンスのために厳選されたモデルを活用します。
- ローカル & オフライン – より良いプライバシーのためにオフラインで使用するローカルモデルを使用します。
フリー・トライアル
フリートライアルは新規ユーザが ContinueDev プロキシーサーバを使用して、GPT-4o, Llama3, Claude 3.5 や他のモデルで Continue を試すことを可能にします。プロキシーサーバはこれらのサービスへの API 呼び出しを安全に実行します。
~/.continue/config.json
{
"models": [
{
"title": "GPT-4o (trial)",
"provider": "free-trial",
"model": "gpt-4o"
}
],
"tabAutocompleteModel": {
"title": "Codestral (trial)",
"provider": "free-trial",
"model": "AUTODETECT"
},
"embeddingsProvider": {
"provider": "free-trial"
},
"reranker": {
"name": "free-trial"
}
}
ベストな総合的エクスペリエンス
このセットアップは、チャット用に Claude 3.5 Sonnet、オートコンプリート用に Codestral、そして埋め込みと再ランク付け用に Voyage AI を使用します。
What You Need :
- Anthropic Console から Anthropic API を取得する。
- Mistral AI の La Plateforme から Codestral API キーを取得する。
- Voyage AI Dashboard から Voyage AI API キーを取得する。
- [CODESTRAL_API_KEY], [ANTHROPIC_API_KEY] と [VOYAGE_API_KEY] を上記のリンクから取得したキーで置き換えます。
~/.continue/config.json
{
"models": [
{
"title": "Claude 3.5 Sonnet",
"provider": "anthropic",
"model": "claude-3-5-sonnet-20240620",
"apiKey": "[ANTHROPIC_API_KEY]"
}
],
"tabAutocompleteModel": {
"title": "Codestral",
"provider": "mistral",
"model": "codestral-latest",
"apiKey": "[CODESTRAL_API_KEY]"
},
"embeddingsProvider": {
"provider": "openai",
"model": "voyage-code-2",
"apiBase": "https://api.voyageai.com/v1/",
"apiKey": "[VOYAGE_AI_API_KEY]"
},
"reranker": {
"name": "voyage",
"params": {
"apiKey": "[VOYAGE_AI_API_KEY]"
}
}
}
ローカル & オフライン構成
この構成はすべての機能 – チャット、オートコンプリート、そして埋め込み – のために Ollama を活用し、コードがマシンの外側に送信されないことを保証し、Continue がエア・ギャップされたコンピュータ上でも実行されることを可能にします。
What You Need :
- Ollama の公式サイトから Ollama をダウンロードする。
- 必要なモデルを pull します :
- チャット用: “ollama pull llama3:8b”
- オートコンプリート用 : “ollama pull starcoder2:3b”
- 埋め込み用 : “ollama pull nomic-embed-text”
~/.continue/config.json
{
"models": [
{
"title": "Ollama",
"provider": "ollama",
"model": "AUTODETECT"
}
],
"tabAutocompleteModel": {
"title": "Starcoder 2 3b",
"provider": "ollama",
"model": "starcoder2:3b"
},
"embeddingsProvider": {
"provider": "ollama",
"model": "nomic-embed-text"
}
}
チャットモデルのセットアップ
config.json には models プロパティがあります、これは Continue で使用するために保存したものです :
"models": [
{
"title": "GPT-4",
"provider": "free-trial",
"model": "gpt-4"
},
{
"title": "GPT-3.5-Turbo",
"provider": "free-trial",
"model": "gpt-3.5-turbo"
}
]
model と provider プロパティを指定するだけで、自動的にプロンプト・テンプレートやその他の重要な情報を検出しますが、この基本的な設定以上のことをしたい場合には、幾つかの他のオプションについて後述します。
オープンソース・モデルのセルフホスティング
多くの場合、Continue は組み込みのプロバイダーか使用する OpenAI 互換な API を持ちますので、”openai” プロバイダーを使用してサーバを指すように “baseUrl” を変更することができます。
けれども、どちらも当てはまらない場合は、新しい LLM オブジェクトを接続する必要があります。Learn how to do this here.
認証
Basic 認証は apiKey フィールドを使用して任意のプロバイダーで行うことができます :
~/.continue/config.json
{
"models": [
{
"title": "Ollama",
"provider": "ollama",
"model": "llama2-7b",
"apiKey": "xxx"
}
]
}
これはヘッダ “Authorization”: “Bearer xxx” に変換されます。
認証用にカスタムヘッダを送信する必要がある場合は、Ollama のこのサンプルのように requestOptions.headers プロパティを使用できます :
{
"models": [
{
"title": "Ollama",
"provider": "ollama",
"model": "llama2-7b",
"requestOptions": {
"headers": {
"X-Auth-Token": "xxx"
}
}
}
]
}
同様にモデルが認証用に Certificate を必要とする場合、以下のサンプルでのように requestOptions.clientCertificate プロパティを使用できます :
{
"models": [
{
"title": "Ollama",
"provider": "ollama",
"model": "llama2-7b",
"requestOptions": {
"clientCertificate": {
"cert": "C:\tempollama.pem",
"key": "C:\tempollama.key",
"passphrase": "c0nt!nu3"
}
}
}
]
}
コンテキスト長
Continue はデフォルトで一般的なモデルのコンテキスト長を知っています。例えば、Claude 3 に対しては自動的に 200k トークンを想定します。Ollama については、Ollama に尋ねることでコンテキスト長を自動的に決定します。これらのいずれもが十分でない場合、config.json のモデルの “contextLength” プロパティを使用してコンテキスト長を手動で指定できます。
{
"models": [
{
"title": "My Custom Model",
"provider": "openai",
"model": "my-model",
"contextLength": 8192,
"apiBase": "http://localhost:8000/v1"
}
]
}
チャット・テンプレートのカスタマイズ
殆どのオープンソース・モデルは特定のチャット形式を想定しています、例えば llama2 と codellama は入力が “[INST] How do I write bubble sort in Rust? [/INST]” のように見えることを想定しています。Continue は提供する modelvalue に基づいて正しいプロンプト形式を自動的に検出しようとしますが、無意味な応答を受け取る場合、template プロパティを使用して想定する形式を明示的に設定できます。そのオプションは : [“llama2”, “alpaca”, “zephyr”, “phind”, “anthropic”, “chatml”, “openchat”, “neural-chat”, “none”].
まったく新しいチャット・テンプレートを作成したい場合、config.ts で関数を定義してそれを LLM の templateMessages プロパティに追加することでこれを行うことができます。Alpaca/Vicuna 形式のための templateMessages の例は以下のとおりです :
function templateAlpacaMessages(msgs: ChatMessage[]): string {
let prompt = "";
if (msgs[0].role === "system") {
prompt += `${msgs[0].content}\n`;
msgs.pop(0);
}
prompt += "### Instruction:\n";
for (let msg of msgs) {
prompt += `${msg.content}\n`;
}
prompt += "### Response:\n";
return prompt;
}
It can then be used like this:
~/.continue/config.ts
function modifyConfig(config: Config): Config {
const model = config.models.find(
(model) => model.title === "My Alpaca Model",
);
if (model) {
model.templateMessages = templateAlpacaMessages;
}
return config;
}
この正確な関数と幾つかの他のデフォルト実装は continuedev.libs.llm.prompts.chat で利用可能です。
/edit プロンプトのカスタマイズ
‘/edit’ スラッシュ・コマンドで使用されるプロンプトをカスタマイズすることもできます。GPT-4 用に上手く設計されたプロンプトとそれほど強力ではないオープンソース・モデル用の実用的なデフォルトが既にありますが、例えば出力にコードだけではなく英語も取得している場合、プロンプト操作することを望む、より信頼性の高い代替を見つけようとするかもしれません。
プロンプトをカスタマイズするには、任意のモデルの promptTemplates プロパティを使用します、これは辞書で、”edit” キーに Mustache 構文のテンプレート文字列を設定します。テンプレートでは ‘filePrefix’, ‘fileSuffix’, ‘codeToEdit’, ‘language’, ‘contextItems’ と ‘userInput’ 変数が利用可能です。 Here is an example of how it can be set in config.ts:
~/.continue/config.ts
const codellamaEditPrompt = `\`\`\`{{{language}}}
{{{codeToEdit}}}
\`\`\`
[INST] You are an expert programmer and personal assistant. Your task is to rewrite the above code with these instructions: "{{{userInput}}}"
Your answer should be given inside of a code block. It should use the same kind of indentation as above.
[/INST] Sure! Here's the rewritten code you requested:
\`\`\`{{{language}}}`;
function modifyConfig(config: Config): Config {
config.models[0].promptTemplates["edit"] = codellamaEditPrompt;
return config;
}
You can find all existing templates for /edit in core/llm/templates/edit.ts.
以上