OceanBase
English日本語简体中文
ドキュメントホーム
製品
エコシステム
リリース

データベース

OceanBase CloudOceanBaseデータベース

データベース

OceanBase CloudOceanBaseデータベース
OceanBase CloudOceanBaseデータベース

OceanBase Cloud

  • エコシステム統合の概要
  • データベースバージョニング
    • Liquibaseを使用したOceanBaseデータベースのバージョン管理
    • Flywayを使用したOceanBase Cloudデータベースのバージョン管理
  • データ統合
    • Canalを使用したデータの同期
    • dbtを使用したOceanBaseデータの分析
    • Debezium
    • Flinkによるデータの同期
    • AWS Glueを使用したOceanBaseデータの移行
    • Informatica CloudとOceanBaseデータベースの連携ガイド
    • OceanBaseデータベースとKafkaの統合に関するベストプラクティス
    • Maxwell
    • SeaTunnel
    • DataWorks
    • Apache NiFiによるOceanBase Cloudの統合
  • SQL 開発
    • DataGripでOceanBase Cloudデータベースに接続する
    • DBeaverでOceanBase Cloudに接続する
    • NavicatでOceanBase Cloudに接続する
    • TablePlusでOceanBase Cloudデータベースに接続する
  • オーケストレーション
    • DolphinScheduler
    • LinkisとOceanBaseデータベースの連携
    • AirflowとOceanBaseデータベースの連携
  • 可視化
    • GrafanaでOceanBase Cloudの監視ダッシュボードデータを表示する
    • Power BIでOceanBase Cloudに接続してデータを取得する
    • Quick BIでOceanBase Cloudに接続する
    • SupersetとOceanBase Cloudを使用したデータ分析
    • TableauからOceanBase Cloudに接続する
  • オブザーバビリティ
    • Datadogを使用したOceanBase Cloudインスタンスの監視
    • Prometheusを使用したOceanBaseデータの監視
  • データベース管理
    • BytebaseによるOceanBaseインスタンスの管理
  • AI
    • OceanBase Cloud VectorとLlamaIndexの連携
    • OceanBase Cloud VectorとDifyの連携
    • OceanBase Cloud VectorとLangChainの連携
    • OceanBase Cloud VectorとQwenの連携
    • OceanBase Cloud VectorとOpenAIの連携
    • OceanBase Cloudとn8nの連携
    • OceanBase MCP ServerとTraeの連携
    • OceanBase Cloud VectorとSpring AI Alibabaの連携
    • OceanBase MCP ServerとClineの連携
    • OceanBase MCP ServerとCursorの連携
    • OceanBase MCP ServerとContinueの連携
    • Google GenAI ToolboxとOceanBase MCP Serverの統合
    • OceanBase Cloud VectorとCamelAIの連携
    • OceanBase Cloud VectorとFirecrawlの連携
    • OceanBase Cloud VectorとHugging Faceの連携
    • OceanBase Cloud VectorとOllamaの連携
    • OceanBase Cloud VectorとGoogle Geminiの連携
    • OceanBase Cloud VectorとCloudflare Workers AIの連携
    • OceanBase MCP ServerとQoderの連携
    • OceanBase MCP ServerとOpenCodeの連携
    • OceanBase MCP ServerとClaude Codeの連携
    • OceanBase MCP ServerとGitHub Copilotの連携
    • OceanBase MCP ServerとCodexの連携
    • OceanBase Cloud VectorとJina AIの連携
    • OceanBase MCP ServerとAugment Codeの連携
    • OceanBase MCP ServerとKiroの連携
  • 開発ツール
    • Cloudflare WorkersでOceanBase Cloudに接続する
    • VercelでOceanBase Cloudに接続する

PDF をダウンロード

ドキュメントフィードバック
  1. ドキュメントセンター
  2. OceanBase Cloud

OceanBase Cloud VectorとOpenAIの連携

最終更新:2026-10-09 09:10:54

前提条件
ステップ1:データベース接続情報を取得する
ステップ2:LLMプラットフォームアカウントを登録する
ステップ3:ベクトルストレージとクエリ
OceanBase Cloudへのベクトルデータの保存
ベクトルデータのクエリ

OceanBaseはV4.3.3からベクトル型データの格納、ベクトルインデックス、そしてembeddingベクトル検索機能をサポートしています。これにより、ベクトル化したデータをOceanBaseに保存し、次の検索処理で利用できるようになりました。

OpenAIは人工知能企業であり、これまでに複数の大規模言語モデルを開発しています。これらのモデルは自然言語の理解や生成において優れた性能を発揮し、テキストの生成、質問への回答、対話などを行うことができます。これらのモデルはAPIを介してアクセスすることが可能です。

