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

パッケージマネージャー dbdev があらわれた!ので、LangChain のパッケージ em...

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

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

hmatsu47

April 23, 2023
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. 自己紹介 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 • 現在のステータス: ◦ 名古屋で Web インフラのお守り係をしています

    ◦ DB 移行関連のお仕事は一段落して、コンテナ管理周りの内部 ツールをちまちまと作っています ◦ #pgunconf ゆるふわ勢 ▪ 本日は遠征先の東京・大井町より参加中 2
  2. 今回の発表ネタ • dbdev というパッケージマネージャーが登場 https://database.dev/ • その中にあった LangChain の embedding_search

    を試 してみた ◦ pgvector を使って文書のベクトル化データを生成・保管 ◦ OpenAI の API を使って関連度の高い文書を検索・抽出 3
  3. 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
  4. 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
  5. 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
  6. 手順 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
  7. 手順 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
  8. 手順 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
  9. 手順 https://github.com/hmatsu47/dbdev-langchain-test (4/5) • サンプルコード実行 ◦ npm install ◦ .env

    に Supabase のプロジェクト URL / 匿名キーと OpenAI の API キーを記述 ◦ npm run dev 12
  10. 手順 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
  11. 参考コード(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; }
  12. 参考コード(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; };
  13. デモ(1/3) • データ登録(ドキュメント追加) • v 16 % curl -X POST

    -H 'Content-Type: application/json; charset=UTF-8' http://localhost:3699 -d @./test-data.json {"message":"OK"}%
  14. デモ(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による リレーショナルデータベースの操作をマスターすることができます。 ", (以降省略)
  15. デモ(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": [ "曽根壮大" ] } } ]