Saltar a contenido

Auto-aprendizaje (Fase 19, v0.13)

Receta mínima offline (sin red ni API keys) que muestra las tres primitivas de auto-aprendizaje de Ciel: prompt versionado, reflexión post-run e introspección de estado cognitivo, más la CLI ciel reflect.

Todas las clases usan MockProvider (determinista) o un DummyProvider local.

1. Prompt versionado

from ciel.runtime.state_backend import build_state_backend
from ciel.runtime.prompt_versioning import PromptRegistry

backend = build_state_backend()  # SQLite en dev / Postgres en prod (tenant-safe)
reg = PromptRegistry(backend)

# Crea la versión inicial 0.0.0
v0 = reg.create("asistente", "Eres un asistente útil.", tenant_id="t1")
print(v0.version)            # "0.0.0"

# Evoluciona a 0.1.0 (bump minor) con changelog trazable
v1 = reg.update(
    "asistente",
    "Eres un asistente útil y conciso.",
    tenant_id="t1",
    bump="minor",
    changelog="más conciso",
)
print(v1.version, v1.previous_version)  # "0.1.0" "0.0.0"

# Linaje
tree = reg.evolution_tree("asistente", tenant_id="t1")
print(tree["lineage"])    # ["0.0.0", "0.1.0"]

2. Reflexión post-run (learning-from-failure)

from ciel.api import Agent
from ciel.providers import MockProvider
from ciel.runtime import ChatRequest, ChatMessage

# MockProvider fijo: simula un run que falla en un tool.
agent = Agent(
    provider=MockProvider(mode="fixed", response="ok"),
    tools=[],
    reflection=True,          # habilita self-reflection (offline-safe)
    tenant_id="t1",
)

resp = agent.run("haz algo", tenant_id="t1")
# Si un tool falló, `resp.reflection` trae la lección determinista.
print(getattr(resp, "reflection", None))

AgentResponse.reflection es una property aditiva: si no hay reflexión instalada o el run no falló, es None. Las lecciones se persisten como memoria episódica role="lesson" (multitenant, reutiliza F17).

3. Introspección / estado cognitivo

from ciel.api import Agent
from ciel.providers import MockProvider

agent = Agent(
    provider=MockProvider(mode="fixed", response="listo"),
    tools=[],
    introspection=True,      # registra CognitiveSnapshot post-run
    tenant_id="t1",
)

agent.run("primera tarea", tenant_id="t1")
agent.run("segunda tarea", tenant_id="t1")

# Vuelca los últimos snapshots del agente.
report = agent.introspect()
for snap in report.snapshots:
    print(snap.active_prompt_version, snap.had_failure, snap.confidence)

Cada CognitiveSnapshot lleva: versión de prompt activa, turnos de memoria, tool calls, si falló, confianza heurística (0.3 fallo / 0.8 con tools / 1.0 directo) y un rationale. El bloque [Estado cognitivo] se inyecta en el system prompt de los runs siguientes para que el modelo sea consciente de su estado.

4. CLI ciel reflect

# KPIs de auto-reflexión sobre un dataset (offline, MockProvider)
ciel reflect run --dataset tests/eval/smoke.yaml --provider mock --threshold 0.0

# Linaje de un prompt versionado
ciel reflect history --name asistente --tenant-id t1

# Estado cognitivo de una sesión
ciel reflect introspect --session <session-id> --tenant-id t1

Todas las operaciones son offline-safe (sin red ni API keys).