第03回 Ola-UI本体の設置と起動編

Ola-UI構築チュートリアル

【第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ファイル群を配置し、設定ファイルを編集して、システムを起動します。そして、初めての会話を体験します!

所要時間

前提条件


STEP 1: Ola-UIファイル群の準備

1.1 フォルダ構造の作成

  1. C:\ola-ui フォルダを作成
  2. この中に、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] セクション

[RAG] セクション

[Context] セクション


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付き)で保存してください。


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 ナレッジセットの確認

以下のような画面が表示されます:

8.3 ナレッジの追加・編集

「編集」ボタンをクリックすると、ナレッジファイルを直接編集できます。


STEP 9: 高度な機能の試用

9.1 ナレッジ絞込機能

  1. メインUI(index_t.html)を開く
  2. 「ナレッジ絞込」セクションを展開
  3. キーワードを入力して「絞込」ボタンをクリック
  4. 絞り込まれた結果のみがAIに渡されます

9.2 データを整理機能

  1. 「データを整理」セクションを開く
  2. 集計方法(年別、月別など)を選択
  3. 「実行」ボタンをクリック
  4. 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の設定
✅ ナレッジファイルの作成
✅ ベクトルストアの初期化
✅ 起動バッチファイルの編集
✅ システムの起動
✅ 初めての会話テスト
✅ ナレッジ管理画面の確認
✅ 高度な機能の試用

所要時間


シリーズ完結!

おめでとうございます!🎉

これで、Ola-UIシステムの構築が完了しました!

全3回のまとめ

第1回: Ollama環境構築編

第2回: PHP環境構築編

第3回: Ola-UI本体の設置と起動編(本記事)


今後の運用について

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. パフォーマンスチューニング


サポート・お問い合わせ

弊社のサポート体制

実績例


参考リンク


著者: 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 #社内システム #ナレッジマネジメント

📚 記事一覧に戻る