---
title: "AIモジュール"
description: "NibiruのファーストクラスAI — チャット、エンベディング、RAG、エージェント — あなたの自社のOllamaに接続されています。有料APIは不要です。"
---

Nibiruは**AIモジュール**（`application/module/ai/`）を搭載しており、これによりNibiruアプリケーションには一級のAIインターフェースが提供されます。PHPコードはローカルのLLMとチャットしたり、テキストを埋め込みたり、自身のデータ上でRAGを実行したり、ツールを使用したエージェントを実行したりすることができ、すべてが支払いが必要なAPIにデータを送信することなくに行われます。

このモジュールはデフォルトであなたの[neuronetz.aiのOllama](/ja/ai/oracle/)に接続されていますので、推論はあなたのハードウェア、ネットワーク、および条件に基づいて行われます。

## あなたが得る内容

| プラグイン | 何をしますか | 一文で説明 |
|---|---|---|
| `Chat` | チャットの完了、シングルターンまたはマルチターン | `$ai->chat()->ask('…')` |
| `Embed` | テキスト → ベクトル + コサインヘルパー | `$ai->embed()->one('…')` |
| `Rag` | インジェスト + 检索 + 接地されたチャット | `$ai->rag('docs')->ask('…')` |
| `Agent` | ツールを使用する ReAct ループ | `$ai->agent()->withTools([…])->run('…')` |
| `Tool` | 自分のカスタムツールの基底 | `class MyTool extends Tool { … }` |
| `Ollama` | 任意の Ollama 対応エンドポイントへの生 HTTP トランスポート | `(new Ollama($cfg))->chat(…)` |

## こんにちは、AI
```php
use Nibiru\Module\Ai\Ai;

$ai = new Ai();

echo $ai->chat()->ask('How do I scaffold a new module?');
// → "Run `./nibiru -m <name>`. This creates application/module/<name>/ with…"
```
これがシンプルなケースの全体的なAPIです。DIコンテナ、APIキー、SDKインストールはありません。

## 設定によって接続された

各プラグインは、設定を `application/module/ai/settings/ai.ini` から読みます。
```ini
[AI]
ollama.base_url     = "https://api.neuronetz.ai"
chat.model          = "nibiru-coder:1.0"
chat.fallback_model = "qwen2.5-coder:14b"
chat.temperature    = 0.4
chat.max_tokens     = 1024
embed.model         = "nomic-embed-text"
rag.top_k           = 6
agent.max_iterations = 6
```
環境ごとのオーバーライド: `ai.production.ini`, `ai.staging.ini`。Nibiruの[レジストリ](/ja/core/registry/)はそれらを自動的に検出します。

## 4つの主要なユースケース

### 1. チャット — モデルと会話する
```php
$ai = new \Nibiru\Module\Ai\Ai();

// One-shot
echo $ai->chat()->ask('Explain MMVC in two sentences.');

// Multi-turn
$chat = $ai->chat();
$chat->user('How do I scaffold a module?');
$chat->user('And add Graylog hooks?');   // referrs to previous turn
echo $chat->complete();

// Override per call
echo $ai->chat()
    ->system('Answer in German.')
    ->model('qwen2.5-coder:14b')
    ->temperature(0.1)
    ->ask('Was ist ein Modul?');
```
`Chat` プラグインは、主モデルが利用できない場合に自動的に `chat.fallback_model` にフォールバックします。これは、まだ `nibiru-coder` を構築している間にも役立ちます。

