---
title: "Chat-Plugin"
description: "Einzel- oder mehrstufige Chat-Vervollständigungen gegen einen beliebigen Ollama-kompatiblen Endpunkt."
---

Das Chat-Plugin ist das einfachste Element des KI-Moduls. Es umhüllt Ollamas `/api/chat` mit einem flüssigen Builder, einer Konversationsmemory, einem automatischen Fallback auf ein Sicherheitsmodell und einem `ask()`-Shortcut für einen Einzeiler.

## API im Überblick
```php
$ai   = new \Nibiru\Module\Ai\Ai();
$chat = $ai->chat();

$chat->system('Be terse.');           // optional system prompt
$chat->model('qwen2.5-coder:14b');    // override the configured model
$chat->temperature(0.2);              // override config
$chat->maxTokens(512);                // override config

$chat->user('Hello');                 // append a user message
$chat->assistant('Hi.');              // append an assistant message (rare)

$reply = $chat->complete();           // run the call, return text
$reply = $chat->ask('How are you?');  // = ->user(...)->complete()

$chat->reset();                       // clear messages, keep model + system
$chat->history();                     // [{role, content}, …]
```
## Einmalig
```php
echo (new \Nibiru\Module\Ai\Ai())
    ->chat()
    ->ask('In one sentence, what does Form::create() do?');
```
## Mehrfachgespräch
```php
$chat = $ai->chat();

$chat->user('Name three Nibiru singletons.');
$singletons = $chat->complete();        // appended to history

$chat->user('What does the second one do?');
$detail = $chat->complete();            // model has full context
```
## Überschreiben des Modells und des Stils pro Aufruf
```php
$german = $ai->chat()
    ->system('Answer in German. Be precise.')
    ->model('qwen2.5-coder:14b')
    ->temperature(0.1)
    ->ask('Wie definiere ich einen Controller?');
```
## Automatischer Fallback

Wenn `chat.model` (z.B. `nibiru-coder:1.0`) nicht auf dem Ollama-Server verfügbar ist, führt das Plugin den Aufruf mit `chat.fallback_model` (z.B. `qwen2.5-coder:14b`) erneut aus. Dies gewährleistet, dass Ihre Anwendung weiterhin funktioniert, während Sie die Feinabstimmung erstellen.
```ini
[AI]
chat.model          = "nibiru-coder:1.0"
chat.fallback_model = "qwen2.5-coder:14b"
```
## Anbieter wechseln

Standard: Ollama. Um Anthropic Claude als Backend zu verwenden:
```ini
[AI]
chat.provider       = "anthropic"
anthropic.api_key   = "sk-ant-..."
anthropic.model     = "claude-haiku-4-5-20251001"
```
Der Chat-Plugin verfügt derzeit nicht über die Anthropic-Transport-Funktion im Framework-Modul — für jetzt ist das Muster in `scripts/lib/providers.mjs` der Dokumentationssite das Referenzmodell. (Siehe die [Roadmap](/en/ai/roadmap/).)

## Ein praktisches Muster: Chat als eine Aktion
```php
namespace Nibiru;
use Nibiru\Adapter\Controller;
use Nibiru\Module\Ai\Ai;

class supportController extends Controller
{
    public function askAction(): void {
        View::forwardToJsonHeader();
        $q = trim($this->getPost('question', ''));
        if ($q === '') {
            View::assign(['data' => ['error' => 'question required']]);
            return;
        }
        $reply = (new Ai())->chat()
            ->system('You are the Nibiru support assistant. Be brief.')
            ->ask($q);
        View::assign(['data' => ['answer' => $reply]]);
    }

    public function pageAction(): void {}
    public function navigationAction(): void {
        JsonNavigation::getInstance()->loadJsonNavigationArray();
    }
}
```
Sechs Zeilen plus Boilerplate und Sie haben einen durch Ihren eigenen Ollama gestützten AJAX-aufrufbaren KI-Endpunkt.

## Häufige Fallen

- **Vergessen Sie `complete()`.** Der fließende Builder führt nichts aus, bis `complete()` oder `ask()` aufgerufen wird.
- **Aufruf von `assistant()` zwischen Benutzerabläufen.** Es dient dazu, eine gespeicherte Konversation wiederzugeben und nicht für die normale Nutzung.
- **Lange Konversationen.** Jeder Ablauf sendet die vollständige Geschichte erneut. Verkürzen Sie dies mit `reset()` oder durch Schneiden von `history()`, wenn Sie den älteren Kontext nicht mehr benötigen.
- **Temperatur zu niedrig einstellen.** 0 macht das Modell steif; 0,3–0,5 ist der ideale Bereich für technische Antworten.
