目次
- 0. はじめに
- 1. 概要
- 2. 環境構築
- 3. pgvector拡張の導入
- 4. Python環境の準備
- 5. main.pyのコード
- 6. 実行結果
- 7. トラブルシューティングまとめ
- 8. まとめ
- 9. 今後の発展
0. はじめに
本記事では、PostgreSQL + pgvector + OpenAI Embedding API を組み合わせて
ローカルで動作する「AI記憶データベース(※1)」を構築する手順をまとめました。
最終的には、Pythonスクリプトを実行して次のような出力が得られるところまでをゴールとします。
✅ 記憶保存: Z世代に人気のSNSマーケティング事例をまとめた記事。
✅ 記憶保存: SEO対策におけるキーワードクラスタリングの方法を解説。
✅ 記憶保存: 生成AIを使った自動キャッチコピー生成の最新トレンド。
🔎 検索結果:
- Z世代に人気のSNSマーケティング事例... (score=0.073, trust=0.50)
- SEO対策におけるキーワードクラスタ... (score=-0.204, trust=0.50)
- 生成AIを使った自動キャッチコピー生... (score=-0.209, trust=0.50)
1. 概要
構成図
目的
- AIが“文章の意味”を数値化して、似た内容の情報を探す。そのために...
- OpenAI Embedding APIを使い、文章をベクトル化( embedding:「埋め込み」の意)
- pgvector拡張を利用し、PostgreSQL内で意味検索
- 「AI記憶の登録・検索」が可能な最小構成を作成
- 類似度を
score、記憶の信頼度をtrust_scoreとして実装
動作イメージ
- 「SNSキャンペーンの成功例」→ embedding化(1536次元ベクトル)
- DB内のすべての embedding と比較して類似度を計算
- 最も近い内容(意味的に似ている文)をスコア順に出力
2. 環境構築
(1) PostgreSQL 18 のインストール
- PostgreSQL公式サイト から Windows用インストーラを取得
- インストール時に以下を確認
- 「Command Line Tools」を有効化
- Port: 5432とした
(2) PATH設定
環境変数の Path に以下を追加:
C:\Program Files\PostgreSQL\18\bin
(3) 動作確認
psql --version
psql (PostgreSQL) 18.0
3. pgvector拡張の導入
(1) ダウンロード
- GitHubなどから pgvector for PostgreSQL 18 のWindows版バイナリを取得
(例:vector.v0.8.1-pg18.zip)
(2) ファイル配置
| ファイル | 配置先 |
|---|---|
vector.dll |
C:\Program Files\PostgreSQL\18\lib\ |
vector.control, vector--0.8.1.sql
|
C:\Program Files\PostgreSQL\18\share\extension\ |
(3) 拡張の有効化
psql -U postgres -d ai_memory
CREATE EXTENSION vector;
\dx
→ vector | 0.8.1 と表示されればOK。
4. Python環境の準備
(1) ライブラリインストール
pip install psycopg2-binary openai numpy
(2) OpenAI SDKのアップデート
pip install --upgrade openai
5. main.py のコード
import psycopg2
import numpy as np
from openai import OpenAI
# ===== 接続設定 =====
conn = psycopg2.connect(
dbname="ai_memory",
user="???",
password="???",
host="127.0.0.1",
port="5432"
)
cur = conn.cursor()
# ===== pgvector拡張を有効化 =====
cur.execute("CREATE EXTENSION IF NOT EXISTS vector;")
cur.execute("""
CREATE TABLE IF NOT EXISTS memory (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536),
trust_score FLOAT DEFAULT 0.5,
decay_lambda FLOAT DEFAULT 0.001,
ttl_seconds INT DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now()
);
""")
conn.commit()
# ===== Embedding生成関数 =====
client = OpenAI(api_key="YOUR_API_KEY")
def embed_text(text: str) -> np.ndarray:
resp = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return np.array(resp.data[0].embedding)
# ===== 記憶を登録 =====
def save_memory(text, trust=0.5):
emb = embed_text(text)
cur.execute("INSERT INTO memory (content, embedding, trust_score) VALUES (%s, %s, %s)", (text, emb.tolist(), trust))
conn.commit()
print("✅ 記憶保存:", text[:30])
# ===== 意味で検索 =====
def search_memory(query, k=3):
q_emb = embed_text(query)
cur.execute("""
SELECT content, trust_score, embedding <-> %s::vector AS distance
FROM memory
ORDER BY distance ASC
LIMIT %s
""", (q_emb.tolist(), k))
results = cur.fetchall()
print("\n🔎 検索結果:")
for r in results:
print(f" - {r[0][:30]}... (score={1-r[2]:.3f}, trust={r[1]:.2f})")
# ===== 使ってみる =====
save_memory("Z世代に人気のSNSマーケティング事例をまとめた記事。")
save_memory("SEO対策におけるキーワードクラスタリングの方法を解説。")
save_memory("生成AIを使った自動キャッチコピー生成の最新トレンド。")
search_memory("SNSキャンペーンの成功例")
6. 実行結果
✅ 記憶保存: Z世代に人気のSNSマーケティング事例をまとめた記事。
✅ 記憶保存: SEO対策におけるキーワードクラスタリングの方法を解説。
✅ 記憶保存: 生成AIを使った自動キャッチコピー生成の最新トレンド。
🔎 検索結果:
- Z世代に人気のSNSマーケティング事例... (score=0.073, trust=0.50)
- SEO対策におけるキーワードクラスタ... (score=-0.204, trust=0.50)
- 生成AIを使った自動キャッチコピー生... (score=-0.209, trust=0.50)
7. トラブルシューティングまとめ
| 症状 | 原因 | 対処 |
|---|---|---|
psql コマンドが認識されない |
PATH設定漏れ |
C:\Program Files\PostgreSQL\18\bin を環境変数に追加 |
OperationalError |
パスワード or pg_hba.conf設定 | 一時的に trust にしてログイン後、ALTER USER で再設定 |
could not open extension control file "vector.control" |
pgvector未配置 |
.control と .sql を share\extension に配置 |
互換性がないライブラリ: バージョンの不一致 |
DLLがPostgreSQL 17用 |
vector.v0.8.1-pg18 のDLLに入れ替え |
ImportError: cannot import name 'OpenAI' |
openai SDKが旧版 |
pip install --upgrade openai で修正 |
8. まとめ
- 今回はPostgreSQL + pgvector + OpenAI Embedding API により、「テキスト記憶・意味検索」をローカル環境で実現した
- 今後の展望としてこの構成を応用することで、長期メモリ付きAIや自動思考評価ループも構築が挙げられる
9. 今後の発展
- Trust Score や Decay Logic の動的更新
- FastAPI/StreamlitでUI化
- Supabase連携によるクラウド同期
- LangChain/LlamaIndexとの統合
参考リンク
用語整理
| 項番(※x) | 用語 | 意味 |
|---|---|---|
| ※1 | AI記憶データベース | 過去のテキスト・体験・会話などを意味空間上に格納して再検索できる状態 |
