こんにちは。エンタープライズ第一本部の新人、佐藤悠です
はじめに
質問しまくる新人の私
私は現在、先輩社員の手を煩わせながら日々の業務を行っています。
先輩は質問を歓迎していますが、将来自分が同じ立場になった際に同じ振る舞いができる気がしないので今から対策をしようと思いつきました。
仕事で分からないことは当然のようですが2つに分けることができると思っています。
- 調べれば分かること
- 聞かないと分からないこと
当たり前ですが新人は聞かないと分からないことで質問をします。(私は調べればわかるが聞いた方が早そうなことは聞きますけど...)
業務上ではこのような聞かないと分からないような属人的な知識を扱うことがあります。
現場では、ほとんどが文書化されデータが存在しアクセス可能なところにありますが、規模が大きく複雑化した結果、その文書のありかを知っている人が限られているというような状態にも陥りがちです。
タスクは思考の過程から文字に起こす新人の私
私はあまりワーキングメモリがなく、次々と考えることが増えたときや次の日に持ち越した際に何をすればいいのか分からなくなりやすいので、以下のようにmdファイルでまとめたものがタスクごとに存在しています(実案件のものなので文字は読めないようぼかしてます)。
ここで割とこまめに文書に書き起こす自分の特徴とRAGって相性いいなと感じました。
前置きが長くなりましたが、この記事では業務上で扱う個別具体的な情報を回答できるように、自分がまとめたmdファイルでRAGを作成できるのかを技術的に検証します。
RAGとは
大規模言語モデル自体に変更を加えることなく参照する情報を指定することでハルシネーションの回避や特有の知識に対する回答の精度を高めることができます。
今回は以下のような構成をAWS上で準備することを考えます。
LangChainでRAGを実装することもできますが普段使用しているAWSでフルマネジドで作成することができるBedrock Knowledge bases[1]が簡単なので今回はこれを使用します。
Bedrock Knowledge basesでRAGを作成してみた
埋め込むデータは検証なので以下のようなダミーデータにしました。
これをRAGを使用せずに生成AIに案件Bの担当者は誰ですかと聞いても答えることは不可能でしょう。
では、先ほどのmdファイルをデータソースとして使用するためにS3に配置します。
次にBedrock Knowledge basesでこれを埋め込みするソースに指定します。
マネジメントコンソールでBedrockと検索し左のメニューからKnowledgebaseを選択します。
Knowledgebaseを作成を押下すると遷移先の画面でデータソースを指定できます。
次へを押下した遷移先で実際にmdファイルを置いたバケットのURIを指定します。
後は特別な設定をしない場合はアクセス許可をした埋め込み用のモデルを指定して、ベクトルデータベースをクイック作成で完了です。
ストア先はOpenSearchを使用しました。
作成したデータソースを同期します。
では無事に検索するべき情報をコンテキストに渡す準備ができました。
以下の指示にどのような回答が返ってくるかテストします。
いかに....!?
生成AIの思考では出せない一般的ではない名前のデータを出力させることに成功しました。
これで検証を終わります。
社内情報を使用していいのかとかの線引きを含めて超えないといけない壁は複数ありそうですが、技術的にできるのは嬉しいです。
ここまで読んでいただきありがとうございました。
参考資料
[1]How Amazon Bedrock knowledge bases work
https://docs.aws.amazon.com/bedrock/latest/userguide/kb-how-it-works.html
執筆:@sato.yu、レビュー:@nagamatsu.yuji
(Shodoで執筆されました)