2026ko abuztuaren 18a - Euskolabs
Euskolab-en daukagu Charly, ahots laguntzaile hibrido bat, Telegram, web eta APIan 24 / 7 eragile dituena. Hau da gida teknikoa nola eraiki genuen erabiltzeko Azkarragoa ahots-ezagutzerako eta Kokoro TTS sintesirako, lineaz kanpo.
Audio entrada → Whisper (STT) → LLM (razonamiento) → Kokoro (TTS) → Audio salida
↓
Ollama (fallback local)
↓
Gemini (cloud)
Fluxua sinplea da: erabiltzaileak hitz egiten du, Whisper transcribe, LLM-ak erantzuna sortzen du, Kokoro ahotsez sintetizatzen du. Latentzia osoa 2-4 segundokoa da hardware estandarrean.
Azkarrago-Whisper Whisper-en birinplementazio optimizatua da CTranslate2 erabiliz. Jatorrizko Whisper-a baino 4x azkarragoa da zehaztasun berarekin.
from faster_whisper import WhisperModel
model = WhisperModel("base", device="cpu", compute_type="int8")
def transcribe(audio_path):
segments, info = model.transcribe(audio_path, language="es")
text = " ".join([s.text for s in segments])
return text.strip()
Modeloa erabiltzen dugu base pUZaren kasuan, abiadura/doitasun orekarik onena eskaintzen duelako. GPU inguruneetarako, large-v3 ia zehaztasun osoa ematen du.
Kokoro iturburu irekiko TTS motorra da, kalitate natural izugarria duena. Hainbat ahots eta hizkuntza onartzen ditu.
import kokoro
# Inicializar con voz por defecto
tts = kokoro.KokoroTTS(model_path="kokoro.pt", voice="em_alex")
def speak(text, output_path="/tmp/response.wav"):
tts.generate(text, output_path)
return output_path
Ahotsa em_alex charlyk ekoizpenean erabiltzen duena da, naturala, garbia, erritmo onean. 10 segundoko audio-sorkuntzak 2 segundo baino gutxiago behar ditu PUZean.
Agentearen burmuinak modu bikoitza erabiltzen du: Gemini hodeian gehienezko edukiera lortzeko eta Olama LLAMA lokalarekin pribatutasunerako eta lineaz kanpo lan egiteko.
import google.generativeai as genai
import ollama
def generate_response(prompt, context=""):
try:
# Cloud first — máxima capacidad
model = genai.GenerativeModel("gemini-pro")
response = model.generate_content(f"{context}\n\nUser: {prompt}")
return response.text
except Exception:
# Fallback local — privacidad y offline
response = ollama.chat(
model="llama3",
messages=[{"role": "user", "content": f"{context}\n\n{prompt}"}]
)
return response["message"]["content"]
Atzerapena automatikoa da: Gemini APIak huts egiten badu (maiztasun-muga, sareko erorketa, etab.), sistemak Ollama lokala erabiltzen du erabiltzaileak etenik gabe.
Agentea negozio-prozesuekin konektatzen da n8n webhooks bidez:
import httpx
async def execute_workflow(action, params):
webhook_url = f"http://n8n:5678/webhook/{action}"
async with httpx.AsyncClient() as client:
response = await client.post(webhook_url, json=params)
return response.json()
Horrek aukera ematen dio agenteari benetako ekintzak egiteko: fakturak sortzeko, mezu elektronikoak bidaltzeko, CRM eguneratzeko, etab.
Charly VPS batean doa Dockerrekin. Whisper eta Kokororen ereduak memorian kargatzen dira hasten direnean. Olama beste zerbitzu bat da. Latentzia osoa:
| Fasea | Denbora |
|---|---|
| Whisper (transcription) | ~ 0,5 |
| LLM (erantzunen belaunaldia) | ~ 1-2s |
| Kokoro (ahotsaren sintesia) | ~ 1-2s |
| Atzera eta aurrera | ~ 2-4 |
Zure AAko agentea nahi duzu ahots batez? Eskatu diagnostikoa euskolabs. com.