「OceanBaseを使用して、ゼロからLangchainの代替を作成する」
Creating an alternative to Langchain from scratch using OceanBase.
最近、私は分散リレーショナルデータベース管理システムであるOceanBaseの世界を探求しています。その広範なドキュメンテーションをナビゲートしていく中で、この課題の大きさに気づきました – 内容の膨大さから、正確な情報を迅速かつ効率的に見つけることは困難でした。
この経験から、ひらめきが生まれました。もし、このプロセスを簡素化する方法があったらどうでしょうか?AIの力を活用して、この膨大な情報の海をナビゲートできたらどうでしょうか?そこで、OceanBaseのためのドキュメントチャットボットの概念が生まれました。
しかし、このアイデアを一歩進めたかったのです。プロジェクトをより魅力的にし、OceanBaseの理解を深めるために、AIトレーニングのためにOceanBase自体をベクトルデータベースとして使用することにしました。このアプローチは、情報検索の課題に実用的な解決策を提供するだけでなく、OceanBaseの機能を異なる視点から探求するユニークな機会を提供します。
このブログ記事では、このアイデアを実現するための旅を共有します。AIとOceanBaseの統合からモデルのトレーニング、チャットボットの作成まで、私たちは途中で遭遇した課題、解決策、洞察を探求します。AIの熱狂者、データベースの専門家、またはこれらの2つの分野の交差点に興味がある方々、このエキサイティングな探求にぜひご参加ください。
要約:
- このプロジェクトは、AIをOceanBaseに統合して、OceanBaseのドキュメンテーションや他のGitHubホストされたドキュメンテーションに基づいてユーザーのクエリに答えることができるドキュメントチャットボットを作成します。
- ユーザーの質問とドキュメントの記事は、比較と回答生成のためにベクトル表現に変換されます。
- OceanBaseはベクトルデータ型のサポートを持たないため、ベクトルはJSONとして格納および取得されます。
- プロジェクト環境の設定、モデルのトレーニング、サーバーの設定に関するステップバイステップガイドを探索します。
- このプロジェクトは、AIと機械学習の可能性を最大限に活用するために、OceanBaseがベクトルデータ型のサポートを組み込む必要性を強く示しています。
プロジェクトへのいくつかの考察
OceanBaseとAIを統合するこのプロジェクトに取り組むことは、挑戦的でありながらも報酬のある試みでした。これは、AIとデータベースの複雑さに没頭する機会であり、豊かな学びの経験を提供しました。
一般的に、私たちが作りたいドキュメントチャットボットは、ユーザーのクエリに対してドキュメントデータベースから情報を提供するためにAIを使用します。ユーザーの質問をベクトル表現に変換し、事前処理されたドキュメントベクトルと比較します。最も関連性の高いドキュメントは、ベクトルの類似性に基づいて特定されます。その後、チャットボットはこのドキュメントを使用して文脈に適した回答を生成し、正確で関連性の高い応答を提供します。
ドキュメントベースの質問に答えるためにチャットボットが訓練される前に、関連する知識でそれを「訓練」する必要があります。訓練プロセスは、ドキュメンテーションの記事を埋め込み – 単語の意味を捉えたテキストの数値表現(ベクトル)に変換することです。埋め込みは、このプロジェクトではOceanBaseに格納されます。
既に確立されたソリューションであるLangchainを使わないのはなぜかと思われるかもしれません。Langchainは、言語モデルのトレーニングと展開に強力なプラットフォームですが、このプロジェクトにはその期待と私たちの特定の要件が合致しなかったため、最適な選択肢ではありませんでした。
Langchainは、基礎となるデータベースがベクトルの保存と類似性検索を処理できることを前提としています。しかし、私たちが使用したデータベースであるOceanBaseは、直接的にベクトルデータ型をサポートしていません。
さらに、このプロジェクトの主な目的は、AIトレーニングのためのベクトルデータベースとしてのOceanBaseのポテンシャルを探求することでした。内部的に類似性検索を処理するLangchainを使用することは、OceanBaseのこれらの側面に深入りする機会を逃すことになります。
OceanBaseは直接的にベクトルストアをサポートしていないため、回避策を見つける必要があります。しかし、ベクトルは本質的には数値の配列です。これをデータベース内のJSON文字列またはblobとして保存することができます。そして、質問の埋め込みとレコードを比較する必要がある場合は、次のステップで再び埋め込みに戻すだけです。
OceanBaseがベクトルデータ型を直接的にサポートしていないため、これらのレコードはオリジナルの埋め込み形式に戻す必要があります。この変換プロセスは、残念ながらスケーラビリティに欠ける遅いシステムをもたらします。
AIと機械学習の可能性を最大限に活用するためには、OceanBaseチームにベクトルデータ型のサポートを組み込むことを強くお勧めします。これにより、システムのパフォーマンスとスケーラビリティが向上するだけでなく、AI時代を迎える準備ができた先見的なデータベースソリューションとしてのOceanBaseの地位が確立されます。彼らのGitHubリポジトリに問題を作成しました。さらに探求する興味がある場合は、ディスカッションに参加してください。
プロジェクト
このシステムはNode.jsフレームワーク上に構築されており、HTTPリクエストのハンドリングにはExpress.jsが使用されています。データベースのスキーマのマイグレーション、シーディング、およびクエリには、プロミスベースのNode.js ORMであるSequelizeが使用されています。
このプロジェクトは、主に2つのリクエストを処理するために構成されています。記事を使ってモデルをトレーニングすることと、質問をすることです。 '/train'
エンドポイントは記事を取得し、ベクトルに変換してデータベースに保存します。 '/ask'
エンドポイントはユーザーの質問を受け取り、保存されたベクトルを使用して最も関連性の高い記事を見つけ、OpenAIのAPIを使用して回答を生成します。
このプロジェクトはGitHubで誰でもアクセスして利用することができます。これは、OceanBaseだけでなく、他のドキュメントセットに対してもこのAI駆動のソリューションのパワーを活用することができます。リポジトリをクローンしてコードを調査し、独自のドキュメントチャットボットのトレーニングのベースとして使用することができます。ドキュメントをよりインタラクティブでアクセスしやすくする素晴らしい方法です。
スタートガイド
プロジェクトの環境をゼロからセットアップするには、以下の手順に従ってください:
Node.jsのインストール:まだインストールされていない場合は、公式のNode.jsのウェブサイトからダウンロードしてインストールしてください。
新しいプロジェクトの作成:ターミナルを開き、任意のディレクトリに移動し、mkdir oceanbase-vector
コマンドを使用して新しいプロジェクトを作成します。 cd oceanbase-vector
コマンドを使用して新しいプロジェクトディレクトリに移動します。
プロジェクトの初期化: npm init -y
コマンドを実行して新しいNode.jsプロジェクトを初期化します。このコマンドにより、デフォルトの値を使用して新しい package.json
ファイルが作成されます。
依存関係のインストール:プロジェクトに必要な依存関係をインストールします。以下のコマンドを使用してすべての必要なパッケージをインストールします:
npm install dotenv express lodash mysql2 openai sequelize --save
このプロジェクトではSequelizeをOceanBaseデータベースとのやり取りのためのORMとして使用します。類似性検索プロセスでコサイン類似度を計算するためにlodashパッケージを使用します。そしてもちろん、OpenAIのAPIとやり取りするために openai
パッケージが必要です。askとtrainのエンドポイントを公開するサーバーとしてexpressを使用します。
次に、npm install sequelize-cli --save-dev
を使用して開発用の依存関係をインストールします。
これでプロジェクトのセットアップが完了し、各モジュールの構築が開始できる準備が整いました。
OceanBaseのセットアップ
プロジェクトをセットアップするためには、まず実行中のOceanBaseクラスタが必要です。OceanBaseのセットアップ方法については、私が書いたこの記事に詳しい手順が記載されています。
OceanBaseのインスタンスが実行されている場合、次のステップは記事とそれに対応する埋め込みベクトルを格納するためのテーブルを作成することです。このテーブルは article_vectors
という名前で、次のカラムを持ちます:
id
:このカラムは整数型で、テーブルの主キーとして機能します。自動インクリメントされるため、新しいエントリは前のエントリのIDよりも1大きいIDが自動的に割り当てられます。content_vector
:このカラムはJSON型で、記事のベクトル表現を格納します。各ベクトルはJSONオブジェクトに変換されて保存されます。content
:このカラムはテキスト型で、記事の実際のコンテンツを格納します。
article_vectors
テーブルを作成するには、次のSQLコマンドを使用できます:
CREATE TABLE article_vectors (
id INT AUTO_INCREMENT,
content_vector JSON,
content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
PRIMARY KEY (id)
);
これでOceanBaseデータベースに記事とそのベクトル表現を保存するためのテーブルが準備されました。次のセクションでは、OceanBaseのドキュメンテーションからデータを取得し、このデータを使用してAIモデルをトレーニングします。
また、SequlizeプロジェクトでArticleVectorモデルを定義する必要もあります。まず、sequelize init
を実行してsequelizeの環境を初期化します。生成された/models
フォルダ内で、ArticleVector.js
という新しいファイルを作成します。
const { DataTypes, Model } = require('sequelize');
class ArticleVector extends Model {}
module.exports = (sequelize) => {
ArticleVector.init(
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
content_vector: {
type: DataTypes.JSON,
},
content: {
type: DataTypes.TEXT,
},
},
{
sequelize,
modelName: 'ArticleVector',
tableName: 'article_vectors',
timestamps: false,
},
{
sequelize,
modelName: 'ArticleVector',
tableName: 'content',
timestamps: false,
}
);
return ArticleVector;
};
コードは、OceanBaseデータベースのarticle_vectors
テーブルのためのSequelizeモデルを定義しています。Sequelizeは、高レベルのAPI呼び出しを使用してSQLデータベースとやり取りするための、PromiseベースのNode.js ORMです。
ドキュメントのトレーニング
トレーニングプロセスは、私たちのドキュメントチャットボットの中心です。これには、OceanBaseのドキュメントをGitHubリポジトリから取得し、コンテンツをベクトル表現に変換し、これらのベクトルをOceanBaseデータベースに保存する作業が含まれます。このプロセスは、trainDocs.js
とembedding.js
という2つのメインスクリプトで処理されます。
ドキュメントの取得
trainDocs.js
スクリプトは、OceanBaseドキュメントの内容をGitHubリポジトリから取得します。GitHub APIを使用してリポジトリにアクセスし、すべての.md
ファイルを取得します。このスクリプトは、リポジトリ内の場所に関係なく、すべてのドキュメントファイルを再帰的に取得するように設計されています。
スクリプトはまた、各ドキュメントファイルの内容も取得します。ファイルのダウンロードURLにリクエストを送信し、返されたコンテンツをさらに処理するために保存します。
async function fetchRepoContents(
repo,
path = '',
branch = 'main',
limit = 100
) {
const url = `https://api.github.com/repos/${repo}/contents/${path}?ref=${branch}`;
const accessToken = process.env.GITHUB_TOKEN;
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${accessToken}`,
Accept: 'application/vnd.github+json',
'X-GitHub-Api-Version': '2022-11-28',
},
});
const data = await response.json();
// パスがディレクトリの場合、再帰的にコンテンツを取得する
if (Array.isArray(data)) {
let count = 0;
const files = [];
for (const item of data) {
if (count >= limit) {
break;
}
if (item.type === 'dir') {
const dirFiles = await fetchRepoContents(
repo,
item.path,
branch,
limit - count
);
files.push(...dirFiles);
count += dirFiles.length;
} else if (item.type === 'file' && item.name.endsWith('.md')) {
files.push(item);
count++;
}
}
return files;
}
return [];
}
/**
* @param {RequestInfo | URL} url
*/
async function fetchFileContent(url) {
const response = await fetch(url);
const content = await response.text();
return content;
}
これで、埋め込みを処理するメイン関数を記述できます。この関数は、定義したGitHubのfetch関数を使用して、指定したリポジトリからすべてのマークダウンファイルを取得します。注意点として、取得するファイルの数を制限するためにlimitパラメータを追加しました。これは、GitHub APIには1時間あたりに行うことのできるリクエストの数に制限があるためです。リポジトリに数千のファイルが含まれている場合、制限に達する可能性があります。
async function articleEmbedding(repo, path = '', branch, limit) {
const contents = await fetchRepoContents(repo, path, branch, limit);
console.log(contents.length);
contents.forEach(async (item) => {
const content = await fetchFileContent(item.download_url);
await storeEmbedding(content);
});
}
ベクトルの変換と保存
embedding.js
スクリプトは、取得したドキュメントをベクトル表現に変換し、これらのベクトルをOceanBaseデータベースに保存する役割を担っています。これは、embedArticle()
とstoreEmbedding()
という2つのメイン関数を使用して行われます。
SequelizeとOpenAIを動作させるために、初期化する必要があります。
const { Sequelize } = require('sequelize');
const dotenv = require('dotenv');
dotenv.config();
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const { Configuration, OpenAIApi } = require('openai');
const configuration = new Configuration({
apiKey: process.env.OPENAI_KEY,
});
const openai = new OpenAIApi(configuration);
embedArticle()
関数は、OpenAIのEmbedding APIを使用して記事のコンテンツをベクトルに変換します。記事のコンテンツをAPIにリクエストし、生成されたベクトルを取得します。
async function embedArticle(article) {
// OpenAIを使用して記事の埋め込みを作成する
try {
const result = await openai.createEmbedding({
model: 'text-embedding-ada-002',
input: article,
});
// 埋め込みを取得する
const embedding = result.data.data[0].embedding;
return embedding;
} catch (error) {
if (error.response) {
console.log(error.response.status);
console.log(error.response.data);
} else {
console.log(error.message);
}
}
}
storeEmbedding()
関数は生成されたベクトルをOceanBaseデータベースに保存します。Sequelizeを使用してデータベースに接続し、article_vectors
テーブルに新しいレコードを作成し、ベクトルと元の記事のコンテンツを適切な列に保存します。
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
const ArticleVectorModel = require('../models/ArticleVector');
const ArticleVector = ArticleVectorModel(sequelize);
async function storeEmbedding(article) {
try {
await sequelize.authenticate();
console.log('接続に成功しました。');
const articleVector = await ArticleVector.create({
content_vector: await embedArticle(article),
content: article,
});
console.log('新しい記事ベクトルが作成されました:', articleVector.id);
} catch (err) {
console.error('エラー:', err);
}
}
トレーニングプロセスを開始するには、適切なパラメータでtrainDocs.js
内のarticleEmbedding()
関数を呼び出すだけです。この関数はドキュメントを取得し、ベクトルに変換し、これらのベクトルをデータベースに保存します。
このトレーニングプロセスにより、チャットボットはOceanBaseドキュメントの包括的な理解を持ち、ユーザーのクエリに正確かつ関連性のある回答を提供することができるようになります。
次のセクションでは、トレーニングされたモデルを使用してユーザーのクエリに回答する方法について説明します。
お気づきかもしれませんが、プロジェクト内で機密情報を保存するために.env
ファイルを使用しています。以下は使用できる.env
ファイルの例です:
GITHUB_TOKEN="https://docs.github.com/en/rest/guides/getting-started-with-the-rest-api?apiVersion=2022-11-28からGithubトークンを取得してください"
OPENAI_KEY ="YOUR_OPENAI_KEY"
DOC_OWNER="OceanBase。これを他の製品名に変更して、チャットボットがどの製品に関連しているかを知ることができます"
MODEL="gpt-4とgpt-3.5-turboがサポートされています"
ドキュメントへの問い合わせ
トレーニングプロセスが完了すると、チャットボットはユーザーのクエリに回答する準備が整います。これは/embeddings/askDocs.js
ファイルで処理され、保存されたベクトルを使用して特定の質問に対して最も関連性の高いドキュメントを見つけ、OpenAIのAPIを使用して回答を生成します。
askDocs.js
内のgetSimilarDoc()
関数は、特定の質問に対して最も関連性の高いドキュメントを検索する責任を持っています。これは、embedding.js
のembedArticle()
関数を使用して質問をベクトルに変換することから始まります。
次に、OceanBaseデータベースのarticle_vectors
テーブルからすべての保存されたベクトルを取得します。その後、質問ベクトルと各保存されたベクトルのコサイン類似度を計算します。コサイン類似度は、2つのベクトルの類似性を測る指標であり、このタスクには適しています。
async function getSimilarDoc(question) {
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
const ArticleVector = ArticleVectorModel(sequelize);
// article_vectorテーブル内のすべての行を取得
const vectors = await ArticleVector.findAll();
sequelize.close();
// console.log(vectors[0]);
// 各ベクトルのコサイン類似度を計算
const embeddedQuestion = await embedArticle(question);
// 各ベクトルのコサイン類似度を計算
const similarities = vectors.map((vector) => {
const similarity = cosineSimilarity(
embeddedQuestion,
vector.content_vector
);
return {
id: vector.id,
content: vector.content,
similarity: similarity,
};
});
const mostSimilarDoc = _.orderBy(similarities, ['similarity'], ['desc'])[0];
// console.log(mostSimilarDoc);
return mostSimilarDoc;
}
askDocs.js
内のcosineSimilarity()
関数は、ドキュメントの検索プロセスの重要な部分です。2つのベクトル間のコサイン類似度を計算し、それらがどれだけ類似しているかを測定します。
このプロジェクトの文脈では、ユーザーの質問のベクトル表現とデータベース内の記事のベクトル表現の類似性を判定するために使用されます。質問に対して最もコサイン類似度が高い記事が最も関連性があると見なされます。
この関数は2つのベクトルを入力として受け取ります。それぞれのベクトルの内積と大きさを計算します。そしてコサイン類似度は、内積を2つのベクトルの大きさの積で割ることで計算されます。
function cosineSimilarity(vecA, vecB) {
const dotProduct = _.sum(_.zipWith(vecA, vecB, (a, b) => a * b));
const magnitudeA = Math.sqrt(_.sum(_.map(vecA, (a) => Math.pow(a, 2))));
const magnitudeB = Math.sqrt(_.sum(_.map(vecB, (b) => Math.pow(b, 2))));
if (magnitudeA === 0 || magnitudeB === 0) {
return 0;
}
return dotProduct / (magnitudeA * magnitudeB);
}
この関数は、質問に対して最もコサイン類似度が高いドキュメントを返します。これは、与えられた質問に対して最も関連性の高いドキュメントです。
最も関連性の高いドキュメントが特定されると、askDocs.js
の askAI()
関数が質問に対する回答を生成します。これは、OpenAI の API を使用して、特定されたドキュメントに基づいて文脈に適した回答を生成します。
この関数は、質問と関連するドキュメントを API に送信します。API は生成された回答を返し、関数はそれを返します。
このプロセスにより、チャットボットは正確かつ関連性の高い回答をユーザーのクエリに提供し、OceanBase ドキュメントから情報を求める人々にとって貴重なツールとなります。
async function askAI(question) {
const mostSimilarDoc = await getSimilarDoc(question);
const context = mostSimilarDoc.content;
try {
const result = await openai.createChatCompletion({
model: process.env.MODEL,
messages: [
{
role: 'system',
content: `You are ${
process.env.DOC_OWNER || 'a'
} documentation assistant. You will be provided a reference docs article and a question, please answer the question based on the article provided. Please don't make up anything.`,
},
{
role: 'user',
content: `Here is an article related to the question: \n ${context} \n Answer this question: \n ${question}`,
},
],
});
// 回答を取得する
const answer = result.data.choices[0].message.content;
console.log(answer);
return {
answer: answer,
docId: mostSimilarDoc.id,
};
} catch (error) {
if (error.response) {
console.log(error.response.status);
console.log(error.response.data);
} else {
console.log(error.message);
}
}
}
API サーバーの設定
トレーニングと質問関数を設定したので、それらを API エンドポイントから呼び出すことができます。Express.js サーバーはアプリケーションのメインエントリーポイントです。それは/train
と/ask
の2つのエンドポイントを公開し、それぞれモデルのトレーニングとユーザーのクエリへの回答を処理します。ここで説明されているコードはindex.js
ファイルにあります。
サーバーは、Node.js のための高速で、主観のない、ミニマルなウェブフレームワークである Express.js を使用して初期化されます。Express.js のexpress.json()
ミドルウェアを使用して、受信したリクエストを JSON ペイロードとして解析するように設定されています。
const express = require('express');
const app = express();
const db = require('./models');
app.use(express.json());
サーバーは Sequelize を使用して OceanBase データベースとの接続を確立します。Sequelize インスタンス上でsync()
関数を呼び出すことで、すべての定義済みモデルがデータベースと同期されることを保証します。これには、必要なテーブルが存在しない場合にそれらを作成することも含まれます。
db.sequelize.sync().then((req) => {
app.listen(3000, () => {
console.log('Server running at port 3000...');
});
});
トレーニングエンドポイント
/train
エンドポイントはトレーニングプロセスをトリガーする POST ルートです。GitHub リポジトリの詳細(repo
、path
、branch
、limit
)をリクエストボディに含むことを期待します。これらの詳細は articleEmbedding()
関数に渡され、ドキュメントを取得し、ベクトルに変換し、これらのベクトルをデータベースに保存します。
app.post('/train', async (req, res, next) => {
try {
await articleEmbedding(
req.body.repo,
req.body.path,
req.body.branch,
req.body.limit
);
res.json({
status: '成功',
message: 'ドキュメントのトレーニングが成功しました。',
});
} catch (e) {
next(e); // エラーをエラーハンドリングミドルウェアに渡す
}
});
トレーニングプロセスが成功した場合、エンドポイントは成功メッセージで応答します。プロセス中にエラーが発生した場合は、エラーハンドリングミドルウェアに渡されます。
エンドポイントへのPOSTリクエストには、次のようなリクエストボディが含まれます:
{
"repo":"oceanbase/oceanbase-doc",
"path":"en-US",
"branch": "V4.1.0",
"limit": 1000
}
リポジトリを他のGitHubホストされたドキュメントに変更することができます。パスは対象のコンテンツのフォルダです。この場合、OceanBaseの英語のドキュメントのみをトレーニングしたいので、「en-US」を使用しました。ブランチパラメータはリポジトリのブランチを示します。ほとんどの場合、メインブランチまたは特定のバージョンのブランチを使用できます。limitパラメータは、リポジトリにあまりにも多くのファイルがある場合にのみ使用されます。GitHub APIの制限を回避するためです。
トレーニングが成功した場合の表示例です。
OceanBaseデータベースでは、すべてのレコードとその埋め込みを確認できます:
問い合わせエンドポイント
/ask
エンドポイントもPOSTルートです。リクエストボディにユーザーの質問を含めることが期待されます。この質問はaskAI()
関数に渡され、最も関連性の高いドキュメントを見つけ、OpenAIのAPIを使用して回答を生成します。
app.post('/ask', async (req, res, next) => {
try {
const answer = await askAI(req.body.question);
res.json({
status: '成功',
answer: answer.answer,
docId: answer.docId,
});
} catch (e) {
next(e); // エラーをエラーハンドリングミドルウェアに渡す
}
});
エンドポイントは生成された回答と最も関連性の高いドキュメントのIDで応答します。これは成功したリクエストの例です。
このように、デモ環境でOceanBaseをインストールするためのソフトウェアとハードウェアの環境についてチャットボットに尋ねると、チャットボットはこの記事に記載されている回答を提供します。
結論
このプロジェクトは、OceanBaseとAIを統合してドキュメントチャットボットを作成する実験を表しています。ドキュメントの使いやすさを向上させるAIの潜在能力を示していますが、これはまだ実験的なセットアップであり、本番環境での使用にはまだ準備ができていません。現在の実装では、ベクトルをJSONに変換してストレージに保存し、比較のためにベクトルに戻す必要があるため、スケーラビリティの問題が発生しています。
AIと機械学習の潜在能力を最大限に活用するためには、OceanBaseチームにベクトルデータ型のサポートを組み込むことを再度お勧めします。これにより、システムのパフォーマンスとスケーラビリティが向上するだけでなく、AIが次の大きなトレンドとなる中でOceanBaseを先進的なデータベースソリューションと位置付けることができます。この提案についてOceanBase GitHubリポジトリに問題を作成し、会話に参加していただくことを歓迎します。
このプロジェクトのコードは、誰でもアクセスして利用できるようにGitHubで利用できます。これにより、OceanBaseだけでなく、他のドキュメントセットに対してもこのAI駆動のソリューションのパワーを活用することができます。リポジトリをクローンしてコードを探索し、OceanBaseを使用して独自のドキュメントチャットボットをトレーニングするためのベースとして使用することは自由です。ドキュメントをよりインタラクティブでアクセスしやすくする素晴らしい方法です。
結論として、まだ作業が必要ですが、このプロジェクトはOceanBaseをAIトレーニング用のベクトルデータベースとして使用するための有望な一歩を表しています。データベースのさらなる開発と改善により、ドキュメント内の回答を求めることが質問するだけで簡単になる時代がやってくることを期待できます。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles