12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita100万記事感謝祭!記事投稿キャンペーン開催のお知らせ

「Recline」で使われている VSCode Extension API の「Language Model API」の公式情報: API の使い方など

Last updated at Posted at 2025-01-14

はじめに

Cline の派生版の 1つである以下の「Recline」で使われている、という話を見かけた『VS Code Extension API の「Language Model API」』の話です。

●julesmons/recline: Recline: The autonomous AI assistant that seamlessly integrates with your CLI and editor to create, edit and run; redefining how you code.
https://github.com/julesmons/recline

2025-01-14_23-12-20.jpg

X の以下のポストで少し書いていたものです。

※ レートリミットの部分の話、例えば「for simulation testing」という記載がありつつ内部で呼び出してる言語モデルについて書いてるところ(Internally, VS Code uses a dedicated non-production language model のところ)が、API絡みの話になるのかよく読み取れない...(この API の仕様理解・英語力とかが足りてない感じが...)

情報を見ていく

今回、主にこの API の使い方に関する部分を見ていきます。

Language Model API に関する公式ページ

まずは Language Model API について、公式のページを掲載してみます。

●Language Model API | Visual Studio Code Extension API
https://code.visualstudio.com/api/extension-guides/language-model

2025-01-14_23-12-20.jpg

【少し寄り道】「Recline」で使われているか確認してみる

API の使い方を見ていく前に、少し寄り道です。

「Recline」で使われているという情報を見かけた件について、実際に Recline の GitHub のリポジトリを見て確認してみました。

ここで検索キーにしていたのは、VSCode Extension API の「Language Model API」の公式ページで、以下に書かれている「vscode.LanguageModelChatMessage.User()」です。

2025-01-14_23-20-10.jpg

リポジトリに対して検索をかけた際の結果では、こんな感じでした。

2025-01-14_23-19-03.jpg

Language Model API の情報をさらに見ていく

Language Model API の仕様を、少し見てみます。

プロンプトまわり

現時点でシステムメッセージは未対応で、「ユーザー」と「アシスタント」のみに対応しているようです。

スクリーンショット 2025-01-14 233316.png

そして、以下の2種類のアプローチについて書かれています。

スクリーンショット 2025-01-14 233607.png

1つ目のほうは、上でも書いた「vscode.LanguageModelChatMessage.User()」でも使われている「LanguageModelChatMessage」です。コードサンプルでは、以下のような使われ方になっています。

const craftedPrompt = [
  vscode.LanguageModelChatMessage.User(
    'You are a cat! Think carefully and step by step like a cat would. Your job is to explain computer science concepts in the funny manner of a cat, using cat metaphors. Always start your response by stating what concept you are explaining. Always include code samples.'
  ),
  vscode.LanguageModelChatMessage.User('I want to understand recursion')
];

モデル関連

以下の部分では、モデルに関する内容が書いてあります。

スクリーンショット 2025-01-14 233948.jpg

記事執筆時点では、指定できるモデルとして以下が列挙されていました。

  • gpt-4o
  • gpt-4o-mini
  • o1
  • o1-mini
  • claude-3.5-sonnet

また、以下のような指定もできるようです()。

const models = await vscode.lm.selectChatModels({
  vendor: 'copilot'
});

// No models available
if (models.length === 0) {
  // TODO: handle the case when no models are available
}

この後に出てくるサンプルコードだと、モデルまで指定した使い方も出てきていました。

vscode.commands.registerTextEditorCommand(
  'cat.namesInEditor',
  async (textEditor: vscode.TextEditor) => {
    // Replace all variables in active editor with cat names and words

    const [model] = await vscode.lm.selectChatModels({
      vendor: 'copilot',
      family: 'gpt-4o'
    });
    let chatResponse: vscode.LanguageModelChatResponse | undefined;

    ...

細かなところは 以下の API仕様も見てみると良さそう、という感じでした。

エラー関連

その後のところでは、エラー周りの話も出てきていました。

以下のサンプルが掲載されていますが、コメントの部分でエラーの原因になりうるものが例示されていたりもします。

try {
  const [model] = await vscode.lm.selectChatModels({ vendor: 'copilot', family: 'gpt-4o' });
  const request = model.sendRequest(craftedPrompt, {}, token);
} catch (err) {
  // Making the chat request might fail because
  // - model does not exist
  // - user consent not given
  // - quota limits were exceeded
  if (err instanceof vscode.LanguageModelError) {
    console.log(err.message, err.code, err.cause);
    if (err.cause instanceof Error && err.cause.message.includes('off_topic')) {
      stream.markdown(
        vscode.l10n.t("I'm sorry, I can only explain computer science concepts.")
      );
    }
  } else {
    // add other error handling logic
    throw err;
  }
}

別ページの記載

先ほどは、以下の赤線を引いた「Language Model」というページを見ていました。

スクリーンショット 2025-01-15 000255.png

さらに上記の赤矢印で示したチュートリアルや Tools(LanguageModelTool API)に関するページもあるようです。

●Tutorial: Generate AI-powered code annotations by using the Language Model API | Visual Studio Code Extension API
https://code.visualstudio.com/api/extension-guides/language-model-tutorial

●LanguageModelTool API | Visual Studio Code Extension API
https://code.visualstudio.com/api/extension-guides/tools

Tools(LanguageModelTool API)のほうを少しだけ見てみる

Tools(LanguageModelTool API)に関するページのほうを少しだけ見てみます。

使い方の最初の部分は以下のとおりです。

スクリーンショット 2025-01-15 000717.png

上記の中の「tool.tags.includes('chat-tools-sample')」に関わる部分は、この後に例が出てきます。

具体的には以下の部分です。

"contributes": {
    "languageModelTools": [
        {
            "name": "chat-tools-sample_tabCount",
            "tags": [
                "editors",
                "chat-tools-sample"
            ],
            "toolReferenceName": "tabCount",
            "displayName": "Tab Count",
            "modelDescription": "The number of active tabs in a tab group",
            "icon": "$(files)",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "tabGroup": {
                        "type": "number",
                        "description": "The index of the tab group to check. This is optional- if not specified, the active tab group will be checked.",
                        "default": 0
                    }
                }
            }
        }
    ]
}

このように出力形式を指定する仕組みも、OpenAI・Claude の API のように扱うことができるようです。

【追記】「Language Model API」を雑に試してみた

今まで VS Code の拡張機能作成はやったことがなかったのですが、以下の公式手順で超シンプルなサンプルを作ってみて、その後、「Language Model API」を使った拡張機能からの GitHub Copilot のレスポンス取得をやってみました。

公式の手順

●Your First Extension | Visual Studio Code Extension API
 https://code.visualstudio.com/api/get-started/your-first-extension

API のレスポンスが取得できたもの

12
7
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
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?