コンテンツへスキップ

Amazon BedrockでAIに独自データを学習させる方法をプログラムで自動化しよう!


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の世界は、プログラミングと組み合わせることで、もっともっと便利になりますよ!

最後までお読みいただき、心より感謝申し上げます。

大河原潤

大河原 潤

AI開発専門家

ブーム以前からAI研究に携わる、本物の専門家。「AIに使われる」のではなく、「AIを使いこなす」確かな技術力を提供します。

【アカデミックな裏付け】

  • カリフォルニア大学リバーサイド校 博士前期課程修了(研究分野:測度論、経路積分)
  • アメリカ数学会のジャーナルに論文発表

【社会的に認められた専門性】

  • AI関連書籍:『誤解だらけの人工知能』(2018年)、『AI×Web3の未来』(2023年)
  • プログラミング専門書:実務的な技術書を2冊出版(確かな実装力の証明)
  • 100社以上のAI導入コンサルティング実績、特許売却経験あり

より具体的な開発事例や実装の詳細は、下記ページでご紹介しております。