コンテンツへスキップ

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

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

Posii株式会社は、AIプロダクト開発・運用を専門としています。
Webアプリケーション開発、データ分析基盤構築、クラウド活用支援など、お客様のビジネス課題に合わせた最適なソリューションをご提供いたします。

AI歴15年 代表取締役 大河原潤

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