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

Knowledge base for Amazon Bedrock で遊んでみた

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for rinda2001 rinda2001
November 01, 2024

Knowledge base for Amazon Bedrock で遊んでみた

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

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

Avatar for rinda2001

rinda2001

November 01, 2024
Tweet

More Decks by rinda2001

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に関連する色々なサービスが生まれ、マッシュアップされて この簡単さを実現できているところが胸熱ポイント