LocalLens
セットアップ

CLI の実行

フォルダをインデックスし、質問する。ブラウザもサーバーもなしで。

CLI はパイプラインが動いていることを確かめる一番手早い方法です。 フォルダを 1 つ取り、一時的な brain を作り、質問を 1 つ投げ、引用付きで 回答を表示し、終わりがけに brain を削除する、という流れです。

実行する

bun run cli examples/sample-brain "Why does LocalLens use QWEN3_1_7B_INST_Q4?"

うまく動くと次のように表示されます。

LocalLens uses QWEN3_1_7B_INST_Q4 because it offers a strong balance of answer
quality and local resource use [1]. A 600M fallback is wired in for slimmer
machines [2].

Sources:
- locallens.md#0
- qvac-notes.md#1

初回はチャットモデルと embedding モデルが読み込まれるため、数秒間 止まります。2 回目以降は重みがキャッシュされているので、ずっと速く なります。

内部で起きていること

src/cli.ts は意図的に短く書かれています。一度読めばワークフロー全体が 頭に入ります。

const app = new LocalLensApp();
let brain: Brain | undefined;

try {
  brain = await app.createBrainFromFolder({
    name: folderPath.split(/[\\/]/).filter(Boolean).at(-1) ?? "cli-brain",
    folderPath,
  });

  const result = await app.askBrain(brain.id, question);
  console.log(`\n${result.answer}\n`);

  if (result.citations.length > 0) {
    console.log("Sources:");
    for (const citation of result.citations) {
      console.log(`- ${citation.relativePath}#${citation.chunkIndex}`);
    }
  }
} finally {
  if (brain) await app.deleteBrain(brain.id).catch(() => undefined);
  await app.close();
}

押さえておきたいポイントが 3 つあります。

  1. brain は finally で削除されます。 CLI はワンショットです。JSON エントリを残しません。ブラウザパスでは brain を残します。これが 2 つのエントリポイントの実質的な違いです。
  2. await app.close() は重要です。 これが QVAC を片付けます。これを 省くと、モデルプロセスがバックグラウンドに残り続けることがあります。
  3. brain の名前はフォルダ名から取られます。 brain が短命のあいだ、 JSON ストアを読みやすくするのにちょうど良い情報量です。

複数の質問をしたい場合

CLI は毎回再インデックスします。同じフォルダに複数の質問を投げたい場合は ブラウザアプリを使ってください。リクエスト間で brain を保持します。

出てきうるエラー

  • Folder not found — 渡したパスがディレクトリではありません。 綴りと、リポジトリのルートにいるかを確認してください。
  • Choose a folder with supported text files — フォルダはあるが、 その中に対象になるファイルがありません。対応拡張子は src/files.ts にあります。バイナリファイルと 2 MB を超えるファイルはスキップされます。
  • 長い待ち時間のあとにモデルエラーが出た場合 — 1.7B モデルの読み込みに 失敗しています。ゲートウェイは自動的に 600M にフォールバックします。 それも失敗するなら、メモリが足りていない可能性が高いです。

On this page