Desarrollo IAOpen Source

WeKnora: la Plataforma de Conocimiento RAG y Agentes Open Source de Tencent

14 de octubre de 2026
10 min de lectura
Visualización de WeKnora, la plataforma open source de RAG y agentes de Tencent
Compartir:

WeKnora es la plataforma open source de conocimiento con LLM de Tencent, escrita en Go, con unas 34K estrellas en GitHub y un release v0.8.3 publicado hoy (2026-10-14). Convierte documentos en bruto en un RAG consultable, un agente de razonamiento autónomo y una wiki que se mantiene sola — tres modos sobre las mismas bases de conocimiento — y viene como un stack de Docker Compose con interfaz web, permisos multi-workspace y canales de chat.

Esta es la guía que yo quería antes de decidir si merece un lugar al lado de OpenRAG: qué es, el pipeline en cuatro pasos, el quickstart del README, los detalles de licencia y seguridad que casi todos los resúmenes se saltean, y cuándo no usarlo. Leí el README, la LICENSE, el compose y la documentación el 2026-10-14; no lo desplegué, así que todo lo de abajo está atribuido a esas fuentes.

1. Qué Es WeKnora

La descripción de GitHub lo resume: “Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.” Es un producto completo, no una librería. Según el overview del README, usás RAG para consultar, el agente para tareas de varios pasos y la wiki para organizar el conocimiento — todo sobre las mismas bases de conocimiento, detrás de una sola interfaz web, con workspaces, roles, API keys y canales alrededor.

Datos del repo (verificados 2026-10-14)

  • Repositorio: github.com/Tencent/WeKnora
  • Estrellas: ~34K (33.999 según la API de GitHub hoy) · ~4,5K forks
  • Stack: Backend en Go · UI en Vue 3 · servicio DocReader en Python (según la documentación)
  • Último release: v0.8.3, publicado el 2026-10-14 — todavía línea 0.x
  • Creado: Julio de 2025
  • Licencia: MIT con excepciones de terceros listadas (archivo LICENSE) · la API de GitHub dice “Other / NOASSERTION”
  • Mantenedor: Tencent · documentación en weknora.weixin.qq.com

Si leíste mi post de OpenRAG, la diferencia en un párrafo: OpenRAG empaqueta Langflow, Docling y OpenSearch detrás de un solo comando uvx y te da flujos visuales para editar. WeKnora es una opción más pesada y más parecida a un producto para el mismo trabajo — backend en Go y UI en Vue con workspaces multi-tenant y RBAC, un agente con skills y sandbox, una wiki autogenerada y conectores para WeCom, Feishu, Slack y más. Mismo punto de partida de “chatear con tus documentos”, otra categoría de peso.

La nota de licencia que casi todos se saltean

Leí el archivo LICENSE en sí. Sus primeras líneas dicen “WeKnora is licensed under the MIT except for the third-party components listed below”, seguidas del texto MIT (Copyright (C) 2026 Tencent). La lista nombra tres componentes que conservan sus propios términos: opencc (Apache-2.0), anydoc (MIT, Copyright 2026 Sideguide Technologies Inc., modificado por Tencent) y wails v2 (MIT). La sección License del README y el badge también dicen MIT. La API de GitHub igual reporta “Other / NOASSERTION” — lo más probable es que el archivo mezcle una concesión MIT con el texto completo de Apache-2.0 embebido y el detector automático no pueda clasificarlo (es mi lectura; GitHub no lo explica). En la práctica: el código propio de WeKnora es MIT, conservá los avisos de esos tres componentes, y recordá que las imágenes opcionales que habilites (Neo4j, MinIO, Qdrant, Langfuse, SearXNG…) son proyectos aparte con sus propias licencias. No es asesoría legal.

2. La Arquitectura en 4 Pasos

La nota de arquitectura del README dice que es un pipeline modular que va del parseo de documentos y la vectorización al retrieval y la inferencia del LLM, con cada componente reemplazable. La página de arquitectura de v0.8.3 (en chino) completa el detalle:

📄

Paso 1 — Parseo (DocReader)

Una subida llega a la API en Go, que encola una tarea asíncrona de Asynq; la tarea llama a DocReader, un servicio gRPC en Python que según la página de arquitectura parsea más de 25 formatos y solo es accesible dentro de la red de Compose. El README lista PDF, Word, PPT, Excel, CSV, Markdown, HTML, EPUB, imágenes y más.

