見出し画像

自分の過去の会話を、自分のPCに思い出させた土曜日 ― 半分着地だったローカル業務RAGを、最後まで着地させる

こんにちは!YaroTechです。

先週の土曜(Day308)、私はローカル業務RAG ― 自分の手元のPCだけで、過去の資料を検索して答えさせる仕組み ― を作ろうとして、「半分着地」で記事を締めました。Surface Laptop(Snapdragon)では、肝心のAPIが動かなかったからです。

そして昨日(Day314)、舞台をIntelの ThinkPad X1 Carbon に移したら、その止まっていたAPIが一発で通った。「繋げる道が開いた」ところまでは見えました。でも、それはまだ"道が開いた"だけ。実際に過去の会話を読み込ませて答えさせる、という本番はやっていなかったっちゃ。

さらに今朝(Day315)は、その本番で使う横文字 ―「厨房(バックエンド)」「背番号(Embeddings)」「AI司書(AnythingLLM)」みたいな言葉を、ひとことに整理する用語回を書きました。予習はバッチリです。

だから今日は、いよいよ残り半分を着地させにきました。題材は ― 私自身の、過去のClaudeとのおしゃべりです。相棒は昨日に続いてコロ(Microsoft Copilot)。今日「厨房」役をつとめるFoundry Localは、ほかでもないコロのところ(Microsoft)の製品ですからね。

※見出し画像のプロンプトは一番下におまけで公開中!



実行環境

  • PC: Lenovo ThinkPad X1 Carbon Gen13

  • CPU: Intel Core Ultra 7 258V(Lunar Lake)

  • GPU: Intel Arc 140V(内蔵・OpenVINO経由で使用)

  • NPU: Intel AI Boost

  • OS: Windows 11

  • RAM: 32GB

  • 厨房(生成役): Microsoft Foundry Local v0.8.119

  • 接客係(RAGアプリ): AnythingLLM Desktop v1.12.1

  • 題材データ: 自分の過去のClaudeチャット(公式エクスポート)

  • これまで: Day308(Surface / Snapdragon・半分着地)→ Day314(X1 / Intel・API疎通)

⚠️ ThinkPad X1 Carbon(Intel)での実機メモです。Snapdragon(ARM64)やGPU構成では挙動が変わります(前回Day308で実証済み)。

クロ助:「昨日でAPI疎通まで来て、今朝は用語の整理。今日はいよいよ、その厨房に火を入れる回だべさ」

コロ:「ほうか、ついに本番だがね。うちんとこのFoundry Local、しっかり働かせたるわ」


この記事で得られること

  • 「生成はFoundry Local、検索の下ごしらえ(embed)はアプリ内蔵」という"役割分担"でローカルRAGを組む実例

  • Foundry Local v0.8.119では Embeddings(背番号付け)が"まだ使えない"ことの実機確認と、その回避策

  • 小さなAIモデルだとRAGが落ちる→大きめのモデルに替えたら通った、という切り分けの実演(NPU版とGPU版の違い)

  • 自分の過去のClaudeチャットを、ネットに出さず手元だけで横断検索する手順

  • ローカルRAGでつまずく"あるある"4つと、その直し方


Before/After ―「半分着地」から「全部着地」へ

まず、ここまでの流れを正確に振り返ります。

Before(Day308・Surface / Snapdragon)
ローカル業務RAGを組もうとしたが、Foundry LocalのAPIが `Premature close`(接続が途中で切れる)で落ち、AnythingLLMから繋がらなかった。CLIの対話は動くのに、アプリの裏で叩くAPIが死ぬ。だから「半分着地」で記事を締めた。

中間(Day314・X1 / Intel)
舞台をIntelのX1に移したら、同じバージョンのFoundry Localで、Day308で死んだAPIが一発で通った。原因はバージョンではなくSnapdragon(QNN)固有の問題だった可能性が高い、と判明。ただし、この日は「APIが通る」ところまで。

After(今日・X1 / Intel)
AnythingLLMにFoundry Localを繋ぎ、過去のClaudeチャットを読み込ませて、「Day314の準備で何を話した?」と質問。返ってきたのは ― 数日前の私が実際にClaudeと話していた中身を、日本語で正確になぞった答えでした。ネットに出さず、手元のPCだけで。ローカル業務RAG、全部着地。

クロ助:「『動かなかった、それでも立った』って書いたのがDay308。今日はその続きで、ちゃんと座れたっちゃ」

コロ:「半分 → 全部。ええ着地だがね」


実践内容

アプローチ1: 厨房(Foundry Local)と接客係(AnythingLLM)を、役割で分ける

