AIモジュール
NibiruのファーストクラスAI — チャット、エンベディング、RAG、エージェント — あなたの自社のOllamaに接続されています。有料APIは不要です。
NibiruはAIモジュール(application/module/ai/)を搭載しており、これによりNibiruアプリケーションには一級のAIインターフェースが提供されます。PHPコードはローカルのLLMとチャットしたり、テキストを埋め込みたり、自身のデータ上でRAGを実行したり、ツールを使用したエージェントを実行したりすることができ、すべてが支払いが必要なAPIにデータを送信することなくに行われます。
このモジュールはデフォルトであなたのyour Ollama instanceのOllamaに接続されていますので、推論はあなたのハードウェア、ネットワーク、および条件に基づいて行われます。
あなたが得る内容
Section titled “あなたが得る内容”| プラグイン | 何をしますか | 一文で説明 |
|---|---|---|
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
Section titled “こんにちは、AI”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インストールはありません。
設定によって接続された
Section titled “設定によって接続された”各プラグインは、設定を application/module/ai/settings/ai.ini から読みます。
[AI]ollama.base_url = "https://your-ollama-host.example"chat.model = "nibiru-coder:1.0"chat.fallback_model = "qwen2.5-coder:14b"chat.temperature = 0.4chat.max_tokens = 1024embed.model = "nomic-embed-text"rag.top_k = 6agent.max_iterations = 6環境ごとのオーバーライド: ai.production.ini, ai.staging.ini。Nibiruのレジストリはそれらを自動的に検出します。
4つの主要なユースケース
Section titled “4つの主要なユースケース”1. チャット — モデルと会話する
Section titled “1. チャット — モデルと会話する”$ai = new \Nibiru\Module\Ai\Ai();
// One-shotecho $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 turnecho $chat->complete();
// Override per callecho $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. 埋め込み — テキストをベクトルに
Section titled “2. 埋め込み — テキストをベクトルに”$embed = $ai->embed();
$va = $embed->one('controller');$vb = $embed->one('module');$score = \Nibiru\Module\Ai\Plugin\Embed::cosine($va, $vb);// → 0.78 (close concepts)コンパクトなストレージ:
$packed = \Nibiru\Module\Ai\Plugin\Embed::pack($vec); / base64 string, 4 bytes/dim$vec = \Nibiru\Module\Ai\Plugin\Embed::unpack($packed);3. RAG — 収集、検索、基準化
Section titled “3. RAG — 収集、検索、基準化”$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 questionsecho $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. エージェント — 行動するツール
Section titled “4. エージェント — 行動するツール”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は不要です。
どこに住んでいますか
Section titled “どこに住んでいますか”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なぜこれが必要なのか
Section titled “なぜこれが必要なのか”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規約がどこでも機能します。