前回の記事では、現代AIの心臓部である「トランスフォーマー」の仕組みと、個人開発における現実的な戦略についてお話ししました。
LLMという巨大な知能を、いかにしてコストを抑えつつ「自分専用」に育て上げるか。
その答えが、今回から始まる「外部記憶」の実装です。
どれほど賢いAIであっても、学習データに含まれていない最新の攻略情報や、あなただけが持つプライベートな知識をそのまま語ることはできません。
そこで必要になるのが、AIがいつでも参照できる「教科書」を、あなたのPCの中に構築することです。
「データベースなんて、設定が難しそうだし、高価なサーバーが必要なのでは?」
そのように思われる読者にとって、今回の内容は驚きの連続になるかもしれません。
今回私たちが手にするのは、Pythonライブラリを一つ導入するだけで構築できる、軽量かつ強力な「ベクトルデータベース(ChromaDB)」です。
本記事では、言葉を「数値」に変換し、AIが意味を理解して情報を探し出す「埋め込み(Embedding)」のマジックを、あなたのローカルPC環境で実際に動かしながら学んでいきます。
目次
第1章:はじめに ── なぜLLMには「外部記憶」が必要なのか
LLM(大規模言語モデル)を使っていると、もっともらしい嘘をつく「ハルシネーション」や、昨日起きたばかりの出来事を知らないという現象に直面します。
これらは、モデルが持つ知識が「学習を終えた時点」で固定されているために起こる、構造的な課題です。
1.1. 「暗記」に頼る限界と「カンニング」の有効性
AIに新しい知識を授けるには、大きく分けて2つの方法があります。
- ファインチューニング(再学習): AIの脳そのものを書き換えて知識を「暗記」させる。
- RAG(検索拡張生成): AIに「教科書」を渡し、質問のたびに必要な箇所を「カンニング」させる。
個人の開発環境において前者は非常に高いコスト(計算資源)がかかります。
一方、後者のRAGは、今回紹介するベクトルデータベースさえあれば、あなたのPC一台でリーズナブルに、かつ正確な情報提供を実現できるのです。
1.2. ベクトルデータベースがAIの「記憶」を司る
従来のデータベース(SQLなど)は、「特定の単語が含まれているか」などといったキーワードの一致で検索を行います。
しかし、これでは「勇者の弱点は?」という問いに対し、「主人公の苦手な属性は火です」という、言葉が違うけれど意味が同じ回答を探し出すことができません。
ベクトルデータベースは、言葉を「意味の空間上の位置(ベクトル)」として保存します。
これにより、言葉の表面的な一致ではなく、「意味の近さ」で情報を引き出すことが可能になります。
これが、AIに「文脈に沿った記憶」を持たせるための仕組みです。
第2章:埋め込み(Embedding)の仕組み ── 言葉を「地図上の座標」に変える
コンピューターは「言葉」そのものを理解することはできませんが、「数値」の計算は大の得意です。
埋め込み(Embedding)とは、一言で言えば「言葉の意味を、多次元地図上の座標(数値のリスト)に変換する技術」のことです。
2.1. 意味が近いと、数値も近くなる
私たちは、言葉の意味を感覚的に捉えています。例えば「リンゴ」と「バナナ」はどちらも「果物」なので近い言葉だと感じますが、「リンゴ」と「タイヤ」は全く別物だと判断します。
埋め込みの技術を使うと、これらの言葉は例えば以下のような数値(ベクトル)に変換されます。
- リンゴ:
[0.9, 0.1, 0.8, ...] - バナナ:
[0.8, 0.2, 0.7, ...] - タイヤ:
[-0.5, 0.9, -0.1, ...]
この数値は、いわば「意味の空間」における住所です。
「リンゴ」と「バナナ」の数値が似ているのは、この地図上でお互いに近い場所に住んでいることを示しています。
面白いことに、この「住所」を使えば、言葉の計算もできるようになります。
有名な例として、「王様」のベクトル(数値)から「男性」の数を引き、「女性」の数を足すと、その結果は「女王様」のベクトルに限りなく近くなるという性質があります。
このように、言葉の「意味」を数学的に扱えるようになるのです。
2.2. Embeddingモデルの役割 ── 変換を担当する専用AI
テキストをベクトルの数値に変換してくれるのが、Embeddingモデルと呼ばれる専用のAIです。
これまでの伝統的な機械学習では、「この単語が出たら1、出なければ0」といった単純な変換(One-hotエンコーディング)を人間が設計していましたが、Embeddingモデルは以下のことを自動で行ってくれます。
- 文脈の理解: 「銀行(Bank)」と「土手(River Bank)」のように、同じワードを含んでいながらも文脈によって異なる意味を持つ言葉を、別の数値として描き分けます。
- 高次元での特徴抽出: 実際には、言葉の住所は数次元ではなく、数百〜数千次元という極めて複雑な地図上に配置されます。「性別」「食べ物かどうか」「高級感」「時代背景」といった膨大な要素(次元)を、AIが勝手に分析して数値化してくれるのです。
- 効率的な圧縮: 何万種類もある単語を、数百個程度の数値リストにギュッと凝縮します。これにより、膨大な知識を効率よく検索可能な形に変換できます。
つまり、私たちが攻略Wikiなどの文章をベクトルデータベースに保存するとき、裏側ではこのEmbeddingモデルが「文章をAIが計算しやすい座標に翻訳する」という重要な仕事をしてくれているということです。
第3章:ChromaDBの導入 ── Pythonだけで作れる軽量な記憶装置
ここからは、実際にベクトルデータベースを自身のPCにインストールして、使えるようにしてみましょう。
3.1. なぜChromaDBなのか ── 設定不要、サーバー不要のメリット
数あるベクトルデータベースの中で、なぜ今回ChromaDBを選ぶのか。その最大の理由は、使っているPython環境に「部品を追加する感覚」で導入できる手軽さにあります。
通常、データベースを導入するとなると「専用のサーバーソフトをインストールして、パスワードを設定し、常に裏側で起動させておく」などの手間がかかります。
しかし、ChromaDBは「組み込み型(Embedded)」という方式を採用しており、以下のメリットがあります。
- pip一発で完了: 必要なインストーラーを検索し、ダウンロードしてからインストールといった手順は不要です。
- サーバー管理不要: あなたの書いたPythonプログラムが動くときだけ、一緒に起動します。
- データはただの「フォルダ」: 保存されたデータは、指定したフォルダの中にファイルとして書き込まれます。バックアップや移動も、そのフォルダをコピーするだけです。
3.2. インストールと準備 ── pip install で始める開発環境
それでは、実際にお手元のターミナル(またはAntigravity環境のコンソール)で、以下のコマンドを実行してみましょう。
pip install chromadbこれだけで準備は完了です。
もし以前のシリーズから Antigravity を使っている方であれば、ライブラリの追加によって開発がさらに加速します。
ChromaDBは内部で「ベクトル計算を高速化するライブラリ」なども自動的にインストールしてくれますが、これらすべてがあなたのPCのCPUパワーだけで十分に動作するように設計されています。
これで、AIのための「記憶の器」が手元に用意されました。
第4章:【実践】ベクトルデータベースを動かしてみる
ここでは、実際にChromaDBを動かすための最小限かつ最も重要なステップを解説します。
お手元のPython環境(Antigravity、VS Code 等)で実行できる形式で進めます。
任意の作業フォルダの中に vector_test.py というファイルを作成して、コードを書いていきましょう。
4.1. ファイル構成のイメージ
本章の作業を進めると、フォルダ内は次のような構成になります。
project_folder/ # 自身の環境で選んだプロジェクト用のフォルダ
├── vector_test.py # 今から作成するメインファイル
└── my_ai_memory/ # 実行後に自動生成されるデータベースフォルダ4.2. プログラムの実装(vector_test.py)
新規ファイル vector_test.py に、以下のコードをコーディングしてください。
(コピー&ペーストでもOKです。)
import chromadb
# 1. データの保存先を指定してクライアントを起動
client = chromadb.PersistentClient(path="./my_ai_memory")
# 2. 「game_wiki」という名前の棚(コレクション)を作成
collection = client.get_or_create_collection(name="game_wiki")
# 3. 攻略情報を覚えさせる(追加する)
documents = [
"勇者の剣は火属性の攻撃力を1.5倍にする効果がある。",
"氷の洞窟に出現するボスは、火属性の攻撃が弱点である。",
"回復魔法の『ヒール』は、使用者の精神力に比例して回復量が増える。"
]
collection.add(
documents=documents,
ids=["doc1", "doc2", "doc3"]
)
print("--- 情報の保存が完了しました ---")
# 4. 意味による検索を実行
query = "氷のボスを倒すのに有効な手段は?"
results = collection.query(
query_texts=[query],
n_results=1
)
print(f"質問: {query}")
print(f"AIが見つけた回答: {results['documents'][0]}")4.3. 実行と結果の確認
ターミナル(コンソール)で以下のコマンドを実行します。
python vector_test.py--- 情報の保存が完了しました ---
質問: 氷のボスを倒すのに有効な手段は?
AIが見つけた回答: ['氷の洞窟に出現するボスは、火属性の攻撃が弱点である。']4.4. プログラムコードの解説
今回作成したのはほんの短いプログラムでしたが、その中には、現代のAI検索に欠かせない3つの重要なプロセスが凝縮されています。
- コレクション(棚)の作成:
get_or_create_collectionは、図書館でいう「特定のジャンルの棚」を作る作業です。今回はゲーム攻略情報を入れたので、他のアプリを作る際は「日記」や「社内文書」など、棚を分けて管理できます。 - 自動Embedding(埋め込み):
collection.addを実行した際、ChromaDBは内部で「テキストをベクトル(数値のリスト)に変換する」という作業を自動的に行っています。これにより、私たちは難しい計算式を書くことなく、文章を「意味の空間」に配置することができたのです。 - 近似最近傍探索(ANN):
collection.queryを実行したとき、AIは「質問文のベクトル」と「保存されたデータのベクトル」の距離を計算しています。- 質問:「氷のボスを倒すには?」
- ヒットしたデータ:「……火属性が弱点である」 この2つは言葉自体は違いますが、意味の空間では「非常に近い場所」にあります。AIは一番近い場所にあるデータを「正解」として引き出したのです。
第5章:まとめ ── 次回、ベクトルデータベースとRAGの世界へ
今回の実践で、自身のPCの中に「意味を理解して情報を引き出す」ためのインフラが整いました。
5.1. 本記事の振り返り
- 外部記憶の必要性: LLMの「物忘れ」を防ぐには、暗記(再学習)よりもカンニング(RAG)が効率的。
- 埋め込み(Embedding): 言葉を「意味の空間上の座標」に変えることで、曖昧な質問にも対応できる。
- ChromaDBの威力: Antigravity環境なら
!pipだけで導入でき、ローカル環境で爆速な検索を可能にする。
5.2. 次なるステップ:知能と記憶の「合体」
今の状態では、まだ「データベースが関連する文章を見つけてきた」だけです。
このままでは、AIが自然な言葉で回答してくれるわけではなく、拡張性もありません。
そこで次回の記事では、いよいよデータベースとAIを接続します。
2026年現在、APIの利用制限やプライバシーの観点から、あえて「クラウドに頼らない開発」が注目を集めつつあります。
APIキー不要、完全無料で無制限に使える「ローカルLLM(Ollama)」を脳として採用し、自分だけのプライベートRAGを完成させましょう。

コメント