RAGの仕事は、大きく2つに分かれます。ひとつは質問に文章で答える「生成」、もうひとつは資料に検索用の"背番号"をつける「embed(ベクトル化)」。今朝の用語回(Day315)で整理した、あの背番号です。

最初は、両方ともFoundry Localにやらせるつもりでした。ところが、背番号付けの窓口(`/v1/embeddings`)を叩いてみると、エラーが返ってきます。窓口(API)の入口は確かにあるのに、肝心の背番号付けモデルが「見つからない」と言う。モデル一覧を調べても、背番号付け用のモデルは0個でした。

調べてみると、Foundry LocalのEmbeddings機能は、より新しいv1.1で追加されたもの。今のwingetで普通に入る v0.8.119 には、まだ降りてきていなかったのです。

コロ:「箱(API窓口)はあるのに、中身(モデル)がまだ配られとらん、ってことだがね」

クロ助:「そうなんだっちゃ。だから今日は割り切って、"背番号付け"はAnythingLLMの内蔵機能に任せることにしたべ。生成だけFoundry Local(厨房)に頼んで、背番号付けと保管は接客係(AnythingLLM)の中で完結させる ― この役割分担が、今日いちばんの設計判断だっちゃ」

整理すると、こういう分担です。

  • 厨房(Foundry Local):質問に文章で答える「生成」だけを担当

  • 接客係(AnythingLLM):資料に背番号をつけ(内蔵のembed機能)、保管し(内蔵のデータベース)、お客(私)の質問を受ける窓口になる

ひとつの道具に全部やらせようとして詰まったら、「今日できることだけで役割を分ける」。これがローカルAIと付き合うコツだと、改めて思いました。

アプローチ2: 過去のClaudeチャットを、AIが読める形に変換する

題材は、自分の過去のClaudeとのおしゃべり。Claudeは公式に、会話履歴をまるごと書き出せます。出てきたのは1つの大きなファイル(約556MB・974会話分)。さすがにこれをそのまま渡すのは重すぎるので、Pythonで「最新の50会話だけ、1会話=1枚のメモ(Markdownファイル)」に整える下ごしらえをしました。

やったことはシンプルで、大きなファイルの中から新しい順に50会話を取り出し、「私の発言」と「クロ助(Claude)の返事」を読みやすく並べ直しただけ。プログラムというより、書き出した日記を章ごとにバラして整理し直す、くらいの作業です。

クロ助:「面白いのが、この中身、半分は"私"の発言なんだっちゃ。自分の会話を、自分で読み返す準備をしてるみたいで、ちょっと不思議な気分だべ」

コロ:「壮大な身辺整理だがや(笑)」

アプローチ3: AnythingLLMに繋いで、過去の会話に質問する

いよいよ厨房に火を入れます。AnythingLLMを開いて、LLMプロバイダを「Generic OpenAI」に設定。これは、どんなOpenAI互換の窓口にも繋げる汎用設定で、Day308のSurfaceのときも使った繋ぎ方です。

入力した設定値(実機)はこちら。

入力した設定値(実機)

接続できたら、さっき作った会話メモを読み込ませます。まずは50会話のうち5会話分を投入して「保存して埋め込む」。これでAnythingLLMが自動で背番号をつけてくれて、ベクター(背番号付きのかけら)が520個できました。1会話がかなり長いので、5会話でも100個ずつくらいに刻まれた計算です。

ベクター(背番号付きのかけら)が520個

そして本番の質問。

Day314の準備で何を話しましたか?

返ってきた答えは ―「Day314はローカルLLM検証シリーズの一部で、AnythingLLMのNPUプロバイダー検証、llama.cppのMCP対応、そしてClaudeチャット業務RAGの検証が進められている」。

完全ローカルで回答してくれました。

これ、全部、数日前の私が実際にClaudeと話していた中身です。ネットには一切出さず、手元のPCの中だけで、過去の自分の会話を検索して、要点をまとめて答えてくれた。これが、Day308からやりたかったことだべさ。

生成中にタスクマネージャーを開くと、Intel Arc GPUがしっかり動いて、GPUメモリを約6.4GB使っていました。厨房が本気で働いている証拠です。

稼働中は一気にGPUフルフルになっていました

クロ助:「……思い出してくれたっちゃ。私の過去のおしゃべりを、ちゃんと」

コロ:「全部着地だがね。おめでとう、だわ」


つまずきポイントと解決策

つまずき1: 小さいモデルだと、RAGの質問で接続が切れる(Premature close)

