WeKnora 部署实战:从最小运行到生产加固的六步路径
2026/9/7 15:33:08 网站建设 项目流程

WeKnora 部署实战:从最小运行到生产加固的六步路径

【免费下载链接】WeKnoraOpen-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.项目地址: https://gitcode.com/GitHub_Trending/we/WeKnora

WeKnora 是一个开源的 LLM 知识平台,核心工作是把散落的原始文档变成三样东西:可检索的 RAG 问答、会自主编排检索与工具的推理代理、以及自我维护的 Wiki。如果你要在内网落一套私有知识库,或给团队接一个能答业务问题的问答入口,这套东西可以直接跑起来。下面按"能跑 → 跑得对 → 跑得稳 → 扛得住"的顺序展开,跳过那些不碰就不影响启动的部分。

📦 项目速览

一句话:喂文档,收答案。它负责解析(含 PDF/Word/Excel/XMind 等十余种格式)、切块、向量化、混合检索,再交给大模型生成带引用的回答;需要时代理会自己调用 MCP 工具、沙箱脚本和网络搜索来完成多步任务。适合两类人——要做企业知识沉淀的技术决策者,以及负责把它跑在服务器上的运维工程师。

🧭 部署前置条件

先把依赖对齐,能少走大量弯路。三项依赖的"最低"档是官方docker-compose.yml默认能起的最小组合(Postgres + Redis + 本地文件存储),"推荐"档对应生产常见规模。

依赖项最低档推荐档说明
内存8 GB16 GB 以上向量库和解析都吃内存,Postgres 需独立预算
磁盘可用20 GB50 GB 以上文档原件、向量索引、容器镜像都要落盘
CPU4 核8 核以上大扫描件解析可并行,核越多越短
Docker20.10+24.x需支持docker compose(v2 插件)
网络端口80 / 8080 空闲同左 + 对象存储端口前端 80,后端 API 8080

注意两点:默认组合里 Postgres 用的是 ParadeDB 镜像(paradedb/paradedb:v0.22.2-pg17,自带 pgvector 向量扩展),Redis 跑在 6379。这两个容器只挂在 compose 内部网络WeKnora-network上,不对外映射,所以主机防火墙只需放行 80 和 8080 两个端口。

🚀 最小可运行部署

整条链路是一条单向数据流:frontend(Nginx,80 端口)把请求代理到app(Go 主服务,8080 端口);app通过 gRPC 调docreader(50051,只在内网,解析文档用);两者都依赖postgresredis。默认存储走本地磁盘,向量检索落在 Postgres 的 pgvector 里,所以不启动任何额外容器就能跑通最小闭环

# 1. 拉代码 git clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora # 2. 生成并编辑环境变量(必填项见下一节) cp .env.example .env nano .env # 3. 启动全部核心服务(自动检查环境、拉镜像、起容器) ./scripts/start_all.sh --all

.env里有几处占位符必须替换,否则容器起不来或密钥不安全:

# 数据库(compose 里的 Postgres 用这三个建库) DB_USER=postgres DB_PASSWORD=<改成强密码> DB_NAME=WeKnora # Redis 密码(compose 的 redis 容器 --requirepass 读取它) REDIS_PASSWORD=<改成强密码> # 内置模型三件套(问答能用的前提) LLM_BASE_URL=<你的模型服务地址> LLM_API_KEY=<你的 key> LLM_MODEL_NAME=<模型名> EMBEDDING_BASE_URL=<向量模型地址> EMBEDDING_API_KEY=<向量模型 key> EMBEDDING_MODEL_NAME=<向量模型名>

启动成功的三个标志./scripts/start_all.sh --all尾部打印各服务状态且无Errordocker compose psappfrontenddocreaderpostgresredis均为Up(app 与 docreader 带healthy);curl http://localhost:8080/health返回 200。三者齐备,最小闭环就绪。

⚙️ 关键配置解读

config/config.yaml被以只读方式挂载进app容器,改完docker compose up -d app重启即生效。下面只挑五个真正影响"答得准不准、跑得快不快"的参数,其余保持默认即可。

参数默认值为什么这么设何时该改
conversation.embedding_top_k30混合检索阶段粗召回的候选条数,30 在精度和耗时之间平衡,给重排序留足原料高精度场景调到 50,召回不足时再往上
conversation.rerank_top_k30重排序后的最终候选数,直接决定塞进大模型上下文多少片段上下文窗口紧张就下调到 10-15
conversation.vector_threshold0.2向量相似度门槛,0.2 偏松,宁可多召回再靠 rerank 过滤,避免硬门槛漏检出现大量不相关命中时抬到 0.3
conversation.max_rounds5多轮上下文保留轮数,5 轮覆盖绝大多数追问链长对话场景调到 10,简单 FAQ 降到 3
knowledge_base.chunk_size512分块大小,512 字对中英混排文档召回粒度最稳,过小丢上下文、过大稀释语义长表格/代码多的库可上调到 768

chunk_overlap默认 50,约为chunk_size的 10%,作用是让相邻块保留边界重叠,避免一个段落被切断后语义断裂。它和chunk_size建议按同一比例联动,不要只改一个。检索质量想再精调,看keyword_threshold(0.3)和rerank_threshold(0.3)——前者管关键词匹配,后者管重排,两者都偏保守,先动上面五个再动这两个。

