1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQL + pgvector + OpenAIで「AI記憶DB」を構築するまでの手順(Windows編)

Last updated at Posted at 2025-10-30

目次

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. 概要

構成図

image.png

目的

  • 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.sqlshare\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記憶データベース 過去のテキスト・体験・会話などを意味空間上に格納して再検索できる状態
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?