# Semantic Kernel：PostgreSQLをベクトルデータベースとして使用


前回の「[Semantic Kernel: Embeddingでカスタマーサービス（RAG）](https://your-link-here)」では、Redisをベクトルデータベースとして使いました。今回は、PostgreSQLを使用して実装する方法を見てみましょう。

まず、Nugetパッケージを導入する必要があります：

```plaintext
Microsoft.SemanticKernel.Connectors.Postgres
```

PostgreSQLを標準インストールした場合、ベクトル化をサポートしていないため、拡張機能をインストールする必要があります。以下はgithub上のPostgreSQLのベクトル拡張機能のリンクで、この拡張機能は自身でソースコードを編集してインストールする必要があります。公式の手順は図一に示されています。ですが、この手順は少し不明瞭なので、簡単にまとめた手順を共有します。

githubアドレス：https://github.com/pgvector/pgvector

![図一：PostgreSQLのベクトル拡張](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAoyEA9sv0PlvPsJffmNseTcEhKpzRbAdqC9cZdG4ylUypOyYdz7X6juA/640?wx_fmt=png&from=appmsg)

## pgvectorのコンパイル

1. Visual Studioをインストールし、C++開発キットをインストールします。以下のbatファイルを実行して、コンパイル環境を確認できます：

    ```plaintext
    C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
    ```

2. 次に、nmakeとPGROOTの2つの環境変数を設定します：

    - nmake.exeのパスをPathリストに追加します：
    
        ```plaintext
        C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.42.34226\bin\Hostx86\x64
        ```

    - PostgreSQLのライブラリパスを設定します：
    
        ```plaintext
        PGROOT=C:\Program Files\PostgreSQL\16
        ```

3. pgvectorのソースコードをダウンロードします。gitを使ってクローンするか、直接ダウンロードして任意のパスに配置します。

4. 最後に、`x64 Native Tools Command Prompt for VS 2022 Preview`を使用してコンパイルとインストールを行います。

    - Visual Studioのインストールディレクトリ内にある「x64 Native Tools Command Prompt for VS 2022 Preview」を開きます。このショートカットのプロパティからも詳細を確認できます。

    ![図二：x64 Native Tools Command Prompt for VS 2022 Preview](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAoHy4hT3xqWsGb9iaWnqTMytgWBdLHRpsoHQOeDyETWvDzCrfeeKSliaTw/640?wx_fmt=png&from=appmsg)

    ターゲットは以下のように設定されています：

    ```plaintext
    %comspec% /k "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
    ```

    ここで指定されている `vcvars64.bat` スクリプトファイルが、Visual C++開発用の環境変数を設定するためのバッチファイルです。これにより、コンパイルに必要なパス、ライブラリ、ツールチェーンが設定されます。

5. `x64 Native Tools Command Prompt for VS 2022 Preview` を開いて、pgvectorが保存されているディレクトリに移動し、以下のコマンドでコンパイルします：

    ```plaintext
    nmake /F Makefile.win
    ```

    ![図三：nmakeコンパイル情報](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAoqviavppNIkIXPKU4WVlFPc0cV213yTHuBvLou7ibgZGFJibkI5qibPxZ4A/640?wx_fmt=png&from=appmsg)

## pgvectorのインストール

以下のコマンドを使用してpgvectorをインストールします：

```plaintext
nmake /F Makefile.win install
```

![図四：インストール情報](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAor986Oyq3xymhWOQcBusRKDYNVxLbialmaI6NHTufvqibLABqo4PZxUlg/640?wx_fmt=png&from=appmsg)

インストールが完了すると、以下の3つの場所に対応するファイルが配置されます：

- A、動的ライブラリ `vector.dll`：`C:\Program Files\PostgreSQL\16\lib`

    ![図五：vector.dllパス](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAokFvpNW3LEgGw0TBtY3QMerNWhq4phYEGAot1Bo53t0ic8WHCV5Tshtg/640?wx_fmt=png&from=appmsg)

- B、35個のベクトル拡張ファイル：`C:\Program Files\PostgreSQL\16\share\extension`

    ![図六：vector拡張ファイル](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAoPSR8e3MtywgqpQiaqKrVUIwqiaFeoNARG62W2picu1x9dHiaB05lMP6iadQ/640?wx_fmt=png&from=appmsg)

- C、3つのタイプ定義ファイル：`C:\Program Files\PostgreSQL\16\include\server\extension\vector`

    ![図七：3つのタイプ定義ファイル](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAo0xzO2aEEpVgtSguKN9c0Xe1mgOjgWWa0OvIicDZ5SdQ1Cia6cW2rgY9A/640?wx_fmt=png&from=appmsg)

## PostgreSQLでvector拡張をインストール

最後のステップとして、PostgreSQLを開いてvector拡張をインストールします：

```sql
CREATE EXTENSION vector;
```

拡張がインストールされると、以下の図八の赤い部分のように結果を確認できます。

![図八：vectorインストール結果](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAoibNcB5rOHfDVAY8UHeY5zwNcepOgc30w0GRtVWyrPHa0ibfQMm8RUPdw/640?wx_fmt=png&from=appmsg)

もし直接vector拡張をインストールしたい場合、以下のアドレスから対応するファイルをダウンロードし、対応するパスに配置してインストールできます：

https://github.com/axzxs2001/Asp.NetCoreExperiment/blob/master/Asp.NetCoreExperiment/SemanticKernelArticle/pgvector.zip

## データ保存後の結果

![図九：ベクトル化テーブルデータ](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDUib8yKGVnZOXc1MISAsRAotOwmmaicHX5oNsXYcKEFFeEUhCjrmIqPN1libUd95EqEmxWHmxQEQYFg/640?wx_fmt=png&from=appmsg)

(Translated by GPT)

元のリンク：https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247488404&idx=1&sn=2989ca6101033d3cdc4dd4b757dc1df9&chksm=9f004cbea877c5a881b73909c6eb252943a284ee692dbcae4c674858fbeaf342aaa98eeb700a&token=1036480445&lang=zh_CN#rd&wt.mc_id=MVP_325642