🗄️

Paso 2 — Embeddings e indexado

Los chunks se embeben y se escriben en el vector store. Por defecto es PostgreSQL — la documentación describe una imagen de ParadeDB con búsqueda full-text BM25 más pgvector (RETRIEVE_DRIVER=postgres), así que una vector DB aparte es opcional. Elasticsearch, OpenSearch, Qdrant, Milvus, Weaviate, Doris y Tencent VectorDB son alternativas soportadas; Neo4j suma GraphRAG.

🔍

Paso 3 — Recuperar y rerankear

Un chat pipeline, descrito como una cadena de plugins, ejecuta comprensión de la consulta, retrieval en paralelo, reranking, merge y armado del prompt. El README lista búsqueda híbrida keyword + vector, rerank, chunking padre-hijo y evaluación de retrieval con recall y BLEU/ROUGE.

🧠

Paso 4 — Responder, razonar o escribir la wiki

Quick Q&A transmite una respuesta con citas por SSE. El razonamiento inteligente corre un agente ReAct sobre bases de conocimiento, búsqueda web, herramientas MCP, skills y el navegador local, mostrando cada paso; los skills se ejecutan en sandboxes Docker, E2B o Cube. Con Wiki activada, WeKnora extrae personas, productos y conceptos en páginas enlazadas y con citas que podés editar y revertir.

Las piezas móviles

UI Vue 3 detrás de NGINX · app en Go (API REST, retrieval, motor de agentes, workers, canales) · DocReader en Python · PostgreSQL · Redis (cola de tareas, streams SSE, rate limiting). Opcionales: SearXNG, Neo4j, MinIO, vector stores alternativos, Langfuse y un sandbox. Fuente: la página de arquitectura de v0.8.3, escrita en chino simplificado.

3. Quickstart: del Clone al Login

Requisitos según el README: Docker, Docker Compose y Git. Estos son los comandos del propio README, verificados contra el README el 2026-10-14 (no los ejecuté):

git clone https://github.com/Tencent/WeKnora.git
cd WeKnora
cp .env.example .env    # Edit .env as needed, see comments in the file
docker compose pull     # Pull the latest images
docker compose up -d    # Start core services

Después abrí http://localhost y seguí la guía de onboarding. La tabla de servicios del README lista la Web UI en http://localhost, la API backend en http://localhost:8080 y, solo con el perfil langfuse, el tracing de Langfuse en http://localhost:3000. La página de quickstart en chino agrega un health check y la regla del primer login: no hay cuenta por defecto — la primera persona que se registra recibe un workspace personal y queda como su Owner.

curl http://localhost:8080/health

Igual necesitás modelos. La documentación del quickstart dice que hace falta un modelo de chat y uno de embeddings, Ollama local o cualquier servicio compatible con OpenAI, configurados por base de conocimiento en un asistente de inicialización (usá su botón de prueba antes de guardar); cambiar el modelo de embeddings después implica reconstruir el índice. Para un Ollama local, el tip del README es levantarlo primero, y .env.example apunta OLLAMA_BASE_URL a host.docker.internal:11434 porque localhost dentro de un contenedor es el propio contenedor:

ollama serve > /dev/null 2>&1 &

¿Querés retrieval con grafos u object storage? Los perfiles son combinables; el README lista full (todo), neo4j, minio y langfuse:

docker compose --profile neo4j --profile minio pull
docker compose --profile neo4j --profile minio up -d
docker compose down     # Stop services

Actualizar tiene una trampa que el README marca: docker compose up -d solo puede reutilizar imágenes en caché y dejar la UI desincronizada del release, así que hacé pull primero. También dice que leas las notas de actualización de v0.8.3 antes de actualizar, y las de v0.8.2 si venís de una versión anterior.

# Set WEKNORA_VERSION in .env to the target release (e.g. 0.8.3), or keep latest
docker compose pull     # Pull images matching WEKNORA_VERSION
docker compose up -d    # Recreate containers with new images

¿Preferís scriptear antes que clickear? El README describe un CLI weknora “agent-first” (salida JSON por defecto, --format text para humanos). Estos son sus comandos de ejemplo; no verifiqué cómo instalar el CLI, así que arrancá por cli/README.md en el repo:

