Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パッケージマネージャー dbdev があらわれた!ので、LangChain のパッケージ embedding_search を試してみた

パッケージマネージャー dbdev があらわれた!ので、LangChain のパッケージ embedding_search を試してみた

第 41 回 PostgreSQL アンカンファレンス@オンライン 2023/4/24

hmatsu47
PRO

April 23, 2023
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. パッケージマネージャー dbdev があらわれた!
    ので、LangChain のパッケージ
    embedding_search を試してみた
    第 41 回 PostgreSQL アンカンファレンス@オンライン 
    2023/4/24
    まつひさ(hmatsu47)

    View Slide

  2. 自己紹介
    松久裕保(@hmatsu47)
    ● https://qiita.com/hmatsu47
    ● 現在のステータス:
    ○ 名古屋で Web インフラのお守り係をしています
    ○ DB 移行関連のお仕事は一段落して、コンテナ管理周りの内部
    ツールをちまちまと作っています
    ○ #pgunconf ゆるふわ勢
    ■ 本日は遠征先の東京・大井町より参加中
    2

    View Slide

  3. 今回の発表ネタ
    ● dbdev というパッケージマネージャーが登場
    https://database.dev/
    ● その中にあった LangChain の embedding_search を試
    してみた
    ○ pgvector を使って文書のベクトル化データを生成・保管
    ○ OpenAI の API を使って関連度の高い文書を検索・抽出
    3

    View Slide

  4. 今回もやっぱり Supabase ネタだった
    ● dbdev は Supabase が提供
    ○ サイトのフッター
    https://supabase.com/blog/dbdev
    4

    View Slide

  5. dbdev が目指すもの
    ● 前掲 URL の記事によると
    dbdev fills the same role for PostgreSQL as npm for JavaScript, pip for Python and
    cargo for Rust in that it enables publishing libraries and applications for repeatable
    deployment. We'll be releasing the tooling necessary for third-parties to publish pglets
    to the registry once we’ve collected some community feedback and incorporate any
    great new ideas. Our goal is to create an open ecosystem for packaging and
    discovering SQL.
    【注】2023/4 時点でパッケージリリースは関係者のみ可
    5

    View Slide

  6. dbdev のパッケージを使うには
    ● pg_tle と pgsql-http が必要
    https://github.com/aws/pg_tle
    https://github.com/pramsey/pgsql-http
    ● pg_tle といえば…
    ○ Trusted Language Extentions For PostgreSQL
    ○ AWS が re:Invent 2022 期間中に GA を発表(オープンソース)
    https://aws.amazon.com/jp/about-aws/whats-new/2022/11/trusted-language-extensions-postgr
    esql-amazon-aurora-rds/
    6

    View Slide

  7. 残念ながら
    ● AWS の RDS/Aurora は pgsql-http 未サポート
    https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLRelease
    Notes/AuroraPostgreSQL.Extensions.html
    https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/
    postgresql-extensions.html
    7

    View Slide

  8. LangChain の embedding_search とは
    ● PostgreSQL を Vector Store として使うもの
    https://database.dev/langchain/embedding_search
    ● Vector Store とは
    ○ LLM(大規模言語モデル)を使う際、効率的にプロンプトの文脈
    を与える目的で使う
    https://speakerdeck.com/os1ma/puronputoenziniaringukarashi-merulangchainru-men?slide=4
    9
    ○ pgvector と OpenAI Embeddings API を使用
    8

    View Slide

  9. 手順 https://github.com/hmatsu47/dbdev-langchain-test (1/5)
    ● Supabase プロジェクトを作成
    ● dbdev を利用可能に
    ○ 具体的な手順は省略
    ■ 拡張機能 pgsql-http と pg_tle を有効化
    ■ dbdev(supabase-dbdev)インストール・有効化
    ● 拡張機能 pgvector 有効化
    create extension if not exists vector;
    9

    View Slide

  10. 手順 https://github.com/hmatsu47/dbdev-langchain-test (2/5)
    ● embedding_search インストール・有効化
    ○ documents テーブル生成(Vector Store)
    ○ match_documents ストアドファンクション生成(検索)
    【注】documents テーブルは RLS 無効状態で生成(サンプル用)
    select dbdev.install('langchain-embedding_search');
    create extension "langchain-embedding_search"
    version '1.0.0';
    10

    View Slide

  11. 手順 https://github.com/hmatsu47/dbdev-langchain-test (3/5)
    ● Supabase プロジェクトの URL・匿名キーを確認
    ● OpenAI API キーを取得(発行)・確認
    ● サンプルコードをダウンロード(clone)
    https://github.com/hmatsu47/dbdev-langchain-test.git
    ○ langchainjs を使うコード
    https://github.com/hwchase17/langchainjs
    11

    View Slide

  12. 手順 https://github.com/hmatsu47/dbdev-langchain-test (4/5)
    ● サンプルコード実行
    ○ npm install
    ○ .env に Supabase のプロジェクト URL / 匿名キーと OpenAI の
    API キーを記述
    ○ npm run dev
    12

    View Slide

  13. 手順 https://github.com/hmatsu47/dbdev-langchain-test (5/5)
    ● テストデータを Vector Store に登録
    curl -X POST -H 'Content-Type: application/json; charset=UTF-8' http://localhost:【起動
    ポート番号】 -d '{"contents":【ドキュメント配列】, "metadata":【メタデータ配列】}'
    https://github.com/hmatsu47/dbdev-langchain-test/blob/master/test-data.json
    【注】データは技術評論社・インプレスの書籍紹介ページより引用
    ● 検索
    curl http://localhost:【起動ポート番号】/【検索キーワード】/【結果の最大数】
    13

    View Slide

  14. 参考コード(1/2)
    ● データ登録(ドキュメント追加)
    14
    // ドキュメント追加
    const postDocuments = async (body: { contents: string[]; metadata: Embeddings; }) => {
    await SupabaseVectorStore.fromTexts(
    body.contents,
    body.metadata,
    new OpenAIEmbeddings({
    openAIApiKey: import.meta.env.VITE_OPENAI_KEY,
    }),
    {
    client: supabaseClient,
    tableName: "documents",
    queryName: "match_documents",
    }
    );
    const results = {
    message: "OK"
    }
    return results;
    }

    View Slide

  15. 参考コード(2/2)
    ● 検索
    15
    // 検索
    const search = async (keyword: string, count: number) => {
    const vectorStore = await SupabaseVectorStore.fromExistingIndex(
    new OpenAIEmbeddings({
    openAIApiKey: import.meta.env.VITE_OPENAI_KEY,
    }),
    {
    client: supabaseClient,
    tableName: "documents",
    queryName: "match_documents",
    }
    );
    const results = await vectorStore.similaritySearch(keyword, count);
    return results;
    };

    View Slide

  16. デモ(1/3)
    ● データ登録(ドキュメント追加)
    ● v
    16
    % curl -X POST -H 'Content-Type: application/json; charset=UTF-8' http://localhost:3699 -d @./test-data.json
    {"message":"OK"}%

    View Slide

  17. デモ(2/3)
    ● 検索
    ● v
    17
    % curl http://localhost:3699/初心者/2 | jq
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 966 100 966 0 0 1355 0 --:--:-- --:--:-- --:--:-- 1364
    [
    {
    "pageContent": "本書はデータベース初心者および
    PostgreSQL初心者向けの入門書です。データベースとは何か?から
    PostgreSQLのイ
    ンストール、SQLの実行、トランザクションについて、レプリケーション、バックアップまでを解説しています。
    ",
    "metadata": {
    "title": "データベース初心者のための
    PostgreSQL教室",
    "author": [
    "目黒 聖"
    ]
    }
    },
    {
    "pageContent": "本書は,データベース初学者を対象に
    PostgreSQLを使って,データベース操作の基本から運用までを学ぶための本で
    す。付属DVD収録のファイルを利用することで,自宅の
    WindowsパソコンやMacで実際にデータの検索や更新などを行いながら,
    PostgreSQLによる
    リレーショナルデータベースの操作をマスターすることができます。
    ",
    (以降省略)

    View Slide

  18. デモ(3/3)
    ● 検索
    ● v
    18
    % curl http://localhost:3699/辛い/1 | jq
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 914 100 914 0 0 701 0 0:00:01 0:00:01 --:--:-- 703
    [
    {
    "pageContent": "「データベースがよく落ちる」「前任者が残したテーブル,
    SQLが読み解けない」「
    RDBMSを入れ替えたら予期せぬバグ
    が」――MySQLやPostgreSQLといったRDBMS(リレーショナルデータベース管理システム)を使った業務システム,
    Webサービスを設計・運用してい
    ると,こういった問題によく直面するのではないでしょうか。本書は
    RDB(リレーショナルデータベース)の間違った使い方(=アンチパターン)を
    紹介しながら,アンチパターンを生まないためのノウハウを解説します。それぞれの章では,問題解決に必要な
    RDBやSQLの基礎知識も押さえるので
    ,最近RDBMSを触り始めた新人の方にもお勧めです。
    ",
    "metadata": {
    "title": "失敗から学ぶ RDBの正しい歩き方",
    "author": [
    "曽根壮大"
    ]
    }
    }
    ]

    View Slide

  19. 個人の感想
    ● 簡単
    ● はたしてメジャーになれるのか?
    ● せっかくなので AWS の RDS/Aurora でも使えるように
    なってほしい
    19

    View Slide