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

Knowledge base for Amazon Bedrock で遊んでみた

rinda2001
November 01, 2024

Knowledge base for Amazon Bedrock で遊んでみた

簡単にRAGが作れると噂のKnowledge base for Amazon Bedrockで遊んでみました。

この会では就業規則を想定した文書をRAGに取り込み、LLMに就業規則に関する問い合わせをして回答してもらいます。

rinda2001

November 01, 2024
Tweet

Other Decks in Technology

Transcript

  1. • 自己紹介 • このLTでの到達点 • Knowledge base for Amazon Bedrock

    is 何 • 遊んでみる • 今回の引っかかりポイント • まとめ 目次
  2. 自己紹介 Akihiro Takamura (rinda2001) @rinda2001 テックリード エス・ビー・エス株式会社(S.B.S. inc.) Amplify /

    ECS / Codeシリーズ React/Next.js/ReactNativeと戯れる日々 Level 43 リングフィットアドベンチャー5年生(現在5周目終盤) クエン酸を飲み始めました
  3. Knowledge base for Amazon Bedrock is 何 • Bedrockの機能の一部 •

    生成AIのユースケースとして広く使われる RAG(Retrieval-Augmented Generation)を簡単に 構築できる(らしい)サービス
  4. そもそもRAG is 何 • 生成AIに独自のデータを与えて回答させる技術 ‣ 企業独自の業務マニュアル ‣ 公開できない(したくない)データ ‣

    最新の情報 • 最新情報や固有知識を含むより正確で信頼性の高 い回答が可能になる ‣ モデル自身のチューニングを行わなくてもできる! • 一般的にベクトルDB(ストア)に情報を格納し、 LLMと連携する方式で実装
  5. RAGの全体構成 チャンク分割 Embedding ユーザからの リクエスト Embedding 似たドキュメ ントを検索 回答生成 回答

    ベクトルDB Embedding モデル Embedding モデル プログラム等 Textモデル データソース ? ??
  6. Embeddingとは • 読み:エンベディング • データをLLM等で扱いやすい形式に変換すること • 単語やデータポイント間の意味的な関係を捉える ことができる ‣ テキスト検索はその文字自体が出現しないとヒットしない

    ‣ Embeddingは文字が出現しなくても意味的に近いものを探 すことができる • Embeddingはモデルを利用して行う ‣ 日本語対応しているモデルとそうでないのがある Amazon Titan Text Embedding V2 Cohere Embed Multilingual
  7. ベクトルDB • RAGに使う情報を格納しておくストア • 情報を数値表現(Embedding)にして保存 • 非構造化データOK、index化OK、類似性検索OK • 以下のようなサービスがベクトルDBとして使える Amazon

    OpenSearch Amazon OpenSearch Serverless Amazon Aurora PostgeSQL Amazon RDS for PostgeSQL Amazon DynamoDB via zero-ETL Amazon MemoryDB for Redis 参考 AWS オンラインセミナー RAG on AWS dive deep https://pages.awscloud.com/rs/112-TZM-766/images/20240919-AWS-AIML-1-rag-on-aws-dive-deep.pdf AWS Service 3rd party Service
  8. Knowledge Baseの役割 チャンク分割 Embedding ユーザからの リクエスト Embedding 似たドキュメ ントを検索 回答生成

    回答 ベクトルDB Embedding モデル Embedding モデル プログラム等 Textモデル データソース
  9. 遊んだストーリー 1. PineConeにindexを作る ‣ サインアップ / Starter plan(free) / index作成

    2. PineConeのAPIキーをSecret Managerに置く 3. データソースを保存するS3バケットを作る 4. データソースファイルを加工してS3に置く 5. Knowledge Baseを作りembeddingする 6. Knowledge Base上でLLMを使って質問する
  10. PineConeにindexを作る① • https://pinecone.io にサインアップ(free plan) • Create Index ‣ Index名:適当

    ‣ Dimensions: 1,536 ‣ embeddingにTitan G1 Textを使うため ‣ このモデルが1536次元で出力する(後述のknowledge base画面) ‣ Metric: cosine
  11. PineConeのAPIキーをSecret Managerに置く • Secret Mangerに配置 ‣ Knowledge Baseはap-northeast-1に対応(やったね) ‣ Other

    type of secret -> key/value pair ‣ Key名は apiKey とする必要がある(お約束) ‣ できあがったsecret name, secret arnをメモしておく
  12. データソースファイルを加工してS3に置く • Knowledge baseは以下の形式をサポート ‣ txt / md / html

    / doc / docx / csv / xls / xlsx/ pdf • 検索精度を上げるには前処理が必要 ‣ xlsxやcsvであれば行単位とかでファイルを分ける ‣ htmlやmarkdownであればセクションごとにファイルを分 ける • 今回は漢気を見せて前処理せず長いpdfを1ファイ ルで放り込んでやる
  13. Knowledge Baseを作りembeddingする① • Knowledge base -> Create Knowledge base ‣

    Knowledge base name:適当 ‣ IAM Permission:Create and use a new service role ‣ Choose data source:S3
  14. Knowledge Baseを作りembeddingする② • Data source設定 ‣ Data source name:適当 ‣

    S3 URI:さっき作ったバケットを指定 ‣ Chanking and parsing configurations ‣ デフォルトだと300トークン単位で分割される ‣ 変な箇所で区切られたりすると検索精度に影響する ‣ Contextとしておかしくない単位でチャンク分割が理想 ‣ 今回は何も考えずdefault(300トークン)で
  15. Knowledge Baseを作りembeddingする③ • Embeddings model ‣ Titan Embeddings G1 –

    Text v1.2 を選択 ‣ 新型 Titan Embeddings Text 2 ってのもある(東京regionまだ)
  16. Knowledge Baseを作りembeddingする④ • Vector database ‣ Pineconeを選択 ‣ Endpoint URL:

    PineconeでメモしたURL ‣ Credentials secret ARN: Secret Managerで作ったARN ‣ text field name: textと入れた。深く考えなくてOK ‣ ベクトル化されたテキストが格納されるフィールド名になる ‣ Bedrock-managed metadata field name: metadataと入れた ‣ データのメタデータが格納されるフィールド名になる
  17. 今回の引っかかりポイント① • Knowledge Baseの作成時にエラー ‣ Knowledge Base作成時、secret managerがなんたらという エラー ‣

    Secret ManagerにAPIキーを保存する際にKey/value形式でなく plain textでAPIキーを保存していたため ‣ 正しくはKey/value形式で保存。 ‣ その時のkey名は「apikey」じゃないとダメ(というお約束)
  18. まとめ • 独自のデータを使ってLLMで回答する仕組みをRAGという ‣ 自社だけの情報を覚えたAIを作りたいという 企業ニーズに適合する • RAGはKnowledge baseを利用することで簡単に作れちゃう ‣

    必要なのはデータ、あとは設定だけでいける ‣ 検索・回答精度を上げたいときは前処理(コード) ‣ もっとマジでやるならモデルのチューニングもしくは作成 • 今回作ったものをアプリケーションに組み込むには? ‣ AWS SDK / Lambda / ApiGatewayあたりで返せばOK • LLMに関連する色々なサービスが生まれ、マッシュアップされて この簡単さを実現できているところが胸熱ポイント