weknora profile add prod --host https://kb.example.com --use
weknora auth login
weknora kb list
weknora link --kb my-knowledge-base
weknora doc upload notes.md
weknora chat "summarise the design doc"

Tip: conocé los fallos habituales

La lista de advertencias del quickstart en chino nombra a los sospechosos de siempre: Ollama inalcanzable desde los contenedores (usá host.docker.internal; en Linux revisá el mapeo host-gateway), documentos trabados en processing (mirá los logs de docreader; MAX_FILE_SIZE_MB es 50 por defecto y el timeout de procesamiento 2 horas), y respuestas vacías cuando el modelo de embeddings difiere del que se usó para construir el índice.

Chequeo de realidad de idiomas: qué está traducido y qué no

El README existe en inglés, chino, japonés y coreano, y el README lista la UI web en chino, inglés, japonés, coreano y ruso (las notas de v0.8.3 suman chino tradicional). Pero el sitio de documentación (weknora.weixin.qq.com/docs) — quickstart, arquitectura, API, notas de actualización de releases — está escrito en chino simplificado, y no encontré selector de idioma ni versión en inglés (una ruta /docs/en/ que probé devolvió 404). docs/README.md, website-docs/README.md y los comentarios dentro de .env.example también están en chino. El traductor del navegador funciona, pero tenelo en cuenta.

4. Antes de Abrir un Puerto: Defaults de Seguridad

Justo debajo de las opciones de despliegue, el README trae un bloque de advertencia. Lo parafraseo de cerca: WeKnora trae autenticación de login, pero para producción los mantenedores recomiendan fuertemente que:

Advertencia del README (leída 2026-10-14)

  • • Lo despliegues en una red interna / privada y no en internet público.
  • • Evites exponer el servicio directamente a redes públicas, para prevenir fuga de información.
  • • Configures reglas de firewall y controles de acceso adecuados para el entorno de despliegue.
  • • Actualices regularmente a la última versión para parches de seguridad y mejoras.

Ese consejo importa por lo que el compose y .env.example hacen de fábrica:

🚪

El registro viene abierto

No existe cuenta por defecto; el primer usuario registrado queda como Owner de un workspace personal. En .env.example, DISABLE_REGISTRATION está comentado en false, y su comentario (en chino) dice que en producción se recomienda true.

🔑

Los secretos arrancan vacíos

JWT_SECRET está en blanco (el comentario dice que se genera un valor aleatorio al arrancar; el archivo sugiere openssl rand -hex 32 para generarlo una sola vez). SYSTEM_AES_KEY también está en blanco, y el archivo indica generarla una vez y conservar las claves existentes al actualizar. El archivo de ejemplo además trae contraseñas placeholder de Postgres y Redis — reemplazalas.

🌐

Los puertos se publican en todas las interfaces

El compose publica el frontend (${FRONTEND_PORT:-80}:80) y la API (${APP_PORT:-8080}:8080) sin prefijo de loopback. Servicios opcionales como Neo4j y MinIO se publican igual, con fallbacks como neo4j/password y minioadmin si no los sobrescribís.

📦

Sandbox y servicios internos

El backend de sandbox Docker viene apagado porque, según el comentario del archivo, montar docker.sock equivale a root en el host. La entrada v0.8.2 del README lista como breaking que los comandos del sandbox corren como root. Un comentario del compose dice que el servicio gRPC de docreader viene sin auth/TLS y debe quedar interno.

Lo que viene incluido

Para ser justos, la tabla de features del README lista RBAC por workspace con cuatro roles y log de auditoría, API keys con scope, OIDC, cifrado AES-256-GCM de credenciales y requests salientes seguros contra SSRF con modo solo-whitelist; su sección Toolbox suma aprobación herramienta por herramienta para las llamadas del agente. Las vulnerabilidades se reportan por el reporte privado de GitHub (SECURITY.md).

Mi opinión

Antes de cualquier cosa más allá de localhost: generá los secretos, cambiá cada contraseña placeholder, cerrá el registro o dejalo solo por invitación, y poné la UI detrás de una VPN o de un reverse proxy autenticado. Esa es mi checklist de hardening, no la del README.

5. Dónde Brilla: Casos de Uso

WeKnora justifica su peso cuando el conocimiento tiene que ser compartido, con permisos y actualizado entre un equipo:

🏢

Base de conocimiento de equipo con permisos reales