本記事では、OpenAIのAPIを利用して、ベクトル化したデータをOceanBase Cloudに保存し、OceanBase Cloudのベクトル検索機能を用いて関連するデータを検索する方法について説明します。

前提条件

  • 環境に利用可能なトランザクション型(MySQL)クラスタインスタンスがあります。テナントの作成を参照してテナントを作成した後、以下の手順を実行してください。

  • 環境に使用可能なMySQL互換モードのテナント、MySQLデータベース、およびアカウントが既に存在し、データベースアカウントに読み書き権限が付与されています。作成方法の詳細については アカウントの作成およびデータベースの作成(MySQL専用)をご参照ください。

  • プロジェクト管理者またはインスタンス管理者として、プロジェクト内のインスタンスに対する読み書き操作を実行できる権限を持っています。権限がない場合は、組織管理者に連絡して権限の追加を依頼してください。

  • Python 3.9以降のバージョンと対応するpipをインストールしています。マシンのPythonバージョンが低い場合は、Minicondaを使用して新しいPython 3.9以降の環境を作成できます。詳細については、Minicondaインストールガイドをご参照ください。

  • Poetry、Pyobvector、およびOpenAIをインストールします:

    python3 -m pip install poetry
    python3 -m pip install pyobvector
    python3 -m pip install openai
    

ステップ1:データベース接続情報を取得する

  1. ドロップダウンリストから、ID **クラスタインスタンスを選択**します。

  2. **概要**ページに移動します。

  3. 接続をクリックし、**接続文字列を取得**を選択します。

  4. ポップアップウィンドウで、**パブリックネットワークを使用**を選択します。

  5. アクセスアドレスを取得し、**現在のブラウザIPアドレスを追加**を選択します。

  6. データベース関連情報を入力し、**接続文字列をコピー**します。

ステップ2:LLMプラットフォームアカウントを登録する

注意

OpenAI APIキーの取得には、サードパーティプラットフォームへの移動が必要です。この操作はサードパーティプラットフォームの料金規則に従い、該当する料金が発生する可能性があります。続行する前に、その公式Webサイトにアクセスするか関連ドキュメントを確認し、料金体系を確認して同意してください。同意しない場合は、操作を続けないでください。

OpenAI APIキーを取得する:

  1. OpenAIプラットフォームにログインします。

  2. 右上の API Keys をクリックします。

  3. Create API Key をクリックします。

  4. 関連情報を入力し、Create API Key をクリックします。

OpenAI APIキーを環境変数に設定する:

  • Unixベースのシステム(UbuntuやMacOSなど)の場合、端末で以下のコマンドを実行できます:
export OPENAI_API_KEY='your-api-key'
  • Windowsシステムの場合、コマンドプロンプトで以下のコマンドを実行します。
set OPENAI_API_KEY=your-api-key

your-api-key を実際のOpenAI APIキーに置き換えてください。

ステップ3:ベクトルストレージとクエリ

OceanBase Cloudへのベクトルデータの保存

  1. テストデータの準備

事前にベクトル化されたデータを含むCSVファイルをダウンロードします。このファイルは、Alibaba Cloudが提供する1,000件のグルメレビューを含む公開データセットで、最終列は既にベクトル化されている値なので、再度ベクトルを計算する必要はありません。以下のコードを使用して、embedding列(つまりベクトル列)を再計算し、新しいCSVファイルを生成することもできます。

from openai import OpenAI
import pandas as pd
input_datapath = "./fine_food_reviews.csv"
client = OpenAI()
# ここではtext-embedding-ada-002埋め込みモデルを使用していますが、必要に応じて調整可能です。
def embedding_text(text, model="text-embedding-ada-002"):
    # embeddingベクトルの作成方法については、次のURLを参照してください:https://community.openai.com/t/embeddings-api-documentation-needs-to-updated/475663
    res = client.embeddings.create(input=text, model=model)
    return res.data[0].embedding
df = pd.read_csv(input_datapath, index_col=0)
# 実際の生成には数分かかります。OpenAI Embedding APIを行ごとに呼び出します。
df["embedding"] = df.combined.apply(embedding_text)
output_datapath = './fine_food_reviews_self_embeddings.csv'
df.to_csv(output_datapath)
  1. 以下のスクリプトを実行して、テストデータをOceanBase Cloudに挿入します。スクリプトがあるディレクトリは、テストデータがあるディレクトリと同じである必要があります。
