Ejecuta este cuaderno en Google Colab
Cada paso de abajo como un cuaderno ejecutable, con el resumen reproduciéndose en línea. Nada que instalar.
Cómo funciona
Cinco endpoints, cada uno con una tarea:
La recuperación aquí es deliberadamente sencilla: vectores en una lista de Python, similitud coseno en un bucle. Esa es la cantidad justa de maquinaria para unas pocas docenas de fuentes y mantiene visibles las piezas móviles. Cuando te quedes corto, Cómo construir un bot RAG privado cubre el mismo pipeline con una base de datos vectorial real y un paso de reordenación.
Preparación
Una dependencia y una clave desde la página de configuración de la API.notebook.py y empieza con los imports y la configuración. Las dos listas al final son todo el estado del cuaderno: sources registra lo que has añadido y chunks contiene las piezas indexables.
HOSTS asigna un nombre de presentador a una voz. Ambas voces provienen de tts-xai-v1, y eso importa: las voces pertenecen a los modelos, y enviar una voz de una familia a un modelo de otra es el error más habitual al usar por primera vez el endpoint de voz.
Elegir un modelo que no se quede obsoleto
Fijar un modelo de chat en el código garantiza que el proyecto envejezca. Venice publica qué modelo ocupa actualmente cada rol a través de/models/traits, así que puedes pedir el valor por defecto vigente en lugar de nombrar uno.
most_intelligent te da un modelo más potente para el resumen intensivo en razonamiento, y default_reasoning te ofrece uno que piensa en voz alta. Consulta Modelos para ver la lista completa.
Añadir fuentes
Una fuente es una URL o un archivo en disco, y Venice tiene un endpoint para cada uno. Ambos devuelven texto plano, que es de lo que se trata: al resto del cuaderno no le importa de dónde vino una fuente./augment/scrape devuelve Markdown en lugar de HTML crudo, por lo que no hay que escribir código para eliminar plantillas repetitivas. /augment/text-parser acepta PDF, Word, Excel y texto plano hasta 25 MB, y devuelve un conteo de tokens junto al texto. Procesamiento de documentos cubre todas sus opciones.
Fragmentación e incrustaciones
Incrustar un documento entero produce un vector que es un promedio de todo lo que dice, algo demasiado tosco para recuperar una afirmación concreta. Dividirlo produce vectores que sí significan algo. Divide por límites de párrafo en lugar de por un número fijo de caracteres. Un fragmento que se corta a mitad de frase se recupera mal, porque la incrustación es de un fragmento roto.embed procesa por lotes porque el endpoint acepta una lista, y una petición para sesenta y cuatro fragmentos es mucho más barata en tiempo real que sesenta y cuatro peticiones. text-embedding-bge-m3 devuelve 1024 dimensiones y maneja bien las fuentes multilingües.
Añadir una fuente ahora consiste en leer, dividir, incrustar y registrar. La magnitud de cada vector se almacena junto a él porque nunca cambia y recalcularla dentro del bucle de similitud es trabajo desperdiciado.
number es lo que más adelante hace posible la cita. Cada fragmento recuerda de qué fuente vino, de modo que una respuesta puede remitir a ella.
Recuperar los pasajes correctos
Similitud coseno entre el vector de la pregunta y cada vector de fragmento, ordenados, los k mejores. Para unos pocos miles de fragmentos esto se ejecuta más rápido que la llamada de red que produjo el vector de la pregunta.Responder con citas
La diferencia entre una respuesta fundamentada y una conjetura segura de sí misma está por entero en el prompt. Dos instrucciones hacen el trabajo: responder solo desde las notas, y decirlo cuando las notas se queden cortas. Sin la segunda, un modelo llenará el hueco silenciosamente desde la memoria, que es precisamente el modo de fallo que quieres eliminar por diseño. Numerar las notas en el prompt le da al modelo un vocabulario de citación. Escribe[2], y tú puedes resolver eso a una fuente.
Escribir el guion del resumen
Aquí es donde el cuaderno deja de ser una caja de búsqueda. Un resumen es algo que se lee; un overview es algo que se escucha, y ambos piden una prosa distinta. El diálogo funciona mejor en audio porque el turno de palabra ya marca el ritmo, y una pregunta de un presentador es una forma natural de introducir la siguiente idea. Importan tres restricciones, y las tres vienen del audio y no del texto:- Nada de markdown, nada de URLs. Un modelo de voz lee
https://docs.venice.aiun carácter a la vez. - Deletrea las abreviaturas. T E E la primera vez, no tee.
- Varía la duración de los turnos. Turnos de tamaño uniforme suenan como dos personas leyéndose una lista.
enum en speaker garantiza que cada turno mapea a una voz que tienes.
spread muestrea fragmentos a lo largo de toda la colección en vez de recuperar por similitud. Tomar cada enésimo fragmento es tosco y funciona bien: alcanza el final de documentos largos, cosa que tomar los primeros doce nunca lograría.
Trata la cantidad de turnos como una pista, no como una instrucción. Pedir dieciséis ha producido aquí entre dieciséis y veintiocho, según cuánto tengan que decir las fuentes. Si necesitas un tope estricto, trunca turns antes de renderizar en lugar de discutir con el prompt.
Renderizar dos voces en una sola pista
Cada turno se convierte en una petición de voz, con la voz elegida por quien habla.pool.map preserva el orden de entrada, así que los turnos vuelven en el orden en que se escribieron sin importar cuál termine primero. Cuatro workers es un techo deliberado, no un máximo: más concurrencia empezará a devolver 429 en niveles bajos, y el trabajo ya está dominado por el turno individual más largo.
Ejecutarlo
Cómo hacerlo tuyo
Las fuentes lo son todo. Todo lo que viene después está limitado por lo que hayas metido. Las páginas raspadas arrastran su navegación y sus pies de página, algo inofensivo para responder pero que en un resumen aparece como un presentador debatiendo con seriedad un índice de documentación. Si eso pasa, descarta los fragmentos por debajo de un umbral de longitud o filtra los adornos obvios antes de incrustar. Cambia las voces.HOSTS son dos entradas en un diccionario. tts-xai-v1 incluye veintiséis voces, y otras familias tienen las suyas; GET /models?type=tts lista voices por modelo. Dos voces que contrastan con claridad son más fáciles de seguir que dos que simplemente son distintas.
Clona la tuya. Clonación de voz convierte una muestra corta en un identificador de voz que puedes colocar directamente en HOSTS.
Añade un tercer participante. Nada en el pipeline asume dos hablantes salvo el enum del esquema. Añadir un entrevistador que solo hace preguntas cambia bastante la sensación.
Conserva el guion. Guardar turns en un archivo JSON junto al audio cuesta dos líneas y te ahorra un nuevo renderizado cada vez que quieras retocar una frase.
A dónde ir después
Bot RAG privado
El mismo pipeline de recuperación con una base de datos vectorial real y reordenación.
Respuestas citadas con búsqueda web
Encuentra las fuentes automáticamente en lugar de nombrarlas tú mismo.
Texto a voz
Referencia del endpoint de voz, sus voces y el streaming.
Procesamiento de documentos
Todo lo que acepta el analizador de texto y lo que devuelve.