Diferencia entre revisiones de «Manual de operación de vFlow»
| (No se muestran 42 ediciones intermedias del mismo usuario) | |||
| Línea 60: | Línea 60: | ||
<br> | <br> | ||
| − | <div style="background-color: #fef6e7; border: 1px solid #fbd68a; padding: 1em; border-radius: 4px; | + | <div style="background-color: #fef6e7; border: 1px solid #fbd68a; padding: 1em; border-radius: 4px;width: fit-content; margin-left: 50px"> |
'''⚠️ ATENCION !!''' | '''⚠️ ATENCION !!''' | ||
'''Los cambios en tablas de configuración de BBDD de vFlow (orquestadores, plataformas, agentes) requieren reinicio del servicio vFlowProxy''' | '''Los cambios en tablas de configuración de BBDD de vFlow (orquestadores, plataformas, agentes) requieren reinicio del servicio vFlowProxy''' | ||
| Línea 67: | Línea 67: | ||
<br> | <br> | ||
| − | <div style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <div style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', 'Monaco', 'Courier New', monospace;"> |
/etc/init.d/vFlowProxy.service status | /etc/init.d/vFlowProxy.service status | ||
| + | <br> | ||
/etc/init.d/vFlowProxy.service stop | /etc/init.d/vFlowProxy.service stop | ||
| + | <br> | ||
/etc/init.d/vFlowProxy.service start | /etc/init.d/vFlowProxy.service start | ||
| + | <br> | ||
</div> | </div> | ||
| Línea 80: | Línea 83: | ||
Relevante para poder '''poner en marcha un loader''': | Relevante para poder '''poner en marcha un loader''': | ||
| + | * Subir el fichero inicial previamente a la carpeta destino según entorno (p. ej <code>/var/www/html/storages/production</code> | ||
| + | * Tipo de loader --> API | ||
| + | * Método --> GET | ||
| + | * URL --> (ejemplo: http://172.25.129.242/storages/test/fichero-pru.txt) | ||
| + | ::* Existirán URL "production", "staging" y "test" | ||
| + | * Text Splitter: Recursive | ||
* Qdrant --> localhost:6333 | * Qdrant --> localhost:6333 | ||
* Record Manager --> SQLite | * Record Manager --> SQLite | ||
| Línea 86: | Línea 95: | ||
[[Archivo:Alta loader vflow.png|800px|miniaturadeimagen|no|alta loader vFlow|link=]] | [[Archivo:Alta loader vflow.png|800px|miniaturadeimagen|no|alta loader vFlow|link=]] | ||
<br> | <br> | ||
| + | |||
| + | == Gestión en vFlow == | ||
| + | vFlow prevé la existencia de tres entornos que permita hacer una gestión segura de agentes y RAG: | ||
| + | |||
| + | * Producción | ||
| + | * Preproducción | ||
| + | * Pruebas | ||
| + | |||
| + | Para cada agente o store de RAG se podrá desplegar un entorno (producción), dos o los tres entornos | ||
| + | |||
| + | |||
| + | <div style="background-color: #f0fff4; border: 3px solid #c6f6d5; padding: 1em; border-radius: 4px;width: fit-content; margin-left: 0px"> | ||
| + | ✅ '''Recomendación'''<br> | ||
| + | |||
| + | ::En la mayoría de los casos con disponer de entorno de producción y preproducción tanto para agente como para RAG será suficiente | ||
| + | </div> | ||
| + | <br> | ||
| + | Para realizar una gestión completa en vFlow (suponiendo tres entornos y gestión de agentes y RAG), deberemos tener | ||
| + | <br> | ||
| + | [[Archivo:Gestión RAG.png|1000px|miniaturadeimagen|centro|Gestión RAG en vFlow|link=]] | ||
| + | <br> | ||
| + | |||
| + | '''En orquestador''' | ||
| + | * Crear '''tres stores''' (pro/pre/pru); en cada store: | ||
| + | ::* En total '''tres loaders'''. Crear un loader por entorno (p.ej /pro/nombrefich). | ||
| + | ::* Subir un primer "nombrefich" | ||
| + | ::::* tipo texto (versión 0) | ||
| + | ::::* el mismo para todos los entornos | ||
| + | ::::* se sube por medios convencionales (p. ej SCP) | ||
| + | * Asegurar que los stores queden totalmente creados (estado "UPSERTED") | ||
| + | * Crear '''tres agentes''' (pro/pre/pru) | ||
| + | ::* Asociar a stores (pro/pre/pru) | ||
| + | <br> | ||
| + | |||
| + | '''En flow''' | ||
| + | * Crear '''un agente''' | ||
| + | ::* Vincularlo a los tres agentes de orquestador (pro/pre/pru) | ||
| + | * Crear '''un store''' | ||
| + | ::* Vinculado a los tres stores de orquestador (pro/pre/pru) | ||
| + | * Crear '''un loader''' | ||
| + | ::* Loader vinculado a agente de vflow | ||
| + | ::* C_NAME loader coincidirá con los de orquestador (p.ej "nombrefich") | ||
| + | ::* Subir nueva versión v1 (".txt", ".pdf", ".doc", ".docx" | ||
== Diagnósticos == | == Diagnósticos == | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
tail -f /var/log/vFlowProxy/vFlowProxy.log | tail -f /var/log/vFlowProxy/vFlowProxy.log | ||
</pre> | </pre> | ||
| Línea 96: | Línea 148: | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
nc localhost 1131 | nc localhost 1131 | ||
</pre> | </pre> | ||
| Línea 103: | Línea 155: | ||
::Monitoriza estado del proceso vflowProxy | ::Monitoriza estado del proceso vflowProxy | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
{ | { | ||
"proceso": { | "proceso": { | ||
| Línea 146: | Línea 198: | ||
<br> | <br> | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
asterisk -rv | grep callsquare_name | asterisk -rv | grep callsquare_name | ||
</pre> | </pre> | ||
| Línea 152: | Línea 204: | ||
::para canal voz | ::para canal voz | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
tail -f /var/log/xcally/agi-combined.yyyy-mm-dd.log | tail -f /var/log/xcally/agi-combined.yyyy-mm-dd.log | ||
</pre> | </pre> | ||
| Línea 168: | Línea 220: | ||
Es útil comenzar con | Es útil comenzar con | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/home/sat/vFlowProxy/vFlowGetInfo.sh | /home/sat/vFlowProxy/vFlowGetInfo.sh | ||
</pre> | </pre> | ||
que sin parámetros adicionales confirma el correcto estado de vFlowProxy | que sin parámetros adicionales confirma el correcto estado de vFlowProxy | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
{ | { | ||
"errorNum": 0, | "errorNum": 0, | ||
| Línea 200: | Línea 252: | ||
EJEMPLO ".INI" DE PLATAFORMA | EJEMPLO ".INI" DE PLATAFORMA | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
[uuids] | [uuids] | ||
platform=1d111530-e22d-11f0-b0f2-5254008bef96 | platform=1d111530-e22d-11f0-b0f2-5254008bef96 | ||
| Línea 208: | Línea 260: | ||
EJEMPLO ".INI" DE AGENTE | EJEMPLO ".INI" DE AGENTE | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
[uuids] | [uuids] | ||
agent=1a3a1020-ea1d-11f0-b4a5-5254008bef96 | agent=1a3a1020-ea1d-11f0-b4a5-5254008bef96 | ||
| Línea 222: | Línea 274: | ||
::* environment --> production, staging, test | ::* environment --> production, staging, test | ||
EJEMPLO ".INI" DE SERVICIO | EJEMPLO ".INI" DE SERVICIO | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
[arch_uuids] | [arch_uuids] | ||
agent=/etc/MDtel/vFlow/agent_loop_01.ini | agent=/etc/MDtel/vFlow/agent_loop_01.ini | ||
| Línea 250: | Línea 302: | ||
=== Invocación === | === Invocación === | ||
| + | ==== Generales ==== | ||
| + | |||
| + | ===== Ver configuración ===== | ||
| + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> | ||
| + | /usr/local/sbin/vFlowOmnisuite <config_arch> configPrint | ||
| + | </pre> | ||
| + | |||
| + | Ejemplo de respuesta | ||
| + | |||
| + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> | ||
| + | Configuration: | ||
| + | agent_arch_uuid=/etc/MDtel/vFlow/agent_fse_rapido.ini | ||
| + | agent_uuid=3487af28-1d14-11f1-803c-525400ef204c | ||
| + | platform_arch_uuid=/etc/MDtel/vFlow/platform_labomsui.ini | ||
| + | platform_uuid=9a54ea74-f050-11f0-bdf1-5254008bef96 | ||
| + | |||
| + | vflow_host_port=labvflow.mdnova.local | ||
| + | vflow_timeout_s=50 | ||
| + | vflow_environment=production | ||
| + | vflow_channel_type=voice | ||
| + | vflow_language=es | ||
| + | |||
| + | omnisuite_channel_text_type=chat | ||
| + | omnisuite_service_id=287 | ||
| + | omnisuite_service_name=desarrollo | ||
| + | { | ||
| + | "errorNum": 0, | ||
| + | "errorCad": "OK" | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | |||
| + | ===== Ver versión ===== | ||
| + | |||
| + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> | ||
| + | /usr/local/sbin/vFlowOmnisuite version | ||
| + | </pre> | ||
| + | |||
| + | Ejemplo de respuesta | ||
| + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> | ||
| + | 00.00.02 | ||
| + | </pre> | ||
==== Para canales de texto ==== | ==== Para canales de texto ==== | ||
Para canales de texto en Omnisuite existe un único Comando de invocación "omnisuiteText" | Para canales de texto en Omnisuite existe un único Comando de invocación "omnisuiteText" | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite <config_arch> omnisuiteText <omnisuite_id> <omnisuite_websiteId> <omnisuite_createdAt> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> <question> | /usr/local/sbin/vFlowOmnisuite <config_arch> omnisuiteText <omnisuite_id> <omnisuite_websiteId> <omnisuite_createdAt> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> <question> | ||
</pre> | </pre> | ||
| Línea 296: | Línea 391: | ||
===== Abrir sesión ===== | ===== Abrir sesión ===== | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionOpen <omnisuite_UniqueId> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> | /usr/local/sbin/vFlowOmnisuite <config_arch> sessionOpen <omnisuite_UniqueId> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> | ||
</pre> | </pre> | ||
| Línea 318: | Línea 413: | ||
Ejemplo de respuesta JSON | Ejemplo de respuesta JSON | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
{ | { | ||
"errorNum": 0, | "errorNum": 0, | ||
| Línea 330: | Línea 425: | ||
===== Enviar texto ===== | ===== Enviar texto ===== | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite <config_arch> textRequest <vflow_session_uuid> <question> | /usr/local/sbin/vFlowOmnisuite <config_arch> textRequest <vflow_session_uuid> <question> | ||
</pre> | </pre> | ||
| Línea 347: | Línea 442: | ||
Ejemplo de respuesta JSON | Ejemplo de respuesta JSON | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
{ | { | ||
"errorNum": 0, | "errorNum": 0, | ||
| Línea 358: | Línea 453: | ||
===== Cerrar sesión===== | ===== Cerrar sesión===== | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionClose <vflow_session_uuid> <vflow_cause> | /usr/local/sbin/vFlowOmnisuite <config_arch> sessionClose <vflow_session_uuid> <vflow_cause> | ||
</pre> | </pre> | ||
| Línea 375: | Línea 470: | ||
Ejemplo de respuesta JSON | Ejemplo de respuesta JSON | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
{ | { | ||
"errorNum": 104, | "errorNum": 104, | ||
| Línea 384: | Línea 479: | ||
=== Ejemplos para omnisuite === | === Ejemplos para omnisuite === | ||
| − | + | ==== Ejemplo de chat ==== | |
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_chat.ini" "omnisuiteText" "{{interaction.id}}" "{{account.id}}" "{{interaction.createdAt}}" "" "" "" "{{message.body}}" | jq -r '.response' | /usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_chat.ini" "omnisuiteText" "{{interaction.id}}" "{{account.id}}" "{{interaction.createdAt}}" "" "" "" "{{message.body}}" | jq -r '.response' | ||
</pre> | </pre> | ||
| − | + | ==== Ejemplo de voz ==== | |
[[Archivo:Imagen cally square.jpg|1024px|none|miniatura|Ejemplo de flujo de Cally Square]] | [[Archivo:Imagen cally square.jpg|1024px|none|miniatura|Ejemplo de flujo de Cally Square]] | ||
| Línea 397: | Línea 492: | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_voice.ini" "sessionOpen" "{UNIQUEID}" "" "" "" | jq -r '.session' </pre> | /usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_voice.ini" "sessionOpen" "{UNIQUEID}" "" "" "" | jq -r '.session' </pre> | ||
::<small>salida del comando almacenado en variable "vflow_sessionopen_response" para su posterior uso en cally square</small> | ::<small>salida del comando almacenado en variable "vflow_sessionopen_response" para su posterior uso en cally square</small> | ||
| Línea 406: | Línea 501: | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "textRequest" "{vflow_sessionopen_response}" "{OPENAI_WHISPER_TRANSCRIPT}" | jq -r '.response' | /usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "textRequest" "{vflow_sessionopen_response}" "{OPENAI_WHISPER_TRANSCRIPT}" | jq -r '.response' | ||
</pre> | </pre> | ||
| Línea 416: | Línea 511: | ||
<br> | <br> | ||
| − | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; | + | <pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; width: fit-content; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;"> |
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "sessionClose" "{{vflow_sessionopen_response}}" "normal" | /usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "sessionClose" "{{vflow_sessionopen_response}}" "normal" | ||
</pre> | </pre> | ||
Revisión actual del 12:26 24 mar 2026
Sumario
1 Descripción general vFlow
vFlow es un módulo de conexión a sistemas de inteligencia artifical para sistemas de comunicaciones unificadas, ya sean sistemas corporativos o contact center Gracias a vFlow, las plataformas de UC dispondrán de una solución para comunicarse con sistemas IA utilizando un mismo mecanismo independientemente de la solución de inteligencia artificial que se utilice
Para proporcionar el servicio de manera completa, vFlow (en concreto el orquestador) se conectará a sistemas de inteligencia artificial (LLM) que permitirán desarrollar los agentes definidos en los orquestadores
Conceptos:
- Plataforma--> Plataforma de comunicaciones unificadas; por ejemplo Omnisuite o VIVAit Call
- Orquestador--> Plataforma agéntica de IA (por ejemplo Flowise)
- vFlowProxy--> Módulo VIVAit que conecta multiples plataformas con múltiples orquestadores
- LLM--> Modelo de lenguaje natural que usará un orquestadores
- Agente--> Cada uno de los flujos creados en vFlow; corresponde a un par plataforma/agentflow de orquestador
- Servicio--> Cada elemento de negocio en la plataforma de CU (por ejemplo VDN)
Los módulos principales de vFlow son:
- vFlowProxy: Recibe las conexiones de los sistemas de comunicaciones unificadas, y conecta con los orquestadores de Inteligencia Artificial de manera segura y adaptada al tipo de servicio; el acceso a vFlow Proxy desde las plataformas se realizará mediante:
- Programa cliente: Se utiliza en el sistema de comunicaciones unificadas (actualmente VIVAit Call y Omnsisuite) para invocar a vFlow
- API REST: Alternativa al programa cliente, vFlowProxy proporciona una API REST que facilita que cualquier plataforma pueda comunicarse mediante un procedimiento estándar y documentado
- Portal de administración vFlow: Permite visualizar las interaciones realizadas y configurar el sistema
- Orquestador de IA: Herramienta de Inteligencia Artificial que permitirá la creación de aplicaciones personalizadas (agentes)
Otros elementos relevantes serán:
- Base de datos vFlow:
- Almacena información sobre sesiones y transacciones realizadas
- Almacena información de configuración sobre vFlow
- Gestiona el RAG de las inteligencias artificiales a usar
2 Puesta en marcha de nodo vFlow
Existe un nodo vFlow en los repositorios habituales proporcionados
Para dar de alta nodo vflow en un cliente hay que:
- Configurar IP (por defecto la maquina va configurada por DHCP)
- Adaptar el firewall, para ello REVISAR el fichero
/etc/firewall/vars.sh - Certificados validos en apache
- REVISAR ficheros
/etc/apache2/sites-enabled/flowise.confy/etc/apache2/sites-enabled/vFlow.confla variableServerName(nombre valido de la maquina)
Accesos vFlow (se debe cambiar tras instalación):
- Usuario ssh y de SO por defecto es sat y clave a proporcionar.
- Para el portal de flowise las credenciales son usuario: vfloadmin@vflow.com clave: A proporcionar
- Para el portal de vflow las credenciales son usaurio sat y clave a proporcionar.
Accesos BBDD vFlow
- Para acceder a la base de datos desde el workbenck solo desde localhost (o tunel):
- BBDD Vlfow (admin) vflowadmin // clave a proporcionar
- BBDD Vlfow (no_admin) vflow // clave a proporcionar
Portal orquestador Flowise
ubicado en https://host.cliente.xx:4567
⚠️ ATENCION !! Los cambios en tablas de configuración de BBDD de vFlow (orquestadores, plataformas, agentes) requieren reinicio del servicio vFlowProxy
/etc/init.d/vFlowProxy.service status
/etc/init.d/vFlowProxy.service stop
/etc/init.d/vFlowProxy.service start
El fichero de configuración del demonio <cvode>vFlowProxy se encuentra en /etc/MDtel/vFlowProxy.conf, si bien este fichero de configuración no se modificará habitualmente (los parámetros generales de configuración de vFlowProxy se encuentran en la BBDD de vFlow)
Relevante para poder poner en marcha un loader:
- Subir el fichero inicial previamente a la carpeta destino según entorno (p. ej
/var/www/html/storages/production - Tipo de loader --> API
- Método --> GET
- URL --> (ejemplo: http://172.25.129.242/storages/test/fichero-pru.txt)
- Existirán URL "production", "staging" y "test"
- Text Splitter: Recursive
- Qdrant --> localhost:6333
- Record Manager --> SQLite
Se adjunta imagen a modo de ejemplo
3 Gestión en vFlow
vFlow prevé la existencia de tres entornos que permita hacer una gestión segura de agentes y RAG:
- Producción
- Preproducción
- Pruebas
Para cada agente o store de RAG se podrá desplegar un entorno (producción), dos o los tres entornos
✅ Recomendación
- En la mayoría de los casos con disponer de entorno de producción y preproducción tanto para agente como para RAG será suficiente
Para realizar una gestión completa en vFlow (suponiendo tres entornos y gestión de agentes y RAG), deberemos tener
En orquestador
- Crear tres stores (pro/pre/pru); en cada store:
- En total tres loaders. Crear un loader por entorno (p.ej /pro/nombrefich).
- Subir un primer "nombrefich"
- tipo texto (versión 0)
- el mismo para todos los entornos
- se sube por medios convencionales (p. ej SCP)
- Asegurar que los stores queden totalmente creados (estado "UPSERTED")
- Crear tres agentes (pro/pre/pru)
- Asociar a stores (pro/pre/pru)
En flow
- Crear un agente
- Vincularlo a los tres agentes de orquestador (pro/pre/pru)
- Crear un store
- Vinculado a los tres stores de orquestador (pro/pre/pru)
- Crear un loader
- Loader vinculado a agente de vflow
- C_NAME loader coincidirá con los de orquestador (p.ej "nombrefich")
- Subir nueva versión v1 (".txt", ".pdf", ".doc", ".docx"
4 Diagnósticos
tail -f /var/log/vFlowProxy/vFlowProxy.log
- En nodo vFlowProxy
- para cualquier canal
nc localhost 1131
- En nodo vFlowProxy
- Monitoriza estado del proceso vflowProxy
{
"proceso": {
"nombre": "vFlowProxy",
"version": "00.00.01",
"inicio_ts": 1771315153,
"inicio_cad": "20260217 085913",
"log_alarmas_val": 8,
"log_alarma_ultimo_ts": 1771970401,
"log_alarma_ultimo_ts_cad": "20260224 230001"
},
"diagnostico": {
"gmp": {
"msj_val": 1022,
"msj_max": 1024,
"buf_val": 1024,
"buf_max": 1024,
"tarea_val": 7,
"tarea_max": 15
},
"tiempo": {
"uptime": 716665,
"uptime_dias": 8,
"uptime_horas": 7,
"uptime_minutos": 4,
"uptime_segundos": 25
},
"wws": {
"conexiones_val": 0,
"conexiones_max_periodo": 0,
"hilos_val": 4,
"hilos_max": 4,
"wsi_cad": "sesiones=0/200"
}
},
"alarmas_nivel_max": 0,
"alarmas": []
}
Es relevante la monitorización de sesiones "wsi_cad": "sesiones=0/200" (usadas/máximas)
asterisk -rv | grep callsquare_name
- en nodo Omnisuite
- para canal voz
tail -f /var/log/xcally/agi-combined.yyyy-mm-dd.log
- en nodo Omnisuite
- para canal voz
tail -f /var/log/xcally/routing-combined.yyyy-mm-dd.log
- para canal voz
5 Para probar desde vFlow
En /home/sat/vFlowProxy hay scripts de prueba (se configuran en el vars.sh); para usar los scripts de prueba tendremos que tener también ".ini" en vFlow
Es útil comenzar con
/home/sat/vFlowProxy/vFlowGetInfo.sh
que sin parámetros adicionales confirma el correcto estado de vFlowProxy
{
"errorNum": 0,
"errorStr": "OK",
"app": "vFlowProxy",
"version": "00.00.01",
"sessions_opened": 0,
"sessions_limit": 200,
"sessions_sleep_timeout_s": 3600,
"alarms": 8
}
6 Integración de vFlow desde Omnisuite
6.1 Descripción general
En Omnisuite, la integración con vFlow, se realiza con el programa vFlowOmnisuite, que podrá ser invocado como ejecutable (más rápido, para debian), o como Python (más universal)
/usr/local/sbin/vFlowOmnisuite (OPCIÓN PREFERENTE)
/usr/local/sbin/vFlowOmnisuite.py (LEGACY)
Asociado al programa existen los siguientes ficheros de configuración (.ini):
Un ".ini" de plataforma Omnisuite en vFlow --> Solo contiene uuid de la plataforma; se entrega un ".ini" a modo de ejemplo en /etc/MDtel/vFlow/platform.ini
EJEMPLO ".INI" DE PLATAFORMA
[uuids] platform=1d111530-e22d-11f0-b0f2-5254008bef96
Un ".ini" por agente en vFlow --> Solo contiene uuid del agente según su identificación en vFlow (NO en un orquestador, por ejemplo flowise); se entrega un ".ini" asociado a un agente "loop" existente en Flowise /etc/MDtel/vFlow/agent_loop_01.ini
EJEMPLO ".INI" DE AGENTE
[uuids] agent=1a3a1020-ea1d-11f0-b4a5-5254008bef96
Un ".ini" por servicio --> Configuración de cada servicio en Omnisuite; se entrega un ".ini" a modo de ejemplo en /etc/MDtel/vFlow/service.ini
En cada fichero de servicio configuraremos
- Donde está Vflow
- Agente
- Plataforma
- timeout_s --> Importante, es afectado por el LLM
- channel_text_type --> IMPORTANTE si el servicio es de texto que esté bien (vacio solo si el servicio es de texto, NO COMENTARLO)
- environment --> production, staging, test
EJEMPLO ".INI" DE SERVICIO
[arch_uuids] agent=/etc/MDtel/vFlow/agent_loop_01.ini platform=/etc/MDtel/vFlow/platform.ini [vflow] host_port=172.25.129.242:7900 timeout_s=20 # channel_type=[voice|chat|email] channel_type=chat # environment=[production|staging|test] environment=production language=es [omnisuite] # channel_text_type=[chat|mail|sms|whatsup] channel_text_type=chat service_id=vflow_service_id service_name=vflow_service_name
La imagen siguiente muestra el esquema de relación entre orquestador/plataforma/agente/servicio en la plataforma y en vFlow
6.2 Invocación
6.2.1 Generales
6.2.1.1 Ver configuración
/usr/local/sbin/vFlowOmnisuite <config_arch> configPrint
Ejemplo de respuesta
Configuration:
agent_arch_uuid=/etc/MDtel/vFlow/agent_fse_rapido.ini
agent_uuid=3487af28-1d14-11f1-803c-525400ef204c
platform_arch_uuid=/etc/MDtel/vFlow/platform_labomsui.ini
platform_uuid=9a54ea74-f050-11f0-bdf1-5254008bef96
vflow_host_port=labvflow.mdnova.local
vflow_timeout_s=50
vflow_environment=production
vflow_channel_type=voice
vflow_language=es
omnisuite_channel_text_type=chat
omnisuite_service_id=287
omnisuite_service_name=desarrollo
{
"errorNum": 0,
"errorCad": "OK"
}
6.2.1.2 Ver versión
/usr/local/sbin/vFlowOmnisuite version
Ejemplo de respuesta
00.00.02
6.2.2 Para canales de texto
Para canales de texto en Omnisuite existe un único Comando de invocación "omnisuiteText"
/usr/local/sbin/vFlowOmnisuite <config_arch> omnisuiteText <omnisuite_id> <omnisuite_websiteId> <omnisuite_createdAt> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> <question>
Parámetros ( Los OPCIONALES son "" si no se envía valor):
| Parámetro | Obligatoriedad | Descripción |
|---|---|---|
| `<config_arch>` | OBLIGATORIO | ".ini" del servicio |
| `<omnisuite_id>` | OBLIGATORIO | Identificativo de la interacción en Omnisuite |
| `<omnisuite_websiteId>` | OBLIGATORIO | Identificativo del servicio en Omnisuite (ej. website id en chat) |
| `<omnisuite_createdAt>` | OBLIGATORIO | Creación de la interacción |
| `<vflow_client_id>` | OPCIONAL | Id de cliente en Omnisuite |
| `<vflow_client_phone_number>` | OPCIONAL | Telf de cliente en Omnisuite |
| `<vflow_client_email>` | OPCIONAL | Email de cliente en Omnisuite |
| `<question>` | OBLIGATORIO | Texto a enviar al orquestado (p. ej. Flowise) |
Ejemplo de respuesta JSON
{
"errorNum": 0,
"errorStr": "OK",
"session": "e926548d-fdcf-11f0-a793-525400ef204c",
"language": "es",
"response": "HOLA"
}
6.2.3 Para canales de voz
Para canales de voz, existen comandos para "abrir sesión", "enviar texto" y "cerrar sesión"
6.2.3.1 Abrir sesión
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionOpen <omnisuite_UniqueId> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email>
Parámetros (Los OPCIONALES son "" si no se envía valor):
| Parámetro | Requisito | Descripción |
|---|---|---|
<config_arch> |
OBLIGATORIO | ".ini" del servicio |
<omnisuite_UniqueId> |
OBLIGATORIO | Unique_ID de asterisk de la llamada en Omnisuite |
<vflow_client_id> |
OPCIONAL | Id de cliente en Omnisuite |
<vflow_client_phone_number> |
OPCIONAL | Telf de cliente en Omnisuite |
<vflow_client_email> |
OPCIONAL | Email de cliente en Omnisuite |
Ejemplo de respuesta JSON
{
"errorNum": 0,
"errorStr": "OK",
"session": "ec73df29-f08a-11f0-a8ec-525400ef204c",
"platform_id": "146"
}
El value correspondiente al key "session" deberá ser guardado en una variable para siguientes invocaciones
6.2.3.2 Enviar texto
/usr/local/sbin/vFlowOmnisuite <config_arch> textRequest <vflow_session_uuid> <question>
Parámetros:
| Parámetro | Requisito | Descripción |
|---|---|---|
<config_arch> |
OBLIGATORIO | ".ini" del servicio |
<vflow_session_uuid> |
OBLIGATORIO | Variable "session" almacenada en el "sessionOpen" |
<question> |
OBLIGATORIO | Texto a enviar al orquestado (p. ej. Flowise) (normal, abandoned, other) |
Ejemplo de respuesta JSON
{
"errorNum": 0,
"errorStr": "OK",
"session": "c6f6fad7-f6c1-11f0-a793-525400ef204c",
"language": "ES",
"response": "Cristóbal Colón."
}
6.2.3.3 Cerrar sesión
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionClose <vflow_session_uuid> <vflow_cause>
Parámetros (Los OPCIONALES son "" si no se envía valor):
| Parámetro | Estado | Descripción |
|---|---|---|
<config_arch> |
OBLIGATORIO | ".ini" del servicio |
<vflow_session_uuid> |
OBLIGATORIO | Variable "session" almacenada en el "sessionOpen" |
<vflow_cause> |
OPCIONAL | (normal, abandoned, expired, other) |
Ejemplo de respuesta JSON
{
"errorNum": 104,
"errorStr": "Wrong session"
}
6.3 Ejemplos para omnisuite
6.3.1 Ejemplo de chat
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_chat.ini" "omnisuiteText" "{{interaction.id}}" "{{account.id}}" "{{interaction.createdAt}}" "" "" "" "{{message.body}}" | jq -r '.response'
6.3.2 Ejemplo de voz
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_voice.ini" "sessionOpen" "{UNIQUEID}" "" "" "" | jq -r '.session'
- salida del comando almacenado en variable "vflow_sessionopen_response" para su posterior uso en cally square
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "textRequest" "{vflow_sessionopen_response}" "{OPENAI_WHISPER_TRANSCRIPT}" | jq -r '.response'
- la voz se ha transcrito con OpenAI, por eso se usa como parámetro {OPENAI_WHISPER_TRANSCRIPT})
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "sessionClose" "{{vflow_sessionopen_response}}" "normal"
