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

LangChain体験入門(再々)

 LangChain体験入門(再々)

DATASTAX JAPAN

March 03, 2024
Tweet

More Decks by DATASTAX JAPAN

Other Decks in Technology

Transcript

  1. ©2023 DataStax. – All rights reserved
 アジェンダ 2
 会場受付(13:00〜13:30)
 プレゼンテーション 

    (13:30~14:30)
 • 生成AI活用アプリケーション 
 • ベクトルデータベース 
 • LangChain
 
 休憩
 
 ハンズオン(14:45~16:30)
 • OpenAI APIを利用したLLMの利用
 • ベクトルデータベースを利用したセマンティクス検索 
 • LangChainを利用したRAGアプリケーション
 ◦ LLMとベクトルデータベースをフレームワークで扱う 
 

  2. ©2023 DataStax. – All rights reserved
 DataStaxのご紹介 本社
 
 Santa

    Clara, CA
 
 2010年4月創業
 
 Santa Clara • London • Paris • 
 Singapore • Tokyo •
 Sydney • Wellington
 
 
 
 
 オープンソースを基盤とした
 テクノロジースタックを
 エンタープライズ向けソリューション
 として提供
 DATASTAX JAPAN 2017年法人設立
  3. ©2023 DataStax. – All rights reserved
 Apache Cassandra オープンソース NoSQLデータベース


    分散アーキテクチャ
 ワイド カラム データ モデル
 低レイテンシ/ 無限のスケール
 単一障害点のない高可用性 

  4. ©2023 DataStax. – All rights reserved
 Apache Pulsar オープンソース
 メッセージング/ストリーミング


    ミドルウェア
 分散アーキテクチャ
 クラウドネイティブ設計
 保証されたメッセージ配信 
 軽量サーバーレス関数フレームワーク 
 階層型ストレージオフロード 

  5. ©2023 DataStax. – All rights reserved
 ニーズに応じたDataStaxテクノロジー活用 8
  DataStaxテクノロジー コミュニティー

    技術サポート パッケージ製品 クラウドサービス エンタープライズ オープンソース 市場投入までの期間短縮
  6. ©2023 DataStax. – All rights reserved
 包括的な オープンテクノロジー スタック オンプレとクラウドの両方で一

    貫して技術を提供 リアルタイムAI DataStaxが指向する マシンラーニング
 ストリーミング
 クラウド
 データ

  7. ©2023 DataStax. – All rights reserved
 ©2023 DataStax. – All

    rights reserved
 アジェンダ 10
 生成AI活用アプリケーション概要
 ベクトル検索
 LangChain
 

  8. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 LLM
 データ

    データ システムからの
 応答
 プロンプト
 強化された
 応答
 生成AI活用 アプリ
 
 大規模言語モデル 
 コンテクスト 
 応答

  9. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 データ 企業保有


    データ
 LLM
 データ システムからの
 応答
 強化された
 応答
 生成AI活用 アプリ
 
 増強されたLLM

  10. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 データ 企業保有


    データ
 LLM
 データ システムからの
 応答
 強化された
 応答
 生成AI活用 アプリ
 
 増強されたLLM
 ファインチューニング
 A社のための LLM
 A社のための LLM
 再トレーニング

  11. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 データ ユーザー入力+


    企業保有データ
 LLM
 データ システムからの
 応答
 生成AI活用 アプリ
 
 増強されたLLM
 プロンプト・エンジニアリング
 / コンテキスト・インジェスチョン (Context Ingestion)/
 RAG (Retrieval Augmented Generation) 検索拡張生成
 LLMへのリクエスト: 「・・・というユーザーのリクエストに答えよ。 その際、以下の関連するデータを活用せよ・・・」 企業の保有する大量のデータから関連するデータ(非 構造)を素早く見つけることが重要 

  12. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 クエリ クエリ+


    企業保有データ
 LLM
 データ システムからの
 応答
 生成AI活用 アプリ
 
 増強されたLLM
 ベクトルストア/
 ベクトルデータベース 
 ベクトル検索

  13. ©2023 DataStax. – All rights reserved
 ベクトル検索とは何か? 18
 
 Googleいわく、「あらゆるデータ」を「瞬時に」アクセス(つまり検索)する技術


    
 https://cloud.google.com/blog/ja/topics/developers-practitioners/find-anything-blazingly-fast-googles-v ector-search-technology?hl=ja
 
 
 
 
 
 
 
 
 (非構造化)データのベクトル化 (Embedding) ベクトル同士の類似性を検出する (数学的)アルゴリズム ベクトルデータベースの 
 カバーする範囲
 エンベディングモデルの 
 カバーする範囲

  14. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 クエリ クエリ+


    企業保有データ
 LLM
 データ システムからの
 応答
 生成AI活用 アプリ
 
 増強されたLLM
 ベクターデータベース 
 ベクターサーチ

  15. ©2023 DataStax. – All rights reserved
 独自のベクトル類似性検索エンジン ベクトル類似性検索
 Lucene
 SAI


    Storage Attached Index
 業界標準
 従来のCassandraのインデックスが持 つ課題を乗り越えるために 
 開発された独自のインデックス 
 JVector Lucene実装の課題を
 乗り越えるために開発された 
 独自のベクトル検索実装 
 • JVector は、 Lucene と比較して、最大 12.7 倍高いスループットを実現 初期の実装では
 業界標準のLuceneを採用

  16. ©2023 DataStax. – All rights reserved
 ノンブロッキングインデックス 21
 プロダクションシステムでは、データの追加・更新は大前提。 


    専用のベクトルストアでは、データ変更に伴うインデックスの更新による性能影響が顕著。 
 画像は、DataStaxブログ「5 Hard Problems in Vector Search, and How Cassandra Solves Them」 (https://thenewstack.io/5-hard-problems-in-vector-search-and-how-cassandra-solves-them/)より引用
  17. ©2023 DataStax. – All rights reserved
 SQL+ベクトル検索:容易な操作 22
 新たなデータ型 VECTORの導入

    近似最近傍探索を実装 approximate nearest neighbor (ANN) インデックスを定義 Storage Attached Index SELECT * FROM product ORDER BY item_vector ANN of [3.4, 7.8, 9.1]
 新たなオペレーター ANN OFの導入
  18. ©2023 DataStax. – All rights reserved
 類似度の把握 23
 https://docs.datastax.com/en/astra-serverless/docs/vector-search/cql.html SELECT

    description, similarity_cosine(item_vector, [0.1, 0.15, 0.3, 0.12, 0.05]) FROM vsearch.products ORDER BY item_vector ANN OF [0.1, 0.15, 0.3, 0.12, 0.05] LIMIT 1;
  19. ©2023 DataStax. – All rights reserved
 ベクトルデータベースの持つ3つの課題 24
 • 検索インデックス更新


    ◦ データは更新される
 ◦ 専用ベクトルストアは運用中のインデックス更新に難あり 
 
 • スケールアウト
 ◦ データは増える
 ◦ 性能要件は様々
 
 • データベースとしての汎用性
 ◦ ベクトル検索だけでは事足りない 
 ▪ 二つのデータベース(汎用とベクトルストア)を運用するか? 
 ▪ ベクトル検索機能を持った一つのデータベースを運用するのか? 
 ◦ 開発への影響
 ▪ 既存の知識・経験を活かせる利点 

  20. ©2023 DataStax. – All rights reserved
 生成AI活用の選択肢 26
 生成AI活用 アプリ


    
 PDFなどドキュメント情報の活 用:
 要約、意味検索(セマンティッ クサーチ)など
 チャット
 
 システム連携
 
 入力:
 • LLMへのクエリ
 • LLMへの指示
 
 出力:
 システムが利用できる形式での生 成AIへの出力指示(JSON等)
 

  21. ©2023 DataStax. – All rights reserved
 ユーザー 入力
 データ LLM


    データ システムからの
 応答
 生成AI活用 アプリ
 
 エージェント
 キャッシュ
 企業の
 プロプライエタリ データ
 プロンプトエンジニアリングの発展(真の価値): 
 LLMへの複数の問い合わせを組み合わせる 
 (繋げる→チェーンする)様々なテクニック 

  22. ©2023 DataStax. – All rights reserved
 LangChainを利用する利点 28
 • 生成AIアプリケーションの典型的な構造の表現

    
 ◦ モデル
 ◦ データ
 ▪ データソース(典型的なデータソースをベクトルストアにロードする機能) 
 ▪ ベクトルストア
 ◦ エージェント
 ▪ 入力:プロンプト
 ▪ 出力:コールバック
 
 • プロンプトエンジニアリングの様々なテクニックの実装 
 ◦ ReAct
 ◦ Chain Of Thought
 ◦ FLARE、等
 • 生成AIアプリケーションの構成要素の個別実装 
 ◦ LLM:OpenAI等
 ◦ ベクトルストア:PineCone, Cassandra等
 ◦ データローダー、等

  23. ©2023 DataStax. – All rights reserved
 CassIO 29
 https://cassio.org/ CassIOは、生成AIの一般的なニーズに合わせて

    Cassandra/AstraDBにアクセスする詳細を抽象化します。 CassIO は Cassandra/AstraDBをLangChainとシームレスに統合
  24. ©2023 DataStax. – All rights reserved
 前提:LLMの特徴・限界 32
 LLMの特徴
 •

    トレーニングに用いられた自然言語の 文法を踏まえた処理 
 • トレーニングに用いられた際に利用された 情報に関する応答
 
 LLMの限界
 
 • LLMは、一般に公開されていない情報については、対応できない。 
 • LLMは、モデルがトレーニングされた後に発生した事象については、知らない。 

  25. ©2023 DataStax. – All rights reserved
 フューショットプロンプティング 33
 Input: 素晴らしい


    Output: Positive
 Input: 酷い出来だ
 Output: Negative
 …
 …
 …
 Input:全くひどい代物だ
 単純な例:
 
 目的:ユーザーの商品のレビューを Positiveまたは Negativeに分類する。
 
 分類対象のレビュー: 全くひどい代物だ。 
 
 LLMへの入力
 LLMからの出力
 Output: Negative
 現実的な例:
 
 目的:コールセンターシステム 
 
 ユーザーの入力: 「〇〇のXXが動かないんですが?」 
 
 LLMへの入力
 Input: 〇〇のXXがわかりません。
 Output: 〇〇のXXは、......です。
 Input: 〇〇がXXして困っています。どうすればいいですか? 
 Output: 〇〇のXXXを△△してください。 
 …
 …
 …
 Input:〇〇のXXが動かないんですが? 
 サンプルに続いて、最 後に実際に分類する レビューを記載
 LLMからの出力
 Output: 〇〇のXXXを△△してください
 

  26. ©2023 DataStax. – All rights reserved
 問題点と解決方法 34
 全てのサンプルを渡すのは非現実的 


    
 
 質問に関係するサンプルを「検索」する機能が必要 
 
 
 「検索」は、従来の完全一致や部分一致では不十分。 
 自然言語でのやりとりとの親和性の高い「意味的検索」が重要 

  27. ©2023 DataStax. – All rights reserved
 思考の連鎖 (CoT: Chain of

    Thought) 35
 単に質問と答えの組み合わせを複数利用するのではなく、論理的思考( reasoning)プロセスを示す。 https://arxiv.org/abs/2201.11903: Chain-of-Thought Prompting Elicits Reasoning in Large Language Models Chains https://python.langchain.com/docs/ modules/chains/ 🦜🔗 LangChain いくつかのサンプルデータを渡すとい う意味では、フューショット学習 (Few-shot Learning)の一種
  28. ©2023 DataStax. – All rights reserved
 余談:ゼロショットとCoT 36
 Chain of

    Thoughtについては、以下のようなプロンプトでも効果が見られる。 (「ゼロショットCoT」と呼ばれる) 太郎が花子に、りんごを一つあげました。 
 花子は、元々りんごを三つ持っていました。 
 三郎が二郎にりんごを 10個あげました。
 花子は自分が持っているりんごから自分のために一つ除いて残りのりんごを 全て二郎にあげました。 
 二郎はりんごをいくつ持っていますか? 
 答えだけでなく、過程を示してください。 
 太郎が花子に、りんごを一つあげました。 
 花子は、元々りんごを三つ持っていました。 
 三郎が二郎にりんごを 10個あげました。
 花子は自分が持っているりんごから自分のために一つ除いて全てを二郎にあ げました。
 二郎はりんごをいくつ持っていますか? 
 10個です。
 誤り
 始めに、花子は元々りんごを 3つ持っています。
 太郎が花子に1つりんごをあげると、花子のりんごの数は 3 + 1 = 4つになり ます。
 三郎が二郎にりんごを 10個あげたということです。花子のりんごの数は変わ りません。
 花子は自分が持っているりんごから自分のために 1つを除いて残りのりんご を全て二郎にあげるとあります。花子が 1つを取っているので、花子はりんご を3つ持っています。二郎が3個もらうので、二郎は 13のりんごを持つことに なります。
 したがって、最終的に二郎は 13のりんごを持っています。 
 正解

  29. ©2023 DataStax. – All rights reserved
 問題点 37
 利用できるツールを揃える必要がある。 


    
 非公開情報を利用する場合には、膨大なドキュメントから関連する情報を的確に抽出することが重要 
 
 
 「検索」は、従来の完全一致や部分一致では不十分。自然言語でのやりとりとの親和性の高い「意味的検 索」が重要
 

  30. ©2023 DataStax. – All rights reserved
 生成AIにおける典型的なデータソース 39
 ドキュメント(非構造化データとして )


    
 • 社内文書(PDF等)
 ◦ 特定ドメインの資料(法律条文など) 
 ◦ 社内の福利厚生情報に関する質問など 
 
 
 テキスト(構造化データ中の)
 • カタログデータ (書籍や映像コンテンツなど)の「概要」項目 
 • コールセンターシステムの質疑応答記録 
 
 
 画像
 • カタログデータ(不動産賃貸売買管理システムにおける物件の画像など)の画像 
 • 調査データ(損保システムにおける損害箇所画像など)の画像 

  31. ©2023 DataStax. – All rights reserved
 Document Loader 40
 https://github.com/langchain-ai/langchain/tree/master/libs/lang

    chain/langchain/document_loaders acreom.py airbyte.py airbyte_json.py airtable.py apify_dataset.py arcgis_loader.py arxiv.py assemblyai.py async_html.py azlyrics.py azure_blob_storage_container.py azure_blob_storage_file.py baiducloud_bos_directory.py baiducloud_bos_file.py base.py base_o365.py bibtex.py bigquery.py bilibili.py blackboard.py blob_loaders blockchain.py brave_search.py browserless.py chatgpt.py chromium.py college_confidential.py concurrent.py confluence.py conllu.py csv_loader.py cube_semantic.py datadog_logs.py dataframe.py diffbot.py directory.py discord.py docugami.py dropbox.py duckdb_loader.py email.py embaas.py epub.py etherscan.py evernote.py excel.py facebook_chat.py fauna.py figma.py gcs_directory.py gcs_file.py generic.py geodataframe.py git.py gitbook.py github.py googledrive.py gutenberg.py helpers.py hn.py html.py html_bs.py hugging_face_dataset.py ifixit.py image.py image_captions.py imsdb.py iugu.py joplin.py json_loader.py larksuite.py markdown.py mastodon.py max_compute.py mediawikidump.py merge.py mhtml.py modern_treasury.py mongodb.py news.py notebook.py notion.py notiondb.py nuclia.py obs_directory.py obs_file.py obsidian.py odt.py onedrive.py onedrive_file.py open_city_data.py org_mode.py parsers pdf.py polars_dataframe.py powerpoint.py psychic.py pubmed.py pyspark_dataframe.py python.py readthedocs.py recursive_url_loader.py reddit.py roam.py rocksetdb.py rspace.py rss.py rst.py rtf.py s3_directory.py s3_file.py sharepoint.py sitemap.py slack_directory.py snowflake_loader.py spreedly.py srt.py stripe.py telegram.py tencent_cos_directory.py tencent_cos_file.py tensorflow_datasets.py text.py tomarkdown.py toml.py trello.py tsv.py twitter.py unstructured.py url.py url_playwright.py url_selenium.py weather.py web_base.py whatsapp_chat.py wikipedia.py word_document.py xml.py xorbits.py youtube.py
  32. ©2023 DataStax. – All rights reserved
 ベクトルストア:組み込みレベルのベクトルストア 41
 Chromaを使えば、データベースについて 


    ◦ データベースをインストールして、接続ポイントやユーザーを利用したり 
 ◦ マネージドサービスに登録して、 APIのキーを利用したり 
 しなくてもすみますが ...
 Retrieverレベルで抽象化されているので、この構成で LangChainについて学習をスタートすることも可能 

  33. ©2023 DataStax. – All rights reserved
 自動生成されたテーブル 43
 利点
 •

    データ層の抽象化
 ◦ 自身でのデータモデル設計不要 
 ◦ 自身でのインデックス定義不要 
 • エンベディング処理の統一 /コード不要
 ◦ データの登録とクエリに同じエンベディン グモデルが自動的に利用される 
 • メタデータフィルタリングによる簡易な検索条 件追加
 • 統一的なデータ登録(ロード)と検索処理 

  34. ©2023 DataStax. – All rights reserved
 カスタムRetrieverの作成 45
 利点
 •

    データモデルの自由度 
 ◦ 既存データモデルの再利用・拡張 
 ◦ プライマリーキー、クラスタリングキー (=データ分散設計) 
 • データ登録(ロード)に必ずしも、 LangChain の利用・知識は不要 
 ◦ 特にPDFドキュメントのようなデータの チャンク化が不要な場合は簡便 
 • ネイティブ操作による自由度の高い検索条 件
 

  35. ©2023 DataStax. – All rights reserved
 初めに:チェーンとエージェント 47
 • チェーンでは、一連のアクションが

    (コード内に) ハードコーディングされます。 • エージェントでは、言語モデルが推論エンジンとして使用され、どのアクションをどの順序で実行するかを決定します。 https://python.langchain.com/docs/modules/agents/ 3つの実行方法と違い • モデルを直接実行 • チェーン ◦ (モデルを直接実行する場合と比べて) バッチ処理の制御(MAP REDUCE等)等の利点がある • エージェントでは、言語モデルが推論エンジンとして使用され、どのアクションをどの順序で実行するかを決定し ます。 ◦ (チェーンと比べて)言語モデルを推論エンジン として利用するという利点がある