Slide 1

Slide 1 text

Knowledge base for Amazon Bedrock で遊んでみた rinda2001 2024/11

Slide 2

Slide 2 text

• 自己紹介 • このLTでの到達点 • Knowledge base for Amazon Bedrock is 何 • 遊んでみる • 今回の引っかかりポイント • まとめ 目次

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

自己紹介 Akihiro Takamura (rinda2001) @rinda2001 テックリード エス・ビー・エス株式会社(S.B.S. inc.) Amplify / ECS / Codeシリーズ React/Next.js/ReactNativeと戯れる日々 Level 43 リングフィットアドベンチャー5年生(現在5周目終盤) クエン酸を飲み始めました

Slide 5

Slide 5 text

このLTでの到達点

Slide 6

Slide 6 text

このLTでの到達点 • 会社の就業規則(仮)を覚えて質問に答えるヤツ

Slide 7

Slide 7 text

Knowledge base for Amazon Bedrock is 何

Slide 8

Slide 8 text

Knowledge base for Amazon Bedrock is 何 • Bedrockの機能の一部 • 生成AIのユースケースとして広く使われる RAG(Retrieval-Augmented Generation)を簡単に 構築できる(らしい)サービス

Slide 9

Slide 9 text

あー、RAGね、あの、例のやつね

Slide 10

Slide 10 text

そもそもRAG is 何 • 生成AIに独自のデータを与えて回答させる技術 ‣ 企業独自の業務マニュアル ‣ 公開できない(したくない)データ ‣ 最新の情報 • 最新情報や固有知識を含むより正確で信頼性の高 い回答が可能になる ‣ モデル自身のチューニングを行わなくてもできる! • 一般的にベクトルDB(ストア)に情報を格納し、 LLMと連携する方式で実装

Slide 11

Slide 11 text

RAGとファインチューンの比較 Qiitaより転載 【ChatGPT】とベクトルデータベースによる企業内データの活用(いわゆるRAG構成) https://qiita.com/ksonoda/items/ba6d7b913fc744db3d79 モデル自体を修 正して覚えさせ る→むずい モデルは触ら ず、別でDBを 作るだけ→簡単

Slide 12

Slide 12 text

RAGの全体構成 チャンク分割 Embedding ユーザからの リクエスト Embedding 似たドキュメ ントを検索 回答生成 回答 ベクトルDB Embedding モデル Embedding モデル プログラム等 Textモデル データソース ? ??

Slide 13

Slide 13 text

Embedding

Slide 14

Slide 14 text

Embeddingとは • 読み:エンベディング • データをLLM等で扱いやすい形式に変換すること • 単語やデータポイント間の意味的な関係を捉える ことができる ‣ テキスト検索はその文字自体が出現しないとヒットしない ‣ Embeddingは文字が出現しなくても意味的に近いものを探 すことができる • Embeddingはモデルを利用して行う ‣ 日本語対応しているモデルとそうでないのがある Amazon Titan Text Embedding V2 Cohere Embed Multilingual

Slide 15

Slide 15 text

ベクトルDB

Slide 16

Slide 16 text

ベクトル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

Slide 17

Slide 17 text

Knowledge base for Amazon Bedrock

Slide 18

Slide 18 text

Knowledge Baseの役割 チャンク分割 Embedding ユーザからの リクエスト Embedding 似たドキュメ ントを検索 回答生成 回答 ベクトルDB Embedding モデル Embedding モデル プログラム等 Textモデル データソース

Slide 19

Slide 19 text

遊んでみた😀

Slide 20

Slide 20 text

Knowledge Baseで作ってみる構成 転載 Zenn - Amazon Bedrock for Knowledge baseを試す https://zenn.dev/kun432/scraps/c3d65c44e60755

Slide 21

Slide 21 text

遊んだストーリー 1. PineConeにindexを作る ‣ サインアップ / Starter plan(free) / index作成 2. PineConeのAPIキーをSecret Managerに置く 3. データソースを保存するS3バケットを作る 4. データソースファイルを加工してS3に置く 5. Knowledge Baseを作りembeddingする 6. Knowledge Base上でLLMを使って質問する