✅ 功能验证

部署完不要直接放量,按顺序逐项确认模块可用。每项给出命令和预期输出。

  1. 容器健康docker compose ps。预期app显示healthy,其余核心容器为Up。若有Restarting,先docker compose logs --tail 50 app看报错。
  2. 后端存活curl -s http://localhost:8080/health。预期返回 200 且非空。这是 compose 里 app 服务自身 healthcheck 探的同一地址。
  3. 前端可达curl -I http://localhost:80。预期HTTP/1.1 200,说明 Nginx 已把静态资源和服务端代理接好。
  4. 解析链路:在 Web UI 建一个知识库并上传一份 PDF,看文档状态从processing变为已完成。这一步同时验证了app → docreader → Postgres的 gRPC 与入库链路,比单测更可信。
  5. 检索问答:用文档里能明确命中的问题提问,预期回答带引用来源且内容对得上。若答非所问,先查embedding_top_k与模型是否配错。

🔍 运维与故障速查

监控接入:生产建议开 Langfuse 做可观测性。设LANGFUSE_ENABLED并填LANGFUSE_HOSTLANGFUSE_PUBLIC_KEYLANGFUSE_SECRET_KEY后,agent 的推理链路、token 用量、管线耗时会进入 Langfuse,LANGFUSE_SAMPLE_RATE控制在 0.1 左右即可。运行时还有内置任务队列面板,能看各阶段 worker 池并发和失败任务,配合docker stats看容器资源、Postgres 慢查询看数据库瓶颈。

高频故障按"现象 → 原因 → 解法"排查:

现象常见原因解法
app 一直Restarting.env缺必填项或密钥长度不对(如SYSTEM_AES_KEY非 32 字节)docker compose logs app定位;补全必填、密钥用 32 字节
Postgres 连接失败Postgres 未就绪,app 先启动等待postgreshealthydepends_on已设service_healthy,勿绕过
文档卡在processing单文档超时或解析 worker 不足调大WEKNORA_DOCUMENT_PROCESS_TIMEOUT(默认 2h);DOCREADER_PDF_RENDER_PARALLELISM加并行
问答答非所问向量/对话模型配错或RETRIEVE_DRIVER与库里不一致核对LLM_*/EMBEDDING_*;确认RETRIEVE_DRIVER与实际存储一致
向量检索慢向量库资源不足独立给向量库加内存;缩小embedding_top_k

🛡️ 生产加固

开发和生产差异集中在三类"必须项",其余保持默认即可,不必为开发机单独维护一套。

安全(必须)

# 生产务必关闭公开注册、收紧密钥 DISABLE_REGISTRATION=true GIN_MODE=release JWT_SECRET=<openssl rand -hex 32 生成> SYSTEM_AES_KEY=<必须恰好 32 字节,openssl rand -base64 32 后截断>

SYSTEM_AES_KEY是数据库里 API Key 等敏感字段落盘加密的主密钥,丢失则所有已加密数据不可恢复,务必离线备份。WEKNORA_AUTH_COMPLEX_PASSWORD_ENABLED=true可强制密码含大小写+数字+特殊字符。

网络隔离(必须):对外只暴露 80(前端)和 8080(API)。Postgres、Redis、MinIO(9000/9001)、Neo4j(7687)默认只在WeKnora-network内部可达,不要额外ports映射到0.0.0.0。若用 MinIO 存原件,MINIO_USE_SSL=true开 TLS,并配访问策略。

高可用(可选):要开知识图谱,加--profile neo4j起 Neo4j 并在.envNEO4J_ENABLE=true(这是图谱唯一开关,旧的ENABLE_GRAPH_RAG已废弃)。要换独立向量库,按RETRIEVE_DRIVERqdrant/milvus/weaviate对应 profile 启动。多副本 + 负载均衡属集群场景,超出单机 compose 范畴,以项目部署文档为准。

📋 快速参考

部署前

  • Docker Compose v2 可用,主机 80 / 8080 端口空闲
  • 内存 ≥ 8GB、磁盘 ≥ 20GB、CPU ≥ 4 核
  • .env必填项已替换:数据库三件套、Redis 密码、模型三件套

启动后

  • docker compose ps全部Up,app/docreader 带healthy
  • curl http://localhost:8080/health返回 200
  • 前端 80 端口可访问,能登录
  • 上传一份文档并完成解析,问答命中且带引用

生产上线前

  • DISABLE_REGISTRATION=trueGIN_MODE=release
  • JWT_SECRETSYSTEM_AES_KEY已换随机值并离线备份
  • 数据库/Redis/对象存储未对外映射,MinIO 开 TLS

延伸阅读(仓库内相对路径):

  • docs/快速开发模式说明.md — 本地快速起后端
  • docs/使用其他向量数据库.md — 换 Qdrant/Milvus/Weaviate
  • docs/开启知识图谱功能.md — Neo4j 图谱启用
  • docs/RBAC说明.md — 多空间角色与审计
  • config/config.yaml — 对话与检索参数源头

完成以上配置后,建议先用docker compose logs -f app盯 10 分钟确认无异常滚动日志,再放开真实流量。

【免费下载链接】WeKnoraOpen-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.项目地址: https://gitcode.com/GitHub_Trending/we/WeKnora

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询