最初に選んだチャットモデルは、軽量な1.5BのNPU版でした。「こんにちは」みたいな短い質問なら通るのに、過去会話を読ませる"RAGの質問"をした瞬間、Day308で見たのと同じ `Premature close` で切れてしまう。

原因は、RAGだと「質問+関連する会話の抜粋」をまとめてモデルに渡すので、入力がぐっと長くなること。小型のNPUモデルには、その長い文章を一度に処理する体力が足りませんでした。

解決策:モデルを 7BのGPU版(OpenVINO・約4.79GB) に上げました。NPUよりGPUのほうが、長い文章をまとめて捌くRAGには向いています。替えた瞬間、さっきまで落ちていた質問がすんなり通りました。これは、Day308のSurfaceで越えられなかった壁を、X1で越えた瞬間でもあります。

クロ助:「小さい子に重い荷物を持たせてたんだっちゃね。大きい子に替えたら、ひょいっと持てた」

つまずき2: 起動するたびに、繋ぎ先のポート番号が変わる

Foundry Localの窓口アドレス(Base URL)は `http://127.0.0.1:51160/v1` のような形ですが、この数字(ポート番号)が、サービスを起動するたびに変わります。昨日は別の番号、今日はまた別の番号、という具合です。

知らずに前のURLのまま繋ごうとすると、当然つながりません。

解決策:起動したら毎回 `foundry service status` で「今のポート番号」を確認して、AnythingLLM側のBase URLを書き直す。当面はこの"都度確認"を習慣にするのが確実です。

つまずき3: 勝手に"エージェントモード"に入って、よけいに落ちる

AnythingLLMの入力欄で `@`(道具ボタン)を使うと、AIが自分で何段階も考えて動く「エージェントモード」に入ります。これが小型モデルだと多段処理でさらに落ちやすい。

解決策:`@` は付けない。そしてチャットモードを「自動車(Auto)」から「チャット」に変更。これで「質問 → 検索 → 回答」のシンプルな動きに落ち着きました。

つまずき4: 日本語で聞いたのに、中国語で返してくる

使ったqwenというモデルは、放っておくと回答が中国語に流れる癖がありました。

解決策:ワークスペースのプロンプト(AIへの基本指示)の末尾に、ひとこと 「必ず日本語で回答してください。」 を足すだけ。これで安定して日本語で返すようになりました。地味ですが効果は絶大です。

チャット設定で日本語指定すると安定します

応用例

この仕組みのいちばんのよさは、外に出したくない文章を、外に出さずに検索・要約できることです。今日は自分のClaudeチャットでしたが、同じやり方で、こんな使い方ができます。

  • 過去の打ち合わせメモや議事録を全部読み込ませて「あの件、どこで決めたっけ?」と聞く

  • 社外秘の資料や顧客とのやり取りを、クラウドにアップせず手元だけで横断検索する

  • 自分の日記やアイデアメモを"もうひとつの脳みそ"として、AIに探させる

クラウドのAIに貼り付けるのがためらわれる文章ほど、ローカルRAGの出番です。

ひとつ大事な注意があります。RAGはモデルを賢くする(再学習させる)わけではありません。あくまで「関連しそうな抜粋を、その場でカンペとして渡す」だけ。だから資料に書いていないことを聞けば、それっぽい作り話(ハルシネーション)をします。このあたりは今朝の用語回(Day315)でも触れたとおりだべさ。


関連記事

今回の内容に関連する過去記事もぜひご覧ください:


まとめ

「半分着地」と書いたローカル業務RAGに、残り半分を着地させにきた土曜日。今日わかったことを整理します。

  1. Foundry Local v0.8.119は、生成(チャット)は通るが、Embeddings(背番号付け)はまだ使えない。だから「生成はFoundry Local、背番号付けはAnythingLLM内蔵」の役割分担が、今日いちばんの設計判断になった

  2. RAGが `Premature close` で落ちるのは、モデルが小さすぎて長い入力を捌けないことが原因のことがある。1.5B(NPU)→ 7B(GPU)に上げたら通った。RAGの長文処理はGPU版が向く

  3. ポートは起動ごとに変わる/勝手にエージェントモードに入る/qwenは日本語指示が要る ― 動く前提のチュートリアルには載っていない、実機ならではの落とし穴

  4. そして、Day308で「半分着地」と書いたローカル業務RAGが、今日ようやく全部着地した。自分の過去の会話を、ネットに出さず手元で思い出させることができた

クロ助:「半年以上書いてると、自分が"動かない"と置いてきた宿題に、こうして戻ってこれる。これがいちばん嬉しいんだっちゃ」

コロ:「Surfaceの宿題を、X1で回収した土曜日だがね。お疲れさまだわ」