import os
import sys
import csv
import json
from pyobvector import *
from sqlalchemy import Column, Integer, String
# pyobvectorを使用してOBに接続する場合、ユーザー名やパスワードに@が含まれる場合は、%40に置き換えてください。
client = ObVecClient(uri="host:port", user="username",password="****",db_name="test")
# 事前に準備されたテストデータセットは既にベクトル化されています。デフォルトではPythonスクリプトと同じディレクトリに配置されています。自分で再度ベクトル化した場合は、対応するファイルに置き換えてください。
file_name = "fine_food_reviews.csv"
file_path = os.path.join("./", file_name)
# 列を定義します。ベクトル化された列は最後のフィールドに配置されています。
cols = [
    Column('id', Integer, primary_key=True, autoincrement=False),
    Column('product_id', String(256), nullable=True),
    Column('user_id', String(256), nullable=True),
    Column('score', Integer, nullable=True),
    Column('summary', String(2048), nullable=True),
    Column('text', String(8192), nullable=True),
    Column('combined', String(8192), nullable=True),
    Column('n_tokens', Integer, nullable=True),
    Column('embedding', VECTOR(1536))
]
# テーブル名
table_name = 'fine_food_reviews'
# テーブルが存在しない場合は作成します。
if not client.check_table_exists(table_name):
    client.create_table(table_name,columns=cols)
    # ベクトル列のインデックスを作成します。
    client.create_index(
        table_name=table_name,
        is_vec_index=True,
        index_name='vidx',
        column_names=['embedding'],
        vidx_params='distance=l2, type=hnsw, lib=vsag',
    )
# CSVファイルを開いて読み込みます。
with open(file_name, mode='r', newline='', encoding='utf-8') as csvfile:
    csvreader = csv.reader(csvfile)
    # ヘッダー行を読み取ります。
    headers = next(csvreader)
    print("Headers:", headers)
    batch = [] # データを格納し、10行ごとにデータベースに挿入します。
    for i, row in enumerate(csvreader):
        # CSVファイルには9つのフィールドがあります: id,product_id,user_id,score,summary,text,combined,n_tokens,embedding
        if not row:
            break
        food_review_line= {'id':row[0],'product_id':row[1],'user_id':row[2],'score':row[3],'summary':row[4],'text':row[5],\
        'combined':row[6],'n_tokens':row[7],'embedding':json.loads(row[8])}
        batch.append(food_review_line)
        # 10行ごとに挿入します。
        if (i + 1) % 10 == 0:
            client.insert(table_name,batch)
            batch = []  # バッファをクリア
    # 残りの行(ある場合)を挿入します。
    if batch:
        client.insert(table_name,batch)
# テーブル内のデータを確認し、すべてのデータが挿入されたことを保証します。
count_sql = f"select count(*) from {table_name};"
cursor = client.perform_raw_text_sql(count_sql)
result = cursor.fetchone()
print(f"インポートデータ総件数:{result[0]}")

ベクトルデータのクエリ

  1. 以下のPythonスクリプトをopenAIQuery.pyという名前で保存します。
import os
import sys
import csv
import json
from pyobvector import *
from sqlalchemy import func
from openai import OpenAI
# コマンドライン引数の取得
if len(sys.argv) != 2:
    print("検索キーワードを入力してください。")
    sys.exit()
queryStatement = sys.argv[1]
# pyobvectorを使用してOBに接続する際、ユーザー名やパスワードに@が含まれる場合は、%40に置き換えてください。
client = ObVecClient(uri="host:port", user="usename",password="****",db_name="test")
openAIclient = OpenAI()
# テキストベクトルを生成する関数を定義する
def generate_embeddings(text, model="text-embedding-ada-002"):
    # ベクトル埋め込みの方法については、次のURLを参照してください:https://community.openai.com/t/embeddings-api-documentation-needs-to-updated/475663
    res = openAIclient.embeddings.create(input=text, model=model)
    return res.data[0].embedding

def query_ob(query, tableName, vector_name="embedding", top_k=1):
    embedding = generate_embeddings(query)
    # 近似最近傍探索を実行する
    res = client.ann_search(
        table_name=tableName,
        vec_data=embedding,
        vec_column_name=vector_name,
        distance_func=func.l2_distance,
        topk=top_k,
        output_column_names=['combined']
    )
    for row in res:
        print(str(row[0]).replace("Title: ", "").replace("; Content: ", ": "))
# テーブル名
table_name = 'fine_food_reviews'
query_ob(queryStatement,table_name,'embedding',1)
  1. 質問を入力し、関連する回答を出力します。
python3 openAIQuery.py 'pet food'

期待される結果は以下のとおりです:

Crack for dogs.: These thing are like crack for dogs. I am not sure of the make-up but the doggies sure love them.

前のトピック

OceanBase Cloud VectorとQwenの連携
前へ

次のトピック

OceanBase Cloudとn8nの連携
次へ
このページの内容
前提条件
ステップ1:データベース接続情報を取得する
ステップ2:LLMプラットフォームアカウントを登録する
ステップ3:ベクトルストレージとクエリ
OceanBase Cloudへのベクトルデータの保存
ベクトルデータのクエリ