【第3回】社内AIチャットシステムOla-UIを構築しよう!- Ola-UI本体の設置と起動編
はじめに
「社内AIチャットシステムOla-UI構築シリーズ」もついに最終回!
これまでの2回で、AIの心臓部となるOllamaと、WebサーバーとなるPHPの環境を整えました。
これまでのおさらい
第1回: Ollama環境構築編
✅ Ollamaのインストール
✅ Gemma 2 27Bモデルのダウンロード
✅ mxbai-embed-largeのダウンロード
✅ 環境変数の設定
第2回: PHP環境構築編
✅ PHPのインストール
✅ php.iniの設定
✅ PHP内蔵Webサーバーの起動テスト
✅ 起動バッチファイルの作成
今回は、いよいよOla-UIシステム本体を設置して、実際に動かしてみます!
本記事の目標
第3回では、Ola-UIファイル群を配置し、設定ファイルを編集して、システムを起動します。そして、初めての会話を体験します!
所要時間
- 📅 約30〜40分
前提条件
- 第1回、第2回の内容が完了していること
- Ollamaが正常に動作していること
- PHPが正常に動作していること
STEP 1: Ola-UIファイル群の準備
1.1 フォルダ構造の作成
C:\ola-uiフォルダを作成- この中に、Ola-UIシステムのすべてのファイルを配置します
💡 Tip: フォルダ名は任意ですが、パスに日本語やスペースを含めないでください。
1.2 Ola-UIファイル群のダウンロード
実際の運用では、Ola-UIサポートチームから提供されたZIPファイルを使用しますが、ここでは必要なファイル構成を説明します。
必須ファイル一覧
C:\ola-ui\
├── index_t.html ← メインUI(上級版)
├── ai_sukispi.html ← 簡易UI(初心者向け)
├── chat_api_t.php ← チャットAPIバックエンド
├── config.ini ← 設定ファイル(重要!)
├── knowledge_manager.html ← ナレッジ管理UI
├── knowledge_manager.json ← ナレッジセット情報
├── dataset_metadata.json ← データセットメタデータ
├── knowledge1.txt ← ナレッジファイル1
├── knowledge2.txt ← ナレッジファイル2
├── ... ← knowledge3.txt ~ knowledge10.txt
├── vector_store1.jsonl ← ベクトルストア1
├── vector_store2.jsonl ← ベクトルストア2
├── ... ← vector_store3.jsonl ~ vector_store10.jsonl
├── start_server(ローカルの場合の起動バッチ).bat ← 起動スクリプト
├── CacheManager.php ← キャッシュ管理
├── JapaneseTokenizerLib.php ← 日本語トークナイザー
├── TopKHeap.php ← Top-Kヒープ
├── auto_dataset_selection.php ← 自動データセット選択
├── aggregation_api.php ← 集計API
├── recommend_api.php ← 推薦API
├── progress_control.js ← プログレス制御
└── その他のサポートファイル
1.3 初期ナレッジファイルの作成
テスト用に簡単なナレッジファイルを作成します。
knowledge1.txt の作成
C:\ola-ui\knowledge1.txt というファイルを作成し、以下の内容を記述:
# 会社概要
会社名: 株式会社サンプル
設立: 2020年4月1日
所在地: 東京都渋谷区渋谷1-1-1
代表者: 山田太郎
事業内容: AIソリューションの開発・販売
# 主要製品
## Ola-UI
社内データと対話できるRAGシステム。ローカル環境で動作し、高いセキュリティと低コストを実現。
## 特徴
- ローカル環境で完結
- 複数のナレッジセット対応
- ハイブリッド検索(ベクトル + BM25)
- 日本語に特化
# お問い合わせ
電話: 03-1234-5678
メール: info@sample-company.co.jp
営業時間: 平日 9:00-18:00
💡 Tip: このファイルには、会社の基本情報、製品情報、FAQ などを記載します。
STEP 2: config.ini の設定
config.ini は、Ola-UIシステムの動作を制御する最も重要な設定ファイルです。
2.1 config.ini の作成
C:\ola-ui\config.ini というファイルを作成し、以下の内容を記述:
; ===================================
; Ola-UI 設定ファイル (config.ini)
; ===================================
[Ollama]
; Ollama APIのエンドポイント
endpoint = http://127.0.0.1:11434
; チャット用LLMモデル
model = gemma2:27b
; 埋め込み用モデル
embed_model = mxbai-embed-large
; ストリーミング応答を有効化
stream = true
[RAG]
; Top-K: 検索結果の上位何件を使用するか
top_k = 10
; 類似度閾値(0.0~1.0)
similarity_threshold = 0.3
; ハイブリッド検索の重み配分
vector_weight = 0.7
bm25_weight = 0.3
; 検索モード (hybrid / vector / bm25)
search_mode = hybrid
[Context]
; コンテキストウィンドウサイズ
num_ctx = 8192
; 会話履歴の最大保持数
max_history = 10
[Session]
; セッションの有効期限(秒)
session_lifetime = 1800
; 会話履歴の最大保存数
max_history_count = 10
[Knowledge]
; ナレッジファイルの数(1~10)
knowledge_count = 10
; ナレッジファイルのベースパス
knowledge_base_path = ./
; ベクトルストアのベースパス
vector_store_base_path = ./
[Cache]
; キャッシュを有効化
enabled = true
; キャッシュの有効期限(秒)
ttl = 3600
[SystemPrompt]
; システムプロンプト(デフォルト)
default = あなたは親切で知識豊富なAIアシスタントです。提供されたコンテキスト情報を活用して、正確で詳細な回答を提供してください。
[Recommendation]
; AI推薦機能を有効化
enabled = true
; 推薦の更新間隔(秒)
interval = 5
; 推薦に使用する会話履歴の長さ
history_length = 5
; 推薦候補の最小件数
min_items = 1
[ManualSelection]
; 手動選択されたデータセットID(カンマ区切り)
manual_selected_ids = 1
[AutoSelection]
; 自動選択機能を有効化
enabled = true
; 自動選択の最大件数
max_count = 3
2.2 重要な設定項目の説明
[Ollama] セクション
- model: チャット用のLLMモデル(第1回でダウンロードしたモデル名)
- embed_model: 埋め込み用モデル(ベクトル検索に使用)
[RAG] セクション
- top_k: 検索結果の上位何件をコンテキストとして使用するか
- similarity_threshold: 類似度がこの値以下の結果は除外
- vector_weight / bm25_weight: ハイブリッド検索の重み配分
[Context] セクション
- num_ctx: コンテキストウィンドウサイズ(トークン数)
- max_history: 会話履歴の保持数
STEP 3: 起動バッチファイルの編集
3.1 起動バッチファイルの確認
C:\ola-ui\start_server(ローカルの場合の起動バッチ).bat というファイルがあれば、それを編集します。
ない場合は、新規作成します。
3.2 起動バッチファイルの内容
メモ帳で開き、以下の内容を記述:
@echo off
chcp 65001 >nul
title Ola-UI システム起動
echo ========================================
echo Ola-UI システム起動スクリプト
echo ========================================
echo.
REM Ollamaの起動確認
echo [1/4] Ollama APIの確認中...
curl -s http://127.0.0.1:11434/api/tags >nul 2>&1
if %errorlevel% neq 0 (
echo ❌ エラー: Ollamaが起動していません
echo.
echo 別のコマンドプロンプトで以下を実行してください:
echo ollama serve
echo.
pause
exit /b 1
) else (
echo ✅ Ollama API: 正常
)
echo.
REM PHPバージョンの確認
echo [2/4] PHP環境の確認中...
php -v >nul 2>&1
if %errorlevel% neq 0 (
echo ❌ エラー: PHPが見つかりません
echo 環境変数PATHにPHPのパスを追加してください
pause
exit /b 1
) else (
php -r "echo '✅ PHP ' . phpversion() . ': 正常';"
echo.
)
echo.
REM config.iniの確認
echo [3/4] 設定ファイルの確認中...
if not exist config.ini (
echo ❌ エラー: config.iniが見つかりません
pause
exit /b 1
) else (
echo ✅ config.ini: 存在確認OK
)
echo.
REM ナレッジファイルの確認
echo [4/4] ナレッジファイルの確認中...
if not exist knowledge1.txt (
echo ⚠️ 警告: knowledge1.txtが見つかりません
echo ナレッジファイルを配置してください
echo.
) else (
echo ✅ knowledge1.txt: 存在確認OK
)
echo.
echo ========================================
echo サーバーを起動します...
echo ========================================
echo.
echo メインUI(上級版): http://localhost:8000/index_t.html
echo 簡易UI(初心者向け): http://localhost:8000/ai_sukispi.html
echo ナレッジ管理: http://localhost:8000/knowledge_manager.html
echo.
echo サーバーを停止するには Ctrl+C を押してください
echo.
echo ========================================
echo.
REM PHPサーバーの起動
php -S localhost:8000
pause
3.3 文字コードの設定
重要: このバッチファイルはUTF-8(BOM付き)で保存してください。
- メモ帳の場合: 「名前を付けて保存」→ 文字コード「UTF-8」を選択
STEP 4: ベクトルストアの初期化(初回のみ)
4.1 ベクトル化スクリプトの作成
ナレッジファイルをベクトル化して検索可能にするため、初期化スクリプトを作成します。
C:\ola-ui\initialize_vectors.php というファイルを作成し、以下の内容を記述:
<?php
/**
* ベクトルストア初期化スクリプト
*/
require_once 'JapaneseTokenizerLib.php';
echo "=== ベクトルストア初期化 ===\n\n";
// config.iniの読み込み
$config = parse_ini_file('config.ini', true);
$ollama_endpoint = $config['Ollama']['endpoint'] ?? 'http://127.0.0.1:11434';
$embed_model = $config['Ollama']['embed_model'] ?? 'mxbai-embed-large';
$knowledge_count = $config['Knowledge']['knowledge_count'] ?? 10;
echo "Ollama Endpoint: {$ollama_endpoint}\n";
echo "埋め込みモデル: {$embed_model}\n";
echo "ナレッジファイル数: {$knowledge_count}\n\n";
// 各ナレッジファイルをベクトル化
for ($i = 1; $i <= $knowledge_count; $i++) {
$knowledge_file = "knowledge{$i}.txt";
$vector_store_file = "vector_store{$i}.jsonl";
if (!file_exists($knowledge_file)) {
echo "[{$i}] ⏭️ {$knowledge_file} が見つかりません。スキップします。\n";
continue;
}
echo "[{$i}] 📄 {$knowledge_file} を処理中...\n";
// ナレッジファイルの読み込み
$content = file_get_contents($knowledge_file);
if (empty($content)) {
echo "[{$i}] ⚠️ ファイルが空です。スキップします。\n\n";
continue;
}
// チャンク分割(簡易版: 改行で分割)
$lines = explode("\n", $content);
$chunks = array_filter($lines, function($line) {
return !empty(trim($line));
});
echo "[{$i}] チャンク数: " . count($chunks) . "\n";
// ベクトル化
$vectors = [];
$chunk_id = 0;
foreach ($chunks as $chunk) {
$chunk = trim($chunk);
if (empty($chunk)) continue;
// Ollama Embedding APIを呼び出し
$ch = curl_init("{$ollama_endpoint}/api/embed");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'model' => $embed_model,
'input' => $chunk
]));
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code !== 200) {
echo "[{$i}] ❌ エラー: ベクトル化に失敗しました(HTTPコード: {$http_code})\n";
continue;
}
$data = json_decode($response, true);
$embedding = $data['embeddings'][0] ?? null;
if (!$embedding) {
echo "[{$i}] ⚠️ 埋め込みベクトルの取得に失敗しました\n";
continue;
}
$vectors[] = [
'id' => $chunk_id++,
'text' => $chunk,
'embedding' => $embedding
];
// プログレス表示
if ($chunk_id % 10 === 0) {
echo ".";
}
}
echo "\n";
// ベクトルストアに保存
$fp = fopen($vector_store_file, 'w');
foreach ($vectors as $vector) {
fwrite($fp, json_encode($vector) . "\n");
}
fclose($fp);
echo "[{$i}] ✅ 完了: {$vector_store_file}({$chunk_id}件のベクトル)\n\n";
}
echo "=== 初期化完了 ===\n";
?>
4.2 初期化スクリプトの実行
コマンドプロンプトで以下を実行:
cd C:\ola-ui
php initialize_vectors.php
期待される出力例:
=== ベクトルストア初期化 ===
Ollama Endpoint: http://127.0.0.1:11434
埋め込みモデル: mxbai-embed-large
ナレッジファイル数: 10
[1] 📄 knowledge1.txt を処理中...
[1] チャンク数: 25
..........
[1] ✅ 完了: vector_store1.jsonl(25件のベクトル)
[2] ⏭️ knowledge2.txt が見つかりません。スキップします。
...
=== 初期化完了 ===
⏱️ 所要時間: ナレッジファイルのサイズにもよりますが、数分程度
STEP 5: システムの起動
5.1 Ollamaサービスの起動(未起動の場合)
別のコマンドプロンプトを開き、以下を実行:
ollama serve
このコマンドプロンプトは開いたままにしておきます。
5.2 Ola-UIサーバーの起動
C:\ola-ui\start_server(ローカルの場合の起動バッチ).bat をダブルクリック
期待される出力:
========================================
Ola-UI システム起動スクリプト
========================================
[1/4] Ollama APIの確認中...
✅ Ollama API: 正常
[2/4] PHP環境の確認中...
✅ PHP 8.3.1: 正常
[3/4] 設定ファイルの確認中...
✅ config.ini: 存在確認OK
[4/4] ナレッジファイルの確認中...
✅ knowledge1.txt: 存在確認OK
========================================
サーバーを起動します...
========================================
メインUI(上級版): http://localhost:8000/index_t.html
簡易UI(初心者向け): http://localhost:8000/ai_sukispi.html
ナレッジ管理: http://localhost:8000/knowledge_manager.html
サーバーを停止するには Ctrl+C を押してください
========================================
[Wed Jan 29 18:00:00 2026] PHP 8.3.1 Development Server (http://localhost:8000) started
✅ このように表示されれば起動成功!
STEP 6: Webブラウザでアクセス
6.1 メインUI(上級版)にアクセス
ブラウザで以下のURLにアクセス:
http://localhost:8000/index_t.html
表示される画面: - チャット入力欄 - ナレッジ絞込機能 - データを整理機能 - AI提案機能 - 設定パネル
6.2 簡易UI(初心者向け)にアクセス
http://localhost:8000/ai_sukispi.html
表示される画面: - シンプルなチャット入力欄 - 送信ボタン - 応答表示エリア
💡 Tip: 初めての方は簡易UIから試すことをおすすめします!
STEP 7: 初めての会話テスト
7.1 簡単な質問をしてみる
チャット入力欄に以下のように入力して送信:
会社名を教えてください
期待される応答例:
会社名は「株式会社サンプル」です。
【参考情報】
- 設立: 2020年4月1日
- 所在地: 東京都渋谷区渋谷1-1-1
- 代表者: 山田太郎
✅ このように、knowledge1.txt の内容を元に応答が返ってくれば成功!
7.2 複雑な質問をしてみる
Ola-UIの特徴を3つ教えてください
期待される応答例:
Ola-UIの主な特徴は以下の3つです:
1. **ローカル環境で完結**
外部APIを使用せず、社内のサーバーやPCで動作するため、
機密情報も安心して扱えます。
2. **複数のナレッジセット対応**
最大10個のナレッジセットを管理でき、部門ごとに
専門的なAIチャットを構築できます。
3. **ハイブリッド検索**
ベクトル検索とBM25検索を組み合わせることで、
高精度な情報検索を実現しています。
7.3 コンテキストを使った会話
続けて以下のように質問:
その会社の連絡先を教えてください
期待される応答例:
株式会社サンプルの連絡先は以下の通りです:
- 電話: 03-1234-5678
- メール: info@sample-company.co.jp
- 営業時間: 平日 9:00-18:00
ご不明な点があれば、お気軽にお問い合わせください。
✅ 「その会社」という曖昧な表現でも、会話の文脈を理解して正しく応答!
STEP 8: ナレッジ管理画面の確認
8.1 ナレッジ管理画面にアクセス
http://localhost:8000/knowledge_manager.html
8.2 ナレッジセットの確認
以下のような画面が表示されます:
- データセット1: knowledge1.txt(25チャンク)
- データセット2: (未設定)
- ...
8.3 ナレッジの追加・編集
「編集」ボタンをクリックすると、ナレッジファイルを直接編集できます。
STEP 9: 高度な機能の試用
9.1 ナレッジ絞込機能
- メインUI(index_t.html)を開く
- 「ナレッジ絞込」セクションを展開
- キーワードを入力して「絞込」ボタンをクリック
- 絞り込まれた結果のみがAIに渡されます
9.2 データを整理機能
- 「データを整理」セクションを開く
- 集計方法(年別、月別など)を選択
- 「実行」ボタンをクリック
- CSVファイルとしてダウンロード可能
9.3 記憶機能
チャット中に「この情報を記憶して」と言うと、その内容がナレッジに追加されます。
トラブルシューティング
Q1: 「Ollama APIに接続できません」エラー
原因: Ollamaサービスが起動していない
解決策:
1. 別のコマンドプロンプトを開く
2. ollama serve を実行
3. ブラウザをリロード
Q2: チャット画面が表示されない
原因: PHPサーバーが起動していない、またはポートが使用中
解決策:
1. 起動バッチファイルを再実行
2. ポートを変更(バッチファイル内の 8000 を 8080 などに変更)
Q3: 日本語が文字化けする
原因: 文字コードがUTF-8になっていない
解決策:
1. すべてのファイル(config.ini、knowledge.txt、PHPファイル)をUTF-8で保存
2. 起動バッチファイルの先頭に chcp 65001 を追加
Q4: 応答が遅い、またはメモリエラー
原因: モデルサイズが大きすぎる、またはメモリ不足
解決策:
1. 軽量モデルに変更(Gemma 2 9B または 2B)
2. config.iniの top_k を減らす(10 → 5)
3. メモリを増設
Q5: ベクトル検索が機能しない
原因: ベクトルストアが初期化されていない
解決策:
1. php initialize_vectors.php を再実行
2. vector_store1.jsonl が存在するか確認
まとめ
本記事で実施したこと
✅ Ola-UIファイル群の配置
✅ config.iniの設定
✅ ナレッジファイルの作成
✅ ベクトルストアの初期化
✅ 起動バッチファイルの編集
✅ システムの起動
✅ 初めての会話テスト
✅ ナレッジ管理画面の確認
✅ 高度な機能の試用
所要時間
- ⏱️ ファイル準備: 約10分
- ⏱️ 設定: 約10分
- ⏱️ ベクトル化: 約5分
- ⏱️ 動作確認: 約10分
- ⏱️ 合計: 約35分
シリーズ完結!
おめでとうございます!🎉
これで、Ola-UIシステムの構築が完了しました!
全3回のまとめ
第1回: Ollama環境構築編
- Ollamaのインストール
- LLMモデルのダウンロード
- 環境変数の設定
第2回: PHP環境構築編
- PHPのインストール
- php.iniの設定
- Webサーバーの起動
第3回: Ola-UI本体の設置と起動編(本記事)
- ファイル群の配置
- config.iniの設定
- システムの起動と動作確認
今後の運用について
1. ナレッジの追加・更新
定期的にナレッジファイルを更新し、ベクトルストアを再初期化します:
php initialize_vectors.php
2. システムの自動起動
Windows起動時にOla-UIを自動起動する場合:
1. 起動バッチファイルのショートカットを作成
2. shell:startup フォルダに配置
3. 複数部門での活用
フォルダごとに専門的なOla-UIを設置:
C:\ola-ui-sales\ ← 営業部用
C:\ola-ui-finance\ ← 経理部用
C:\ola-ui-tech\ ← 技術部用
それぞれ異なるポート(8000、8001、8002)で起動します。
4. パフォーマンスチューニング
- config.iniの
top_k、similarity_thresholdを調整 - キャッシュ機能を有効化
- GPU使用の最適化
サポート・お問い合わせ
弊社のサポート体制
- ナレッジファイル作成支援
- カスタマイズ相談
- LLMトレーニング支援
- 運用サポート
実績例
- 大企業の知財管理システム
- WebサイトのFAQシステム
- 製造業の技術文書管理
- 金融機関のコンプライアンス管理
参考リンク
著者: Ola-UI サポートチーム
公開日: 2026年1月29日
更新日: 2026年1月29日
カテゴリ: チュートリアル, Ola-UI, RAG, 最終回
💬 この記事への質問・コメント
シリーズを最後までご覧いただき、ありがとうございました!
ご質問やご意見がありましたら、以下までお気軽にお問い合わせください:
📧 Email: support@ola-ui.com
🐦 Twitter: @OlaUI_Official
💼 LinkedIn: Ola-UI
タグ
#OlaUI #RAG #Ollama #チュートリアル #完結 #AI #社内システム #ナレッジマネジメント