Ai

Weaviate APIで作る業務自動化:実装サンプルと設計の勘所

皆さんは、日々進化するAI技術を目の当たりにして、このように思ったことはないでしょうか。

「ChatGPTは便利だけれど、自社の社内規定や専門的な製品情報のことを知らないから、実務で使うには限界がある」

もし、AIがあなたの会社のすべてのドキュメントを読み込み、瞬時に必要な情報を探し出し、それに基づいて的確な回答をしてくれるとしたらどうでしょう。膨大なマニュアルから該当箇所を探す時間はゼロになり、顧客からの問い合わせ対応は劇的にスピードアップします。

これを実現する技術が「ベクトルデータベース」であり、その中でも特に開発者や企業から熱い視線を浴びているのが**Weaviate(ウィービエイト)**です。

本記事では、AIによる業務自動化の鍵となる「Weaviate API」について、エンジニアではない方にも分かるように仕組みを解説し、実際にどのようにシステムを構築すればよいのか、具体的なサンプルコードと設計の勘所をお伝えします。

単なる検索ツールの導入ではありません。これは、あなたのビジネスに「専用の頭脳」を持たせるためのロードマップです。


Weaviateとは? なぜ今、注目されているのか

まず、技術的な詳細に入る前に、Weaviateが何なのか、なぜこれほどまでに重要視されているのかを噛み砕いて解説します。

従来のデータベースとの違い

私たちが普段使っているExcelや従来システム(リレーショナルデータベース)は、「キーワード」で情報を探します。例えば、「請求書」というファイルを探す場合、ファイル名や本文に「請求書」という文字が含まれていなければ見つかりません。「支払いのお知らせ」というファイル名では、中身が請求書でもヒットしないのです。

一方、Weaviateのようなベクトルデータベースは、「意味」で情報を探します。

AIはテキストデータを「ベクトル」と呼ばれる数値の列(座標のようなもの)に変換します。これを「埋め込み(Embedding)」と呼びます。

  • 「請求書」
  • 「支払いのお知らせ」
  • 「インボイス」

これらは文字としては全く異なりますが、意味(ベクトル)としては非常に近い場所に配置されます。Weaviateは、この「意味の近さ」を計算してデータを検索します。そのため、「お金を払う書類」と検索しても、上記のファイルすべてを見つけ出すことができるのです。

Weaviateが選ばれる理由

数あるベクトルデータベースの中で、Weaviateが特に支持される理由は以下の3点です。

  1. 検索と生成の統合単に検索するだけでなく、検索結果をLLM(大規模言語モデル)に渡して回答を生成させる機能(RAG)が標準で組み込まれています。
  2. 多様なデータに対応テキストだけでなく、画像や音声もベクトル化して検索可能です。
  3. 高速性とスケーラビリティ数億件規模のデータであっても、ミリ秒単位で検索結果を返す爆速のパフォーマンスを誇ります。

業務自動化への活用シーン

Weaviateを活用することで、具体的にどのような業務改善が可能になるのでしょうか。代表的なユースケースを紹介します。

1. 社内ヘルプデスクの自動化(RAG構築)

最もポピュラーな活用法です。就業規則、経費精算マニュアル、ITツールの使い方などの社内ドキュメントをWeaviateに保存します。

社員が「来週から産休に入りたいんだけど手続きはどうすればいい?」とチャットボットに聞くと、AIは「産休・育休規程」の中から関連する条項を探し出し、「以下の手順で申請してください」と回答を作成してくれます。

2. 類似契約書の検索システム

法務部門において、過去の膨大な契約書の中から「損害賠償条項について、今回と似たような条件で結んだ過去の契約」を瞬時にピックアップできます。条文の言葉遣いが違っても、法的な意味合いが似ていれば検索可能です。

3. ECサイトの「感覚的」商品検索

「春っぽくて、オフィスでも着られそうな明るい色のブラウス」といった、曖昧な検索ワードに対し、商品の画像や説明文の雰囲気(ベクトル)から最適な商品を推薦するシステムが構築できます。


実装サンプル:社内ドキュメント検索AIを作る

ここからは、実際にPythonというプログラミング言語を使って、Weaviate APIを操作する流れを見ていきましょう。

「コードは書けない」という方も、どのようなロジックで動いているのかを知ることは、開発者への指示出しやシステム設計において非常に重要です。

ここでは、「社内のQ&Aデータを検索できるAI」を想定します。

前提:仕組みの全体像

  1. データ準備: Q&Aリストを用意する。
  2. 接続: Weaviateのサーバーに接続する。
  3. 格納: データをベクトル化してWeaviateに保存する。
  4. 検索: 質問文を投げて、類似する回答を探し出す。

ステップ1:ライブラリのインストールと接続

まずはWeaviateを操作するためのツール(ライブラリ)を準備し、サーバーへ接続します。

Weaviateはクラウド版(Weaviate Cloud Services)を使うのが一般的ですが、今回はコードのイメージを掴んでいただくことに注力します。

Python

import weaviate
import json

# Weaviateクライアントの初期化
# OpenAIのAPIキーを設定することで、自動的にテキストをベクトル化してくれます
client = weaviate.Client(
    url="https://your-weaviate-cluster.weaviate.cloud",  # 自身のWeaviate URL
    auth_client_secret=weaviate.AuthApiKey(api_key="YOUR_WEAVIATE_KEY"),
    additional_headers={
        "X-OpenAI-Api-Key": "YOUR_OPENAI_API_KEY"
    }
)

print("接続成功!")

ステップ2:データの「入れ物」を作る(スキーマ定義)

データベースに「どんなデータを入れるか」を定義します。これを「クラス」や「スキーマ」と呼びます。ここでは「Question」というクラスを作ります。

Python

class_obj = {
    "class": "Question",
    "description": "社内のよくある質問とその回答",
    "vectorizer": "text2vec-openai",  # OpenAIを使ってベクトル化する指定
    "moduleConfig": {
        "text2vec-openai": {},
        "generative-openai": {}  # 生成AI機能も有効化
    },
    "properties": [
        {
            "name": "question",
            "dataType": ["text"],
            "description": "質問内容"
        },
        {
            "name": "answer",
            "dataType": ["text"],
            "description": "回答内容"
        },
        {
            "name": "category",
            "dataType": ["text"],
            "description": "カテゴリ(人事、経理、ITなど)"
        }
    ]
}

# 定義をWeaviateに登録
client.schema.create_class(class_obj)
print("スキーマ作成完了!")

ステップ3:データを登録する

ここがポイントです。データを登録する際、私たちは「ベクトル化(数値化)」の複雑な計算をする必要はありません。text2vec-openaiというモジュールを指定しているため、テキストを入れるだけでWeaviateが勝手にOpenAIと通信し、ベクトルに変換して保存してくれます。

Python

# 登録するサンプルデータ
data = [
    {
        "question": "交通費の精算期限はいつですか?",
        "answer": "利用した月の翌月5営業日までに申請してください。",
        "category": "経理"
    },
    {
        "question": "VPNがつながらない場合は?",
        "answer": "PCを再起動し、それでもダメならIT部門へ連絡してください。",
        "category": "IT"
    },
    {
        "question": "有給休暇の申請方法は?",
        "answer": "勤怠管理システムから3日前までに申請が必要です。",
        "category": "人事"
    }
]

# データをWeaviateに投入
with client.batch as batch:
    batch.batch_size = 100
    for d in data:
        batch.add_data_object(d, "Question")

print("データ登録完了!")

ステップ4:AI検索を実行する(NearText検索)

いよいよ検索です。ユーザーが「電車代の申請いつまで?」と質問したとします。

キーワード検索では「電車代」という言葉がデータに含まれていないためヒットしませんが、Weaviateならどうなるでしょうか。

Python

response = (
    client.query
    .get("Question", ["question", "answer", "category"])
    .with_near_text({
        "concepts": ["電車代の申請いつまで?"]
    })
    .with_limit(1)
    .do()
)

print(json.dumps(response, indent=2, ensure_ascii=False))

実行結果のイメージ:

AIは「電車代」=「交通費」、「いつまで」=「期限」と意味を理解し、以下のデータを返します。

質問:交通費の精算期限はいつですか?

回答:利用した月の翌月5営業日までに申請してください。

これが、Weaviateによるセマンティック検索(意味検索)の威力です。


設計の勘所:失敗しないためのポイント

コードが動くことと、実務で使えるシステムになることは別問題です。

