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

LangGraphとFlaskを用いた社内資料検索ボットの実装②Retriever構築編

熊懐葵
December 28, 2024

 LangGraphとFlaskを用いた社内資料検索ボットの実装②Retriever構築編

機械学習の社会実装勉強会 第42回 (https://machine-learning-workshop.connpass.com/event/341138/) の発表資料です。

熊懐葵

December 28, 2024
Tweet

More Decks by 熊懐葵

Other Decks in Technology

Transcript

  1. 目次 • 背景とモチベーション(おさらい) • 社内資料検索ボット Sofiaとは(おさらい) • retrieverについて • 検索手法について

    • retrieverの実装 • データベースの用意 • confluence_retrieverの実装 • jira_retrieverの実装 1
  2. Node Edge State Graph SofiaのGraph 実装のイメージ(前回) __start__ decide_datasource grade_documents transform_query

    generate __end__ grade_documents_ or_generate decide_to_generate grade_generation_v_documents_and_question • question: ~して • datasource: • generation: • documents: • question: ~して • datasource : Confl. • generation: ~です • documents: [URL] 6 retrieve
  3. retrieverとは 9 データベースからqueryの関連情報を検索し、 取得する confluence_retriever Confluenceから • CQLクエリ検索(キーワード検索) • ベクトル検索

    で資料を取得する jira_retriever Jiraから • JQLクエリ検索(複数条件検索) で資料を取得する データベース retriever query このquery(キーワード・質問内容) と一致する(関連する)データは…
  4. 13 キーワード検索 メリット • 最新状態から資料を取得できる デメリット • キーワードがズレていると引っか からない •

    キーワードが同じでも内容が合っ てない資料が引っかかる ベクトル検索 メリット • キーワードが多少ずれていても取 得できる • ベクトルDBに入れる資料を絞るこ とで、検索結果の質を上げられる デメリット • 最新状態から取得できない(定期的 に更新作業が必要) キーワード検索とベクトル検索のメリット・デメリット confluence_retriever • CQLクエリ検索(キーワード検索) • ベクトル検索
  5. retrieverの実装工程 14 ベクトルDB ラベル付与 資料ID取得 DB用意 DBに資料埋込 confluence_retr iever キーワード生成

    クエリ検索 ベクトル検索 検索結果を合わ せる jira_retriever Jira情報取得 クエリ生成 クエリ検索 データ形式調整
  6. retrieverの実装 > ベクトルDB > 資料ID取得 16 create_db.py①: ラベルIDを使って、ラベルのついた資料のIDを取得する • ConfluenceのURL(エンドポイント用)

    • ユーザーのメールアドレス(認証用) • APIトークン(認証用) sofiaラベルがついた資料情報を取得 レスポンスからSofiaラベルがついた 資料のIDを取得
  7. retrieverの実装 > ベクトルDB > DB用意 18 create_db.py②: ベクトルDBを用意する embeddingする機械学習モ デルを指定

    ChromaというDBのテンプレートを使って ベクトルDBの箱をつくる DBを置く場所
  8. retrieverの実装 > ベクトルDB > DBに資料埋込 19 create_db.py④: ベクトルDBに資料を埋め込む(embedding) ベクトルDBの作成 完了

    create_db.py③: 取得したIDで資料をロードするConfluenceLoaderを用意する 資料を一つずつロード・embedding
  9. ベクトルDB ラベル付与 資料ID取得 DB用意 DBに資料埋込 confluence_retr iever キーワード生成 クエリ検索 ベクトル検索

    検索結果を合わ せる jira_retriever Jira情報取得 クエリ生成 クエリ検索 データ形式調整 retrieverの実装工程 20
  10. retrieverの実装 > confluence_ret… > ベクトル検索 25 ※外部でどのように準備しているのか Confluence Cloud Run

    事前に作っているベクトルDBを指定 ※main.py ベクトル検索するretriever: VectorStore +.as_retriever()
  11. ベクトルDB ラベル付与 資料ID取得 DB用意 DBに資料埋込 confluence_retr iever キーワード生成 クエリ検索 ベクトル検索

    検索結果を合わ せる jira_retriever Jira情報取得 クエリ生成 クエリ検索 データ形式調整 retrieverの実装工程 27
  12. retrieverの実装 > jira_retriever > クエリ生成 30 jira.py②: JQLクエリを生成するchainを作る(→invoke) プロンプト •

    “質問からJQLを生成してください” • 質問テキスト • 取得したJira情報 • 質問とそこから変換したJQLの具体例 chain
  13. ベクトルDB ラベル付与 資料ID取得 DB用意 DBに資料埋込 confluence_retr iever キーワード生成 クエリ検索 ベクトル検索

    検索結果を合わ せる jira_retriever Jira情報取得 クエリ生成 クエリ検索 データ形式調整 retrieverの実装工程 33
  14. Node Edge State Graph retrieverの構築完了 __start__ decide_datasource grade_documents transform_query generate

    __end__ grade_documents_ or_generate decide_to_generate grade_generation_v_documents_and_question • question: ~して • datasource: • generation: • documents: • question: ~して • datasource : Confl. • generation: ~です • documents: [URL] 34 retrieve 質問を元に Confluence or jira から関連資料を retrieveする
  15. retrieverの実装 > ベクトルDB > DBに資料埋込(おまけ) 36 create_db.py④: ベクトルDBに資料を入れる(embedding) 問題点: DBの更新

    • Confluenceでは、日々新しい資料が追加・更新されている • 良い回答を生成するためにも、DBを最新状態に保ちたい… 新規資料/更新資料のみembeddingするようにしている(→update_db.py) 新規資料(新しくsofiaラベルが付与された資料) 更新資料(資改変された資料)
  16. retrieverの実装 > jira_retriever > クエリ検索(おまけ) 37 なぜJQLクエリはJiraRetrieverの外で作るのか? 生成した JQLクエリ 質問

    confluence_retriever jira_retriever この下でCQLクエリを作っている 外部でJQLクエリを作ってきている