---
title: "Plugin de chat"
description: "Completaciones de chat de una o varias turnos contra cualquier punto final compatible con Ollama."
---

El complemento de chat es la pieza más simple del módulo de IA. Envuelve la API de Ollama con un constructor fluido, memoria de conversación, una caída automática a un modelo de respaldo y un atajo `ask()` en un solo paso.

## Vista general de la API
```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}, …]
```
## En un solo paso
```php
echo (new \Nibiru\Module\Ai\Ai())
    ->chat()
    ->ask('In one sentence, what does Form::create() do?');
```
## Multiturno
```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
```
## Sobrescribir modelo y estilo por llamada
```php
$german = $ai->chat()
    ->system('Answer in German. Be precise.')
    ->model('qwen2.5-coder:14b')
    ->temperature(0.1)
    ->ask('Wie definiere ich einen Controller?');
```
## Fallback automático

Si `chat.model` (por ejemplo, `nibiru-coder:1.0`) no está en el servidor Ollama, el complemento vuelve a ejecutar la llamada con `chat.fallback_model` (por ejemplo, `qwen2.5-coder:14b`). Esto mantiene tu aplicación funcionando mientras sigues construyendo el ajuste fino.
```ini
[AI]
chat.model          = "nibiru-coder:1.0"
chat.fallback_model = "qwen2.5-coder:14b"
```
## Cambiar proveedores

Por defecto: Ollama. Para usar Anthropic Claude como el backend:
```ini
[AI]
chat.provider       = "anthropic"
anthropic.api_key   = "sk-ant-..."
anthropic.model     = "claude-haiku-4-5-20251001"
```
El complemento de chat no incluye el transporte de Anthropic en el módulo del framework aún — por ahora, el patrón de `scripts/lib/providers.mjs` del sitio de documentación es la referencia. (Consulte la [Hoja de ruta](/es/ai/roadmap/).)

## Un patrón práctico: chat-como-una-acción
```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();
    }
}
```
Seis líneas más el código base, y tienes un punto final de IA accesible mediante AJAX respaldado por tu propio Ollama.

## Trucos comunes

- **Olvidar `complete()`.** El constructor fluido no ejecuta nada hasta que se llama a `complete()` o `ask()`.
- **Llamar a `assistant()` entre turnos de usuario.** Está ahí para reproducir una conversación guardada, no para uso normal.
- **Conversaciones largas.** Cada turno reenvía la historia completa. Recorta con `reset()` o por segmentar `history()` cuando ya no necesites el contexto más antiguo.
- **Establecer temperatura demasiado baja.** 0 hace que el modelo sea rígido; 0.3–0.5 es el punto óptimo para respuestas técnicas.