業務自動化を成功させるために、設計段階で考慮すべき「プロの勘所」を3つ紹介します。

1. チャンク化戦略(データの切り分け方)

長いマニュアル(PDFなど)をそのまま1つのデータとして登録してはいけません。

例えば、全100ページの就業規則を丸ごとベクトル化してしまうと、「有給について」と検索した際に、100ページ全体がヒットしてしまい、具体的にどこに書いてあるかが分かりづらくなります。

対策:

ドキュメントは適切なサイズ(チャンク)に分割して登録します。

  • 章ごと、あるいは段落ごとに分割する。
  • 1チャンクあたり500文字~1000文字程度を目安にする。
  • 分割したデータには「元のドキュメントのタイトル」や「ページ番号」をメタデータとして付与しておく。

こうすることで、AIは「就業規則の15ページ目の第3項」というピンポイントな情報を引き出せるようになります。

2. ハイブリッド検索の活用

ベクトル検索は「意味」を捉えるのが得意ですが、「型番」や「社員ID」のような完全一致が必要な検索は苦手な場合があります。

例えば、「製品型番 X-200 の仕様」を知りたいのに、ベクトル検索だけだと「X-200」と似た雰囲気の「Z-300」もヒットしてしまう可能性があります。

対策:

Weaviateの「ハイブリッド検索」機能を使いましょう。これは「キーワード検索(BM25)」と「ベクトル検索」を組み合わせる手法です。

「型番はキーワードで完全一致させつつ、仕様の説明はベクトルで意味検索する」といった柔軟な挙動が可能になり、検索精度が劇的に向上します。

3. メタデータフィルタリングによる高速化と精度向上

全データから検索すると時間がかかるだけでなく、無関係な部署のデータがヒットするノイズの原因になります。

対策:

検索する前に「フィルタリング」を行います。

ステップ2のスキーマ定義で「category」を設定しました。これを利用し、「経理に関する質問」の場合は、最初からcategory = “経理”のデータだけに絞り込んでからベクトル検索を行います。これにより、IT部門の似たような用語との混同を避け、回答の信頼性を高めることができます。


導入時の注意点

夢のような技術ですが、導入にあたって注意すべき点もあります。

コスト管理

Weaviate自体の利用料(クラウド版の場合)に加え、ベクトル化や生成を行うためにOpenAIなどのAPI利用料が発生します。大量のドキュメントを一気に登録する場合や、全社員が頻繁に検索する場合、コストが想定を上回ることがあります。まずは対象ドキュメントを絞ったスモールスタートを推奨します。

データの鮮度と更新運用

社内規定は変わるものです。古い情報がWeaviateに残ったままだと、AIが自信満々に嘘をつく(ハルシネーションの一種)原因になります。

元のドキュメントが更新されたら、Weaviate上のデータも即座に更新・削除する運用フローを自動化しておく必要があります。

セキュリティとプライバシー

外部のLLM(OpenAIなど)を利用する場合、社外秘データがAPI経由で送信されることになります。現在、多くのエンタープライズ版APIは学習データに利用されない規約になっていますが、導入前に自社のセキュリティポリシーと照らし合わせ、場合によってはローカル環境で動くLLMや埋め込みモデルの利用を検討してください。


まとめ:AIを「検索」から「活用」へ

Weaviate APIを活用することで、これまでの「キーワードが一致しないと見つからない」という検索のストレスから解放されます。それだけでなく、社内に眠る膨大なナレッジを、まるで隣にいる優秀な同僚に聞くかのように活用できるようになります。

今回の記事では以下のポイントを解説しました。

  • Weaviateは「言葉の意味」を理解して検索するベクトルデータベースである。
  • Pythonを使えば、わずか数十行のコードで「社内版ChatGPT」の原型が作れる。
  • 実用化のためには、データの分割(チャンク化)やハイブリッド検索などの設計が重要である。

まずは、部署内のFAQやマニュアルなど、身近で小規模なデータを使ってプロトタイプを作成してみてください。「自分の質問に、AIが自社の資料を使って答えてくれた」という体験は、業務改革への大きな第一歩となるはずです。

テクノロジーは、使って初めて価値を生みます。ぜひ、今日からWeaviateによる業務自動化への挑戦を始めてみてください。

TOP