← Volver al menú
Toyota · Prueba de Concepto

Arquitectura de la solución

Desde la voz del cliente hasta la respuesta del agente, en ~1.5 segundos.

1. Flujo end-to-end

Todo el procesamiento de voz vive en ElevenAgents. Los tools (verde) llaman al backend propio hosteado en Cloudflare Workers. Las consultas a documentos (azul) usan el RAG nativo de ElevenLabs con embeddings multilingual.

flowchart TD
    Cliente["🧑 Cliente
voz · es-AR / pt-BR"] Widget["🌐 Widget web
Cloudflare Pages"] EL["🤖 ElevenAgents
servidor US"] ASR["📝 Scribe v2
Realtime ASR"] LLM["🧠 Gemini 2.5
Flash Lite"] TTS["🔊 Flash v2.5
/ V3 Conversational"] Worker["⚡ Cloudflare Worker
poc-toyota-tools"] Data[("💾 JSONs bundleados
Salesforce · TPA · Kinto")] KB[("📚 Knowledge Base
multilingual e5-large")] Cliente <--> Widget Widget <--> EL EL --> ASR ASR --> LLM LLM --> TTS TTS --> EL LLM -.->|tool call
<200 ms| Worker Worker --> Data LLM -.->|RAG retrieval| KB classDef voice fill:#fce8ea,stroke:#EB0A1E,color:#000 classDef agent fill:#e4f0ff,stroke:#0b5ed7,color:#000 classDef tool fill:#e9f7e9,stroke:#22803b,color:#000 classDef data fill:#fff8e1,stroke:#b36b0a,color:#000 class Cliente,Widget,ASR,TTS voice class EL,LLM agent class Worker tool class Data,KB data

2. Métricas de latencia medidas

Desde Argentina hacia el worker. Desde ElevenLabs (US) es incluso más bajo.

~75 ms
TTS primera palabra
~110 ms
Tool call warm
~280 ms
Tool call cold
< 1.5 s
Turn response
< 300 ms
Barge-in
12 s
Turn timeout

3. Mapa de agentes y sus backends

4 agentes consumen RAG puro, 3 agentes hacen llamadas a APIs reales del backend.

#AgenteFuente de datosEndpoint / KB
1TASA Service 90kRAGService_Plan_ARG.md
2TASA Kinto RentalAPI/tools/kinto/availability
3TASA TPA VoucherAPI · 2/tools/tpa/account + send_voucher
4TDB Warranty T10RAGWarranty_TOYOTA10.md
5TDB Case StatusAPI/tools/salesforce/case_status
6TASA ConnectedRAGConnected_Services_ARG.md
7TDB Manual LexusRAG grandePDF UX300h MY25 · 500+ págs

4. Flujo detallado de un agente transaccional

Ejemplo del agente más complejo del PoC — TPA Voucher — con 2 tools encadenadas y lógica de branching según situación del plan.

sequenceDiagram
    participant C as Cliente
    participant E as ElevenAgents
    participant W as CF Worker
    participant D as Data JSON

    C->>E: "Necesito cupón, DNI 24916694"
    E->>W: POST /tools/tpa/account
{ dni: "24916694" } W->>D: lookup D-->>W: Gabriel Romay · NORMAL-PRENDARIO · Yaris W-->>E: { recomendacion: "emitir_cupon", email } alt recomendacion = emitir_cupon E->>C: "Confirme email XXXX@PRUEBA.COM.AR" C->>E: "Sí, correcto" E->>W: POST /tools/tpa/send_voucher
{ grupo, orden, email } W-->>E: { sent: true } E->>C: "Cupón enviado. Medios: PMC, Link, Mercado Pago..." else recomendacion = derivar_autogestion E->>C: "Cuenta con 4+ cuotas en mora. Use Portal de Autogestión..." else recomendacion = derivar_humano E->>C: "Cuenta en situación CANCELADOS. Le transfiero a un operador." end

5. Stack tecnológico

ElevenLabs Agents (managed)

  • ASR: Scribe v2 Realtime
  • LLM: Gemini 2.5 Flash Lite · temp 0.3 · tokens 180-260
  • TTS es-AR: Flash v2.5 + voz Melanie
  • TTS pt-BR: V3 Conversational + voz Fernanda
  • Text normalization: ElevenLabs native (precios, kms, años)
  • Turno especulativo: ON

Backend (self-hosted)

  • Runtime: Cloudflare Workers (edge global · V8 isolates)
  • Framework: Hono 4
  • Lenguaje: TypeScript
  • Data: JSONs bundleados in-memory (~1.4 MB)
  • Auth: header X-PoC-Token
  • Bundle: 1.6 MB raw · 290 KB gzip

Knowledge Base (RAG)

  • Embedding: intfloat/multilingual-e5-large-instruct
  • Chunks retrieved: 6 · max chars 20.000
  • Distance threshold: 0.4 (estricto)
  • Docs indexados: 3 MD + 1 PDF (Lexus UX300h)

Frontend (demo)

  • Hosting: Cloudflare Pages
  • Dominio: poc-toyota-demo.pages.dev
  • Widget: embed oficial @elevenlabs/convai-widget-embed
  • Páginas: 1 dashboard + 7 agentes + arquitectura

6. Flujo de datos (ingesta → runtime)

flowchart LR
    subgraph Ingesta["📥 Ingesta (offline)"]
        XLS[".xlsx
Salesforce"] CSV[".csv"] PDF[".pdf
Manual Lexus"] DOC[".docx
Scripts"] end subgraph Procesamiento["🔧 Procesamiento"] PY["Python
openpyxl + csv"] MD["Markdown
normalizado"] JSON["JSON
slim"] end subgraph Runtime["🚀 Runtime"] KB["ElevenLabs KB
Multilingual"] WRKR["Worker
bundleado"] end XLS --> PY --> JSON --> WRKR CSV --> PY PDF --> KB DOC --> MD --> KB

7. Decisiones clave de arquitectura