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

LangChain体験入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 LangChain体験入門

Avatar for DATASTAX JAPAN

DATASTAX JAPAN

December 04, 2023
Tweet

More Decks by DATASTAX JAPAN

Other Decks in Technology

Transcript

  1. ©2023 DataStax. – All rights reserved
 前提条件 2
 環境
 •

    ノートPC(電源とWIFI接続は提供します)
 • Colaboratory
 ◦ https://colab.research.google.com/?hl=ja
 • OpenAI APIキーアカウント
 ◦ APIキー
 
 • Astra DBトライアルアカウント(クレジットカード入力不要・利用期間制限なし、月々無料枠あり) 
 ▪ https://astra.datastax.com/signup
 
 前提知識
 • プログラミング言語
 ◦ Python
 • データベース
 ◦ SQL

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


    専用のベクトルストアでは、データ変更に伴うインデックスの更新による性能影響が顕著。 
 画像は、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/)より引用
  18. ©2023 DataStax. – All rights reserved
 SQL+ベクトル検索:容易な操作 24
 新たなデータ型 VECTORの導入

    新たなオペレーター ANN OFの導入 近似最近傍探索を実装 approximate nearest neighbor (ANN) インデックスを定義 Storage Attached Index
  19. ©2023 DataStax. – All rights reserved
 類似度の把握 25
 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;
  20. ©2023 DataStax. – All rights reserved
 ベクトルデータベースの持つ3つの課題 26
 • 検索インデックス更新


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

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


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

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


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

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

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

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

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

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

  26. ©2023 DataStax. – All rights reserved
 フューショットプロンプティング 35
 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を△△してください
 

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


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

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

    Thought) 37
 単に質問と答えの組み合わせを複数利用するのではなく、論理的思考( 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)の一種
  29. ©2023 DataStax. – All rights reserved
 余談:ゼロショットとCoT 38
 Chain of

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

  30. ©2023 DataStax. – All rights reserved
 ReACT 39
 https://react-lm.github.io/ ReACTは、LangChainの「エージェント」における、キー概念


    ようするに、LLMに対して、ユーザーからのリクエストを単に投げるのではなく、
 そのために「何をすれば良いのか(どのような進め方=論理的思考でそのリクエストを実現するのが最適化)」を聞き(Reasoning)、
 その後にリクエスト自体(Act)に対する指示を行う。(この二つを繰り返し行う)

  31. ©2023 DataStax. – All rights reserved
 ReACTのための実装 40
 ReACTの本質:LLMに対して、使える「道具(ツール)」を示して、手順を考えさせる。 


    
 例:
 ユーザーの生成 AIアプリへのリクエスト: 
 -「有給休暇を取るにはどうすれば良いですか?」 
 
 生成AIアプリからLLMへのリクエスト:
 私は以下のツールを持っています。 
 - 自社規約集(使い方: .........)
 - 最新法令集(使い方: .........)
 - Google検索(使い方:.........)
 以下のリクエスに答えるためにはどのように進めれば良いですか? 
 リクエスト:有給休暇を取るにはどうすれば良いですか? 
 
 
 LLMから生成AIへの応答:
 まず、自社規約集から「有給休暇」に関係するデータを取得する必要がありそうだ(「自社規約集」から検 索して情報をください)。 
 (中略)
 
 最終的にユーザーが受け取る応答: 
 有給休暇を取るには、以下の手順を踏んでください ...
 生成AI
 アプリ
 LLM
 ユーザー
 社内情報
 API

  32. ©2023 DataStax. – All rights reserved
 ReACT実装について 41
 LangChain
 フレームワークとして、

    ReACTの処理を実現
 
 AgentTypeとして「...REACT_DESCRIPTION」として指定
 
 OpenAI
 APIとして、ReACTを実現するための(より直接的な)機能を実装 
 
 OpenAI Function Calling をリリース(2023年6月13日)
 GPT に関数の定義を渡すと、呼ぶべき関数とその引数を JSON 形式で出力
 
 • Function Callingと言っても、ファンクションをコールするのは、アプリケーション側(モデルの外部) 
 • その点では、「Reasoning」をLLMに委ねるというReACTの本質と変わらない。 
 • LLM(API)がファンクション入出力に対しての知見を持っているため、システム連携の確実性が増す 
 
 LangChainでは、AgentTypeとして「OPENAI_MULTI_FUNCTIONS」として指定することで OpenAI Function Calling を活用可能になっている。 
 
 

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


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

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


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

  35. ©2023 DataStax. – All rights reserved
 Document Loader 45
 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
  36. ©2023 DataStax. – All rights reserved
 ベクトルストア:組み込みレベルのベクトルストア 46
 Chromaを使えば、データベースについて 


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

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

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

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

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

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

    (コード内に) ハードコーディングされます。 • エージェントでは、言語モデルが推論エンジンとして使用され、どのアクションをどの順序で実行するかを決定します。 https://python.langchain.com/docs/modules/agents/ 3つの実行方法と違い • モデルを直接実行 • チェーン ◦ (モデルを直接実行する場合と比べて) バッチ処理の制御(MAP REDUCE等)等の利点がある • エージェントでは、言語モデルが推論エンジンとして使用され、どのアクションをどの順序で実行するかを決定し ます。 ◦ (チェーンと比べて)言語モデルを推論エンジン として利用するという利点がある
  40. ©2023 DataStax. – All rights reserved
 Astraホーム画面 61
 左メニューがアイコンのみの 表示の場合は、ブラウザ画面

    の横幅を広げてください 
 今回プレビューは利用しま せん。
 
 ボタン押下する必要はあり ません。

  41. ©2023 DataStax. – All rights reserved
 データベース作成 63
 Serverless (Vector)を選びます。


    
 
 データベース名: demo
 キースペース名: langchain

  42. ©2023 DataStax. – All rights reserved
 認証情報の取得 64
 Astraへの認証には、Astra管理画面で以下の2ステップが必要 


    
 1. トークンの取得(ユーザーの情報) 
 2. バンドルファイルの取得(データベースの情報) 

  43. ©2023 DataStax. – All rights reserved
 バンドルファイル取得 66
 URLは一過性のものです。 


    
 WGETコマンドをコピーして、 Collaboratoryのノートブック上でダ ウンロードすることができます。 
 
 (ファイルをダウンロードして、 
 Collaboratoryのファイルメニューか らアップロードしても良い) 
 

  44. ©2023 DataStax. – All rights reserved
 トークン生成 67
 ご自身のトークン情報を利用してください。 


    
 cliendId と secret をプログラムで利用します。 
 このアイコン押下でコ ピーできます。

  45. ©2023 DataStax. – All rights reserved
 1_RAG_pdf.ipynb:利用ファイルの配置 73
 ①初めに、ローカルにダウンロードします。 


    ② Collaboratoryに、アッ プロードします。
 (ドラッグ&ドロップで
 配置可能です)

  46. ©2023 DataStax. – All rights reserved
 サンプルアプリ 75
 企業保有データ
 Streamlit(https://streamlit.io/)を利用したサンプルアプリ

    (同じ書籍データを利用。テーブル名などの差異があります) https://github.com/YoshiyukiKono/gen_ai-sandbox/tree/main/streamlit _chatbot
  47. ©2023 DataStax. – All rights reserved
 従来のアプリケーションとの違い 76
 自由な表現による
 問い合わせ


    「機械学習」から
 「データサイエンス」、「データ サイエンティスト」のように意味 的に関連する
 言葉を含めて推薦