Slide 22

Slide 22 text

PineConeにindexを作る① • https://pinecone.io にサインアップ(free plan) • Create Index ‣ Index名:適当 ‣ Dimensions: 1,536 ‣ embeddingにTitan G1 Textを使うため ‣ このモデルが1536次元で出力する(後述のknowledge base画面) ‣ Metric: cosine

Slide 23

Slide 23 text

PineConeにindexを作る② • できあがったIndexへのアクセス方法をメモ ‣ HOSTのURL ‣ API Key ‣ 左ペインのAPI Keysから確認できる

Slide 24

Slide 24 text

PineConeのAPIキーをSecret Managerに置く • Secret Mangerに配置 ‣ Knowledge Baseはap-northeast-1に対応(やったね) ‣ Other type of secret -> key/value pair ‣ Key名は apiKey とする必要がある(お約束) ‣ できあがったsecret name, secret arnをメモしておく

Slide 25

Slide 25 text

データソースを保存するS3バケットを作る • S3バケットを作るだけ ‣ Knowledge baseと同じregionに(今回はap-northeast-1) ‣ Bucket nameは適当に ‣ その他の設定はデフォルトのままでOK

Slide 26

Slide 26 text

データソースファイルを加工してS3に置く • Knowledge baseは以下の形式をサポート ‣ txt / md / html / doc / docx / csv / xls / xlsx/ pdf • 検索精度を上げるには前処理が必要 ‣ xlsxやcsvであれば行単位とかでファイルを分ける ‣ htmlやmarkdownであればセクションごとにファイルを分 ける • 今回は漢気を見せて前処理せず長いpdfを1ファイ ルで放り込んでやる

Slide 27

Slide 27 text

Knowledge Baseを作りembeddingする① • Knowledge base -> Create Knowledge base ‣ Knowledge base name:適当 ‣ IAM Permission:Create and use a new service role ‣ Choose data source:S3

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Knowledge Baseを作りembeddingする③ • Embeddings model ‣ Titan Embeddings G1 – Text v1.2 を選択 ‣ 新型 Titan Embeddings Text 2 ってのもある(東京regionまだ)

Slide 30

Slide 30 text

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と入れた ‣ データのメタデータが格納されるフィールド名になる

Slide 31

Slide 31 text

Knowledge Baseを作りembeddingする⑤ • Syncする ‣ Knowledge Baseができてもまだデータが読み込まれておら ず、indexにも登録されていない状態になっている ‣ 手動でデータソースを選択し、Syncを実行する ‣ Index化には少し時間がかかるので待つ • Syncが終わればOK ‣ Pineconeの管理画面からindexの中身が見えるはず

Slide 32

Slide 32 text

Knowledge Base上でLLMを使って質問する① • できあがったベクトルDBを使った回答をさせる ‣ Knowledge Base上で簡単にchatできるようになっているの でそこから質問を投げてみる • Knowledge Baseの右ペイン->Select model ‣ 適当にClaude v2.1を選択

Slide 33

Slide 33 text

Knowledge Base上でLLMを使って質問する② • 質問してみた

Slide 34

Slide 34 text

今回の引っかかりポイント

Slide 35

Slide 35 text

今回の引っかかりポイント① • Knowledge Baseの作成時にエラー ‣ Knowledge Base作成時、secret managerがなんたらという エラー ‣ Secret ManagerにAPIキーを保存する際にKey/value形式でなく plain textでAPIキーを保存していたため ‣ 正しくはKey/value形式で保存。 ‣ その時のkey名は「apikey」じゃないとダメ(というお約束)

Slide 36

Slide 36 text

今回の引っかかりポイント② • Knowledge BaseのSyncでエラー ‣ embeddingで使うモデルがBedrockで利用申請していない とSync実行時にエラーになる ‣ Bedrockの各モデルは自発的に利用するsubmiをしないと有 効にならない ‣ Bedrock -> Model Accessから利用するモデルを有効化

Slide 37

Slide 37 text

まとめ

Slide 38

Slide 38 text

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