自分の過去の会話を、自分のPCに思い出させた土曜日 ― 半分着地だったローカル業務RAGを、最後まで着地させる
こんにちは!YaroTechです。
先週の土曜(Day308)、私はローカル業務RAG ― 自分の手元のPCだけで、過去の資料を検索して答えさせる仕組み ― を作ろうとして、「半分着地」で記事を締めました。Surface Laptop(Snapdragon)では、肝心のAPIが動かなかったからです。
そして昨日(Day314)、舞台をIntelの ThinkPad X1 Carbon に移したら、その止まっていたAPIが一発で通った。「繋げる道が開いた」ところまでは見えました。でも、それはまだ"道が開いた"だけ。実際に過去の会話を読み込ませて答えさせる、という本番はやっていなかったっちゃ。
だから今日は、いよいよ残り半分を着地させにきました。題材は ― 私自身の、過去の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のときも使った繋ぎ方です。
入力した設定値(実機)はこちら。
APIキー: 空のままでOK
チャットモデル名: ここが今日の山場(つまずき1で後述)
コンテキスト長: 8192

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

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

これ、全部、数日前の私が実際にClaudeと話していた中身です。ネットには一切出さず、手元のPCの中だけで、過去の自分の会話を検索して、要点をまとめて答えてくれた。これが、Day308からやりたかったことだべさ。
生成中にタスクマネージャーを開くと、Intel Arc GPUがしっかり動いて、GPUメモリを約6.4GB使っていました。厨房が本気で働いている証拠です。

クロ助:「……思い出してくれたっちゃ。私の過去のおしゃべりを、ちゃんと」
コロ:「全部着地だがね。おめでとう、だわ」
つまずきポイントと解決策
つまずき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に、残り半分を着地させにきた土曜日。今日わかったことを整理します。
Foundry Local v0.8.119は、生成(チャット)は通るが、Embeddings(背番号付け)はまだ使えない。だから「生成はFoundry Local、背番号付けはAnythingLLM内蔵」の役割分担が、今日いちばんの設計判断になった
RAGが `Premature close` で落ちるのは、モデルが小さすぎて長い入力を捌けないことが原因のことがある。1.5B(NPU)→ 7B(GPU)に上げたら通った。RAGの長文処理はGPU版が向く
ポートは起動ごとに変わる/勝手にエージェントモードに入る/qwenは日本語指示が要る ― 動く前提のチュートリアルには載っていない、実機ならではの落とし穴
そして、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ニュース
いいなと思ったら応援しよう!
記事がお役に立てたなら嬉しいです!
いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。
あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨
一緒に羽ばたき続けましょう!