Múltiples workspaces, cuatro roles, log de auditoría, API keys con scope y OIDC (features del README) — lo que una herramienta de “chatear con PDFs” de un solo usuario nunca desarrolla.

💬

Respuestas donde la gente ya chatea

Canales para WeCom, Feishu, Lark, Slack, Telegram, DingTalk, Mattermost y más, además de un widget embebible para sitios web, todos apuntando a las mismas bases de conocimiento.

📖

Una wiki que se mantiene sola

Las entidades extraídas de tus documentos se vuelven páginas enlazadas con citas de origen, grafo de conocimiento, diffs de revisión y rollback.

🤖

Agente de investigación multi-paso

Un agente ReAct sobre tus bases de conocimiento, búsqueda web (DuckDuckGo, Bing, Tavily, SearXNG…), herramientas MCP y skills en un sandbox, con aprobación por herramienta.

🔌

Conocimiento para tus agentes de código

El servidor MCP integrado publica bases de conocimiento a Cursor, Claude y otros clientes MCP por Streamable HTTP; un SDK de Go y el CLI cubren los scripts.

📥

Sincronizado, evaluado, observable

Fuentes de datos como Feishu, Confluence, GitLab, Notion, Yuque, DingTalk Docs, Seafile y RSS; tracing con Langfuse, timeline de parseo y evaluación de retrieval para el lado de operaciones.

El patrón en los seis: un despliegue, muchos usuarios, conocimiento que cambia todo el tiempo — no un desarrollador que necesita una búsqueda semántica rápida.

6. Cuándo NO Usarlo

WeKnora impresiona, pero no es el default correcto para todo trabajo de RAG. Límites honestos:

❌ Evitalo cuando

  • • Querés la instalación más liviana — el stack base ya son cinco servicios (frontend, app, docreader, PostgreSQL, Redis) y el perfil full suma muchos más. Según el README existe un binario Lite con SQLite, pero no lo evalué.
  • • Nadie en tu equipo lee chino — el sitio de docs, las notas de actualización de releases y los comentarios de configuración están solo en chino; solo el README y la UI están traducidos.
  • • Pensás ponerlo en internet público tal cual — el propio README dice que no, y los defaults de arriba están pensados para una red privada.
  • • Necesitás una superficie de API estable — es una línea 0.x, v0.8.2 listó breaking changes, y las notas de v0.8.3 muestran un sistema de plugins mergeado y luego removido de main en el mismo release.
  • • Tu tooling de compliance debe clasificar la licencia automáticamente — GitHub reporta NOASSERTION, así que alguien tiene que leer la LICENSE a mano.
  • • Unos cientos de páginas y un solo desarrollador — la búsqueda híbrida dentro de tu Postgres existente es más simple (mirá mi post de búsqueda híbrida).
  • • Querés un editor visual de nodos para el pipeline — el README no describe ninguno; eso es territorio de OpenRAG y Langflow.

✅ Usalo cuando

  • • Un equipo necesita una base de conocimiento compartida y con permisos, no una herramienta personal.
  • • Querés RAG, un agente y una wiki sobre el mismo corpus desde un solo despliegue.
  • • Tus usuarios viven en WeCom, Feishu, DingTalk o Yuque — o en Slack y Telegram — y querés las respuestas ahí.
  • • Te sentís cómodo operando Go, Postgres, Redis y Docker en una red privada.
  • • Querés un servidor MCP integrado para darle conocimiento a agentes de código.

Regla de oro

OpenRAG es el starter de un comando con editor visual de flujos. WeKnora es la plataforma de equipo con un agente y una wiki incluidos. Elegí por quién tiene que usarlo y quién tiene que operarlo, no por la cantidad de estrellas.

Conclusión

WeKnora es una rareza entre los repos RAG en tendencia: un producto con permisos, canales, evaluación y tracing, no solo una demo de pipeline. Unas 34K estrellas en unos 15 meses dicen que los equipos quieren justamente eso. El precio es el peso — un stack multi-servicio, un tren de releases 0.x y documentación que vive mayormente en chino.

Mi sugerencia: leé primero la nota de seguridad del README, corré el stack base en una red privada con el registro cerrado, indexá un corpus real y comparalo con tu setup actual — medí el recall en vez de adivinar (mi post de evaluación de RAG te muestra cómo). Si solo necesitás búsqueda semántica rápida, OpenRAG o pgvector te llevan ahí con menos piezas móviles.

Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego →