Continue.devのweb検索機能についてみてみた。
この記事について
この記事はVSCodeの拡張機能としてあるContinue.devのweb検索機能がどうなっているか。個人レベルで見てみた記事です。
Continue.devホームページ
Continue.devとは
Github Copilotのlocal LLM版のようなもの。
(Github Copilotでもlocal LLMを選択することはできますが...)
なにをしようとしたか
Continue.devでは@Webとチャットに入力することで、web検索ができます。
この設定はconfig.yamlにおいて下記のように設定することで利用できます。
参考
context:
- provider: web
params:
n: 5
たしかにwebから情報を取得しているように見えていますが、これどこを使っているのか?
あと、自分でsearxngコンテナを建てているので、それを代替で使えないか?
と疑問が出てきたので、コードを見てみました。
コード
多分これ
エンドポイントとして、TRIAL_PROXY_URLを使用しているように見える。
TRIAL_PROXY_URLはcontrol-plane/clientにあるように見える
import { BaseContextProvider } from "..";
import {
ContextItem,
ContextProviderDescription,
ContextProviderExtras,
FetchFunction,
} from "../..";
import { getHeaders } from "../../continueServer/stubs/headers";
import { TRIAL_PROXY_URL } from "../../control-plane/client";
export const fetchSearchResults = async (
query: string,
n: number,
fetchFn: FetchFunction,
): Promise<ContextItem[]> => {
const resp = await fetchFn(WebContextProvider.ENDPOINT, {
method: "POST",
headers: {
"Content-Type": "application/json",
...(await getHeaders()),
},
body: JSON.stringify({
query,
n,
}),
});
if (!resp.ok) {
const text = await resp.text();
throw new Error(`Failed to fetch web context: ${text}`);
}
return await resp.json();
};
export default class WebContextProvider extends BaseContextProvider {
public static ENDPOINT = new URL("web", TRIAL_PROXY_URL);
private static DEFAULT_N = 6;
static description: ContextProviderDescription = {
title: "web",
displayTitle: "Web",
description: "Search the web",
type: "normal",
renderInlineAs: "",
};
async getContextItems(
query: string,
extras: ContextProviderExtras,
): Promise<ContextItem[]> {
return await fetchSearchResults(
extras.fullInput,
this.options.n ?? WebContextProvider.DEFAULT_N,
extras.fetch,
);
}
}
control-plane/client部分でTRIAL_PROXY_URLが定義されているところは
export const TRIAL_PROXY_URL =
"https://proxy-server-blue-l6vsfbzhba-uw.a.run.app";
このURL自体、なんなのかわからないのでとりあえずLLMに聞いてみた。
回答抜粋
ご提示いただいたURL(proxy-server-blue-l6vsfbzhba-uw.a.run.app)についてお調べしましたが、これは特定の一般的なサービスや公開サイトではなく、Google Cloud Run というプラットフォーム上で動作している個別のプログラム(コンテナ)の実行アドレスである可能性が非常に高いです。
このURLの構造からわかることや、注意すべき点について整理しました。
1. URLの構造からわかること
.a.run.app: これは Google Cloud が提供する「Cloud Run」というサービスのデフォルトドメインです。
proxy-server-blue: 開発者が付けたサービス名です。「プロキシサーバー」として作られていることが推測されます。
l6vsfbzhba-uw: これはプロジェクトやサービスを識別するために自動生成されるランダムな文字列(ID)です。
ということはContinue.dev側でweb検索用のサーバをgoogle cloudで建てている感じかな?
web検索をする場合、LLMに聞いているコンテキストが全部Continue.dev側で建てているサーバに行っているということになるのかな...?
おわりに
たしかにwebから情報を取得しているように見えていますが、これどこを使っているのか?
→ Continue.dev側で建てているgoogle cloud上のサーバでweb検索をしているみたい。
あと、自分でsearxngコンテナを建てているので、それを代替で使えないか?
→ コードの中でTRIAL_PROXY_URLが決まっているので当然、自分で建てたsearxngコンテナを使うことはできないね。何かしら任意のAPIを叩けるよう出来たら、searxng用のAPIを叩いて検索とかできたらよかったけども...
他
百歩譲ってweb検索はまぁいいとしても、コンテキストに含んでほしいファイルやフォルダをドラッグで対象とできないのはなんとかしてほしい。
github copilotはファイルやフォルダをチャットスペースにドラッグすると含んでくれるので楽。
結局github copilotでlocal LLMを使う感じになりそう。web検索もweb search for copilotが出てくれたし。
APIを叩く回数の制限はあるけど、どこかもわからんサーバへLLMに聞いた内容が送信されるよりかはいいのかなぁと