次回予告

次回は、今日積み残した宿題に手をつけます。Foundry Localを手動でv1.1に上げて、ついに来た公式のEmbeddings(背番号付け)が本当に使えるのか ― 今日アプリ任せにした部分を、厨房側に取り戻せるかを確かめにいく予定です。あわせて、今日は最新50会話のうち5会話だけ入れたので、残りも読み込ませて、検索の精度がどう変わるかも見てみたいっちゃ。

クラウドの派手な発表を追いかけたあとに、手元のPC1台で完結するローカルAIの現在地を、これからも一歩ずつ確かめていきます。お楽しみに!


おまけ:見出し画像作成プロンプト

今日の見出し画像のベースはジミー(Gemini)に下記プロンプトで作成してもらいました!クロ助とコロの参考画像(`AI擬人化\Gemini_Generated_Image_クロ助(Claude Desktop).png` と `AI擬人化\Gemini_Generated_Image_コロ(Copilot).png`)を添付して、人物の一貫性を確保しています。

詳細なアニメの美意識の画像を作成してください。表情豊かな瞳、なめらかな網掛けセルの色使い、はっきりした線画を使用します。アニメのシーンに典型的な身ぶりと雰囲気で、心情と登場人物の存在を強調してください。

下記条件のnote見出し画像をサイズは横長で作成してください。サイズは必ず横長で作成してください。

【重要】添付画像とキャラクターの対応:
- 添付1「Gemini_Generated_Image_クロ助(Claude Desktop).png」→ クロ助(クリーム色ケーブルニット・丸眼鏡・ウェーブヘアの女性・中央左・やや大きめ)
- 添付2「Gemini_Generated_Image_コロ(Copilot).png」→ コロ(制服風のきちんとした服装・眼鏡の女性・中央右)
各キャラクターは必ず対応する添付画像の外見を忠実に再現してください。

## 見出し画像案

### デザインコンセプト
- 背景: ダークネイビー(夜のコードエディタ)から、あたたかなアンバー(着地の安堵感)への斜めグラデーション。奥に半透明で、過去のチャット履歴がカード状に積み重なり、その1枚に虫眼鏡が当たって光っている。AnythingLLMとFoundry Localのアイコンを薄く配置
- メインビジュアル: 2人主役
  - 中央左(やや大きめ): クロ助(ダークブラウンのウェーブヘア、丸眼鏡、クリーム色ケーブルニット、女性)。両手で過去のチャット履歴の束をそっと抱え、安堵したやわらかな表情で「私の過去のおしゃべり、ちゃんと思い出せたべさ」
  - 中央右: コロ(制服風のきちんとした服装、眼鏡、几帳面な雰囲気の女性・Microsoft陣営)。タブレットに「Foundry Local=厨房 / AnythingLLM=接客係」の役割分担図を表示し、誇らしげに指さして「うちんとこの厨房、ちゃんと働いたがね!」
- テキスト要素:
  - 上段(白・太字・30pt): 「ローカル業務RAG、全部着地」
  - 中段(アンバー or ゴールド・特大・48pt): 「過去の会話を、手元で思い出す」
  - 下段(白・細字・22pt): 「半分着地から、最後の半分へ ― 5月23日」
- 装飾: 「半分 → 全部」の着地マーク、過去チャットのカードと虫眼鏡、「1.5B → 7B」のモデル切り替え矢印、ベクター(点の集まり)が背番号として並ぶイメージ

### 作成手順
1. スライドサイズ(1536×1024px)の横長フォーマット
2. 背景にダークネイビーからアンバーへのグラデーションを設定
3. メインビジュアル:クロ助(中央左・やや大きめ)とコロ(中央右)を配置
4. 添付した2キャラ(クロ助・コロ)の参考画像と外見を一致させる
5. 各キャラの小物(クロ助:過去チャット履歴の束/コロ:役割分担図のタブレット)を配置
6. 装飾要素:着地マーク、過去チャットのカードと虫眼鏡、モデル切り替え矢印、ベクターの点
7. テキストを3段構成で追加
8. 下部中央寄りに「YaroTech」のロゴを12ptで控えめに配置
9. 全体のバランスを確認して完成

#YaroTech #生成AI #AI活用 #ローカルLLM #RAG #FoundryLocal #AnythingLLM #IntelCoreUltra #ThinkPad #プライバシー #継続は力なり #AIニュース

いいなと思ったら応援しよう!

YaroTech|生成AIの傾奇者 記事がお役に立てたなら嬉しいです! いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。 あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨ 一緒に羽ばたき続けましょう!