### 2. 埋め込み — テキストをベクトルに
```php
$embed = $ai->embed();

$va = $embed->one('controller');
$vb = $embed->one('module');
$score = \Nibiru\Module\Ai\Plugin\Embed::cosine($va, $vb);
// → 0.78 (close concepts)
```
コンパクトなストレージ:
```php
$packed = \Nibiru\Module\Ai\Plugin\Embed::pack($vec);   // base64 string, 4 bytes/dim
$vec    = \Nibiru\Module\Ai\Plugin\Embed::unpack($packed);
```
### 3. RAG — 収集、検索、基準化
```php
$rag = $ai->rag('product-help');

// One-time ingestion
$rag->ingestDir(__DIR__ . '/help/');             // walks .md/.txt/.php
$rag->ingestText('FAQ entry…', ['source' => 'faq-12']);
$rag->ingestFile('/var/data/manual.pdf.txt');

// Then ask grounded questions
echo $rag->ask('How do I cancel my subscription?');
// → "Per the help docs, you can cancel in account → settings… [1]"
```
ストレージ: コレクションごとに `application/module/ai/cache/rag/<name>.json` に1つのJSONファイル。再開可能で、DB不要で、メモリに約10kのチャンクを収容できます。

### 4. エージェント — 行動するツール
```php
use Nibiru\Module\Ai\Plugin\Tools;

$ai = new \Nibiru\Module\Ai\Ai();

$agent = $ai->agent()->withTools([
    new Tools\PdoQuery(),    // read-only SQL
    new Tools\HttpGet(),     // fetch URLs
    new Tools\FileRead(),    // read project files
]);

echo $agent->run('How many active users registered last week?');
// → agent decides to call pdo_query with SELECT count(*) FROM users…
//   reads observation, writes a final answer.
```
エージェントはReActスタイルのループを使用します：タスクを読み取る → ツールを選択する → 実行する → 观察する → 繰り返す → 最終的な回答。プロトコルは、すべてのOllamaモデルで動作する単純な```\`\`\`tool {...}\`\`\```JSONセントinelを使用します — モデル固有のツール呼び出しAPIは不要です。

## どこに住んでいますか
```
application/module/ai/
├── ai.php                    # main class implementing IModule
├── interfaces/ai.php         # contract
├── traits/ai.php             # cfg() helper
├── plugins/
│   ├── ollama.php            # raw transport
│   ├── chat.php              # chat completions
│   ├── embed.php             # embeddings + cosine + pack
│   ├── rag.php               # ingest + retrieve + grounded chat
│   ├── agent.php             # ReAct tool loop
│   ├── tool.php              # abstract base for custom tools
│   └── tools/
│       ├── pdoQuery.php      # read-only SQL
│       ├── httpGet.php       # HTTP GET
│       └── fileRead.php      # project-local file read
├── settings/ai.ini           # config
├── cache/rag/                # RAG vector index files (gitignored)
└── training/
    ├── Modelfile             # the nibiru-coder system prompt
    ├── build.sh              # one-command Modelfile → registered model
    ├── smoke-test.php        # verify the whole stack
    └── README.md             # training pipeline guide
```
## なぜこれが必要なのか

PHPには、PythonのLangChainやJSのVercel AI SDKのような確立された「AIフレームワーク」がありません。NibiruのAIモジュールは、私たちが書くことができた最も小さな、最も鋭いAPIでこのギャップを埋めます — 3層（トランスポート → プラグイン → モジュール）、DIグラフなし、SDKインストールなし、トークンごとの課金なし。

設計哲学：

- **あなたの脳を持ってください。** Ollamaがデフォルトで、AnthropicとOpenAIをドロップインとして使用できます。プロバイダーのスワップはINIファイルで行い、コード経由ではありません。
- **各RAGコレクションにつき1つのJSONファイル。** ベクトルデータベースはありません。再起動安全です。デバッグ時にgrepで検索できます。
- **ツールはPHPクラスです。** `Tool`を拡張し、名前とスキーマと実行メソッドを取得します。エージェントが残りの部分を処理します。
- **モデル固有のツール呼び出しAPIはありません。** 単一のフェンス付きJSON規約がどこでも機能します。

## 次に

- [チャットプラグインリファレンス](/ja/ai/module/chat/)
- [RAGプラグインリファレンス](/ja/ai/module/rag/)
- [エージェントプラグインリファレンス](/ja/ai/module/agent/)
- [nibiru-coderのトレーニング](/ja/ai/module/training/)
