Home
back

RAG , ローカル検索 Node.js LLM Ollama

id: 187, 2025-05-22

### 音声概要

・AIで生成された 音声概要になります。


### 概要

  • RAG , ローカル検索 作成メモになります。
  • LLMは、Gemini
  • Ollama: mxbai-embed-large model も使用。
  • RAGは、知識ないのですが。関連ページを参考に検索できそうでした。

[ 公開 2025/05/11 ]


### 構成

  • LLM: gemini
  • Ollama: mxbai-embed-large model
  • node20
  • @langchain/textsplitters
  • Vercel AI SDK
  • SQLite

### 関連


### 書いたコード


  • .env
GOOGLE_GENERATIVE_AI_API_KEY="key"

  • ベクトル変換
  • ローカルの、mdファイル等を読込む。
npx tsx src/embed.ts

  • start
npm run dev

  • プロンプト参考
メール 検索して欲しい

  • 出力例
>yarn dev
yarn run v1.22.22
$ tsx src
input:メール 検索して欲しい
input= メール 検索して欲しい
formatted query:

***

artifact:
了解しました。現状のメモから、メールに関する情報をまとめます。

**メール関連情報まとめ**

*   **メール送信機能:**
    *   nodemailerのgmailサービスを使用してメール配信を行う。
    *   購入品の登録後、メール配信する処理を実装。
*   **設定:**
    *   gmail経由で送信するため、Googleアカウントとアプリパスワードが必要。
    *   アプリパスワードは、Googleアカウントのセキュリティ設定から発行。
    *   `.env`ファイルに以下の環境変数を設定:
        *   `GOOGLE_MAIL_USER`: メール送信元
        *   `GOOGLE_MAIL_PASSWORD`: アプリパスワード
        *   `GOOGLE_MAIL_SENDTO`: 送信先
*   **プロンプト例:**
    *   `addItemMail を使って、 バス代 , 210 JPY を送信して欲しい。`

**検索結果:**

このメモの中では、メール送信機能の実装と設定、そしてプロンプト例が記載されています。特に、nodemailerとgmailサービスを利用したメール送信、アプリパスワードの設定、そして環境変数の設定が重要です。

**補足:**

*   Vercel AI SDKを使用しているため、Vercel環境でのデプロイを想定していると思われます。
*   d1 + CF workers構成なので、Cloudflare Workers上で動作するデータベース(d1)を使用していることがわかります。

この情報で、メールに関する検索は完了でしょうか?他に何か知りたい情報があれば、具体的に質問してください。例えば、「メール送信処理の具体的なコード例は?」や「エラーハンドリングはどうなっている?」など。

Done in 5.24s.

  • mcp-cli-9/src/embed.ts
  • CharacterTextSplitterで、chunk処理する。
  • mxbai-embed-large: ベクトル化
async function Embed(content, meta) {
  const chunkSizeMax = 500; 
  const textSplitter = new CharacterTextSplitter({
    chunkSize: chunkSizeMax,
    chunkOverlap: 0,
  });
  const texts = await textSplitter.splitText(content);
  for (let i = 0; i < texts.length; i++) {
    let target = texts[i];
    const res = await ollama.embed({
      model: "mxbai-embed-large",
      truncate: true,
      input: target,
    });
    meta.model = res.model;
    const f = new Float32Array(res.embeddings.flat())
    saveToDb(f, meta, target);
  }
return;

}

https://github.com/kuc-arc-f/mcp_client_7ex/blob/main/mcp-cli-9/src/embed.ts


  • mcp-cli-9/src/tools/searchRag.ts
  • generateText : vector database から取得した。検索対象を送信

https://github.com/kuc-arc-f/mcp_client_7ex/blob/main/mcp-cli-9/src/tools/searchRag.ts


### RAG 検索画面、 Electron + React

  • RAG 検索画面の追加、electron メモになります。
  • 前回の、RAG CLI操作の続編になります。
  • CLIの 作成した。vector database(SQLite) を使用できます。
  • CLI版の検索部分に electron画面に、実装する。
  • Ollama mxbai-embed-largeも、使用します。

### 構成

  • electron
  • React
  • LLM: gemini
  • Ollama: mxbai-embed-large model
  • node20
  • @langchain/textsplitters
  • Vercel AI SDK
  • SQLITE

  • .env
  • VITE_GOOGLE_GENERATIVE_AI_API_KEY: gemini の鍵
  • VITE_VECTOR_DB_PATH: vector database の配置パス
VITE_GOOGLE_GENERATIVE_AI_API_KEY="api-key"
#RAG
VITE_VECTOR_DB_PATH="./embedblob.db"

  • start
yarn start

### 書いたコード


  • 検索処理, 前のCLI版と ほぼ同様です。
  • mcp-client-ui-9/src/tools/searchRag.ts

https://github.com/kuc-arc-f/mcp_client_7ex/blob/main/mcp-client-ui-9/src/tools/searchRag.ts


### Next.js +Gemini , RAG ローカル検索

  • 簡易版 RAG 検索画面の追加、Next.js 試作になります。
  • 前回の、RAG CLI操作の続編になります。
  • CLIの 作成した。vector database(SQLite) を使用できます。
  • 今回は、 LLM: geminiのみ。

### 構成

  • Next.js
  • React
  • LLM: gemini
  • node20
  • @langchain/textsplitters
  • Vercel AI SDK
  • SQLITE

  • .env
  • GOOGLE_GENERATIVE_AI_API_KEY: gemini の鍵
  • GOOGLE_API_KEY: gemini text-embedding-004, の鍵
GOOGLE_GENERATIVE_AI_API_KEY="api-key"
GOOGLE_API_KEY="api-key"

  • start
yarn dev

### 書いたコード


  • 検索処理
  • mcp-next-4/app/tools/searchRag.ts

https://github.com/kuc-arc-f/mcp_client_7ex/blob/main/mcp-next-4/app/tools/searchRag.ts