
AIチャットボットって、いろんな質問に答えてくれますよね。でも、**「うちの会社のルールを教えて」とか、「この前送った企画書の要約をして」**といった、インターネットにはない自分だけのデータについては答えることができません。
そこで登場するのが、Amazon Bedrockのナレッジベースです。これは、AIに自分だけの**「教科書」を読ませて、その内容に基づいて答えられるようにする仕組みです。この「教科書」のことをデータソース**と呼びます。
この記事では、通常は手作業で設定するこの「教科書」の準備を、Pythonというプログラミング言語を使って自動化する方法を、中学生にもわかるように解説します。
Amazon Bedrockとは?
Amazon Bedrockは、いろんな種類のAI(大規模言語モデル、LLM)を簡単に使えるようにしてくれるサービスです。自分で難しい設定をしなくても、高性能なAIをすぐに使い始めることができます。
なぜAIに教科書を読ませる必要があるの?
AIは、インターネット上の膨大な情報で学習していますが、最新の情報や、あなたの会社や個人のデータは知りません。そこで、ナレッジベースに独自のデータを登録することで、AIがそのデータを使って質問に答えられるようになります。
例えば、会社の「よくある質問(FAQ)」を登録すれば、社員からの質問にAIがすぐに答えられる社内ヘルプデスクが作れます。
「チャンク」って何?
AIに長い文章を渡すと、一度に理解するのが難しいことがあります。まるで、分厚い本を丸ごと暗記しようとするようなものです。
そこで、文章をいくつかの小さなかたまりに分ける作業をします。このかたまりのことを「チャンク(chunk)」と呼びます。
チャンクに分けることで、AIは小さなかたまりごとに内容をしっかり理解し、効率的に情報を探せるようになります。
今回のプログラムでは、この「チャンク」の分け方を細かく設定しています。
maxTokens
: チャンクの大きさを「1000」に設定しています。1000文字くらいのまとまりで区切るイメージです。この値は、AIに読ませる文章の量や内容によって、最適な値が変わります。 たとえば、企業の技術文書など、情報が豊富で長い文章を扱う場合は、1000文字よりも大きく設定すると、文脈がより切れにくくなります。ぜひ、使いやすいように調整してみてください。overlapPercentage
: 前後のチャンクに少しだけ「かぶり(overlap)」を持たせています。こうすることで、文脈が途切れるのを防ぎ、AIがよりスムーズに文章を理解できるようになります。
プログラムでデータソースを作る意味
通常、データソースの作成は、AWSのWebサイト上でポチポチとクリックして設定します。でも、毎回この作業をするのは大変ですよね。
プログラムを使えば、この設定作業を自動化できます。
- 手間をなくす: 何度も同じ作業をする必要がなくなります。
- 間違いを防ぐ: 人が手作業でやると、設定ミスが起こる可能性がありますが、プログラムなら常に同じ設定で作成できます。
- 簡単に共有: プログラムのコードを渡すだけで、他の人も全く同じ設定でデータソースを作成できます。
つまり、**「設定作業を自動化して、誰でも、いつでも、同じようにデータソースを作れるようにすること」**が、このプログラムの目的です。
Pythonスクリプト解説
以下に、データソースを作成するPythonスクリプトを紹介します。
Python
import boto3
import os
import pprint
import uuid
# --- 設定情報 ---
# ここにナレッジベースのIDを入力してください
KNOWLEDGE_BASE_ID = "あなたのナレッジベースID"
# データソースの名前。毎回違う名前にするために自動で文字をつけ足します
NEW_DATA_SOURCE_NAME = f"my-inline-data-source-{uuid.uuid4().hex[:8]}"
REGION_NAME = 'us-east-1' # ナレッジベースがある場所(リージョン)
# --- boto3クライアントの初期化 ---
# PythonからAWSサービスを使うための準備
try:
client = boto3.client(
'bedrock-agent',
region_name=REGION_NAME
)
print(f"新しいデータソース '{NEW_DATA_SOURCE_NAME}' を作成します...")
# create_data_source という「データソースを作って!」という命令をAWSに出します
response = client.create_data_source(
knowledgeBaseId=KNOWLEDGE_BASE_ID,
name=NEW_DATA_SOURCE_NAME,
description="プログラムから作成されたデータソース",
dataSourceConfiguration={
"type": "CUSTOM" # 「インライン取り込み」のための設定
},
vectorIngestionConfiguration={
"chunkingConfiguration": {
"chunkingStrategy": "FIXED_SIZE",
"fixedSizeChunkingConfiguration": {
"maxTokens": 1000, # この値を調整して、最適なチャンクサイズを試してみてください
"overlapPercentage": 20
}
}
}
)
print("\nデータソースの作成に成功しました!")
pprint.pprint(response)
NEW_DATA_SOURCE_ID = response['dataSource']['dataSourceId']
print(f"\n**新しいデータソースID: {NEW_DATA_SOURCE_ID}**")
print("このIDを使って、独自のデータをAIに学習させることができます。")
except Exception as e:
print("\nエラーが発生しました。")
print(f"エラー内容: {e}")
補足:"type": "CUSTOM"
について
このスクリプトで使っている "type": "CUSTOM"
は、特定のファイルを指定するのではなく、プログラムから直接APIを介してテキストデータを取り込む、いわゆるインライン取り込みを行うための設定です。
一方、Amazon S3というAWSのストレージサービスにあらかじめファイルを置いておき、それをデータソースとして指定する方法もあります。S3を使う場合は、"type": "S3"
を指定し、バケットの情報を設定します。どちらの方法を選ぶかは、データの保存場所や更新頻度など、利用する状況によって判断すると良いでしょう。
このように、プログラムを使えば、AIに自分だけの「教科書」を読ませる準備を、手間なく、正確に行うことができるのです。AIの世界は、プログラミングと組み合わせることで、もっともっと便利になりますよ!