English | 简体中文
GitHub: https://github.com/LightningRAG/LightningRAG
LightningRAG 以 RAG(检索增强生成) 为核心:提供知识库(文档入库、解析分块、向量化与多路检索)、与多种大模型 / 嵌入 / 向量库 / 重排的对接,以及基于画布的 Agent 编排(检索、LLM、工具与流程节点),并可将对话能力经 Webhook 接到飞书、钉钉等渠道。底层为 Vue + Gin 全栈前后端分离,附带 JWT、动态路由与菜单、Casbin、表单与代码生成等通用管理能力。
~~在线预览: https://demo.LightningRAG.com~~
~~测试用户名:admin~~
~~测试密码:123456~~
在线预览服务尚未搭建,待服务器就绪后可去掉删除线并恢复链接与体验账号说明。
Retriever 类型);对话与 SSE 流式接口,可返回 references 等;可配置 大模型、嵌入、重排,并在 config.yaml → rag: 中统一默认策略(详见下文第 3 节;server/rag/README_zh.md)。server/rag/tools/README_zh.md)。docs/THIRD_PARTY_CHANNEL_CONNECTORS_zh.md)。jwt和casbin实现的权限管理。七牛云, 阿里云, 腾讯云 的文件上传操作(请开发自己去各个平台的申请对应 token 或者对应key)。mixins 封装分页,分页方法调用 mixins 即可。config.yaml中把system中的use-multipoint修改为true(需要自行配置Redis和Config中的Redis参数,测试阶段,有bug请及时反馈)。本节概括「知识库 → 检索 → 对话 / Agent → 第三方渠道」能力;细节以 server/rag/README_zh.md、config.yaml 中的 rag: 段 及下方文档链接为准。
rag_knowledge_bases、rag_documents、rag_chunks 等,详见 server/rag/README_zh.md)。Retriever 接口,见 server/rag/)。/rag/conversation/chat、chatStream(流式 SSE,末帧可含检索模式、查询词、参考文献 references 等);queryData 为仅检索的结构化结果,不经过 LLM、不写消息(需 Casbin 注册对应路径)。queryMode、chunkTopK、topK、enableRerank、hlKeywords / llKeywords、对话历史、maxRagContextTokens、cosineThreshold、minRerankScore、includeReferences 等(完整字段见 server/model/rag/request/conversation.go)。config.yaml → rag: 中可统一调整,例如:default-conversation-chunk-top-k、default-knowledge-base-retrieve-top-n、max-retrieve-top-n、max-retrieve-candidate-top-k 等);hybrid-fusion-term-weight、hybrid-fusion-vector-weight、hybrid-fusion-min-score 等);default-cosine-threshold,对齐 LightRAG 等默认思路);kg-* 系列键)。0 多表示「使用代码内置默认」,可按环境调优。rag_llm_providers(对话等大模型)、rag_embedding_providers(嵌入)、rag_vector_store_configs(向量存储连接与维度等);前台管理端可维护(以实际菜单为准)。rag_user_llms)。enableRerank,与 Jina、SiliconFlow、Cohere、通义等提供商对接。references 对齐说明)。X-Webhook-Secret 或平台签名验签、各渠道 extra JSON 均在管理端配置。rag: 配置:channel-webhook-ip-limit-per-minute(按 connector + IP 限流,需 Redis)、channel-webhook-event-retention-days(幂等事件表保留)、channel-outbound-*(出站重试队列轮询与批次等)。MySql > (5.7) 版本 数据库引擎 InnoDB,使用 gorm 实现对数据库的基本操作。Redis实现记录当前活跃用户的jwt令牌并实现多点登录限制。Swagger构建自动化文档。yaml格式的配置文件。 ├── server
├── api (api层)
│ └── v1 (v1版本接口)
├── config (配置包)
├── core (核心文件)
├── docs (swagger文档目录)
├── global (全局对象)
├── initialize (初始化)
│ └── internal (初始化内部函数)
├── middleware (中间件层)
├── model (模型层)
│ ├── request (入参结构体)
│ └── response (出参结构体)
├── packfile (静态文件打包)
├── resource (静态资源文件夹)
│ ├── excel (excel导入导出默认路径)
│ ├── page (表单生成器)
│ └── template (模板)
├── router (路由层)
├── service (service层)
├── source (source层)
└── utils (工具包)
├── timer (定时器接口封装)
└── upload (oss接口封装)
web
├── babel.config.js
├── Dockerfile
├── favicon.ico
├── index.html -- 主页面
├── limit.js -- 助手代码
├── package.json -- 包管理器代码
├── src -- 源代码
│ ├── api -- api 组
│ ├── App.vue -- 主页面
│ ├── assets -- 静态资源
│ ├── components -- 全局组件
│ ├── core -- lrag 组件包
│ │ ├── config.js -- lrag网站配置文件
│ │ ├── lightningrag.js -- 注册欢迎文件
│ │ └── global.js -- 统一导入文件
│ ├── directive -- v-auth 注册文件
│ ├── main.js -- 主文件
│ ├── permission.js -- 路由中间件
│ ├── pinia -- pinia 状态管理器,取代vuex
│ │ ├── index.js -- 入口文件
│ │ └── modules -- modules
│ │ ├── dictionary.js
│ │ ├── router.js
│ │ └── user.js
│ ├── router -- 路由声明文件
│ │ └── index.js
│ ├── style -- 全局样式
│ │ ├── base.scss
│ │ ├── basics.scss
│ │ ├── element_visiable.scss -- 此处可以全局覆盖 element-plus 样式
│ │ ├── iconfont.css -- 顶部几个icon的样式文件
│ │ ├── main.scss
│ │ ├── mobile.scss
│ │ └── newLogin.scss
│ ├── utils -- 方法包库
│ │ ├── asyncRouter.js -- 动态路由相关
│ │ ├── btnAuth.js -- 动态权限按钮相关
│ │ ├── bus.js -- 全局mitt声明文件
│ │ ├── date.js -- 日期相关
│ │ ├── dictionary.js -- 获取字典方法
│ │ ├── downloadImg.js -- 下载图片方法
│ │ ├── format.js -- 格式整理相关
│ │ ├── image.js -- 图片相关方法
│ │ ├── page.js -- 设置页面标题
│ │ ├── request.js -- 请求
│ │ └── stringFun.js -- 字符串文件
| ├── view -- 主要view代码
| | ├── about -- 关于我们
| | ├── dashboard -- 面板
| | ├── error -- 错误
| | ├── example --上传案例
| | ├── iconList -- icon列表
| | ├── init -- 初始化数据
| | | ├── index -- 新版本
| | | ├── init -- 旧版本
| | ├── layout -- layout约束页面
| | | ├── aside
| | | ├── bottomInfo -- bottomInfo
| | | ├── screenfull -- 全屏设置
| | | ├── setting -- 系统设置
| | | └── index.vue -- base 约束
| | ├── login --登录
| | ├── person --个人中心
| | ├── superAdmin -- 超级管理员操作
| | ├── system -- 系统检测页面
| | ├── systemTools -- 系统配置相关页面
| | └── routerHolder.vue -- page 入口页面
├── vite.config.js -- vite 配置文件
└── yarn.lock
- node版本 > v18.16.0
- golang版本 >= v1.22
- IDE推荐:Goland
使用 Goland 等编辑工具,打开server目录,不可以打开 LightningRAG 根目录
# 克隆项目
git clone https://github.com/LightningRAG/LightningRAG.git
# 进入server文件夹
cd server
# 使用 go mod 并安装go依赖包
go generate
# 运行
go run .
# 进入web文件夹
cd web
# 安装依赖
npm install
# 启动web项目
npm run serve
go:embed)将 web 构建产物同步到 server/webui/webdist 后再编译 Go,可把静态前端打进 同一个可执行文件,便于只发布一个二进制。
bash
make build-server-embed-local
或:
bash
bash scripts/build-server-with-embed.sh
上述流程会执行 build-web-local(yarn install + yarn build)、scripts/sync-web-dist.sh,再在 server/ 下 go build。
web/dist(已手动 yarn build 时)bash
make sync-web-dist
# 或
bash scripts/sync-web-dist.sh
在 config.yaml(或对应环境的配置文件)中将 system.embed-web-ui 设为 true。默认 false,与「Nginx 托管静态资源 + 后端 API」的分离部署保持一致。
当 embed-web-ui: true 且 system.router-prefix 为空时,在 HTTP 层(Gin 匹配路由之前)将 /api/... 改为 /...,与 web/.env.production 的 VITE_BASE_API=/api 及 Nginx rewrite ^/api/(.*)$ /$1 一致(若仅用 Gin 中间件改写 Path,会在未匹配路由时无效)。若 router-prefix 非空,不会自动剥离 /api,需自行对齐前端 VITE_BASE_API。
使用带嵌入资源编译出的 server 二进制,在 embed-web-ui: true 的配置下启动;浏览器访问后端监听端口即可打开管理端(例如 http://127.0.0.1:8888),Swagger 仍为 http://127.0.0.1:8888/swagger/index.html。
另见 scripts/sync-web-dist.sh 与 server/webui/。
使用仓库根目录的 GoReleaser 配置 .goreleaser.yaml,在发布流程中自动完成「前端构建 → 同步到 webui/webdist → 交叉编译」,与上一节的手动嵌入流程一致。
| 步骤 | 说明 |
|---|---|
| 编译前钩子 | 在 web/ 执行 npm install 与 npm run build,再执行 scripts/sync-web-dist.sh,将产物写入 server/webui/webdist 供 go:embed |
| Go 模块 | go.mod 位于 server/,配置中通过 gomod.dir: server 指定,避免在仓库根目录执行 go list -m 失败 |
| 构建参数 | CGO_ENABLED=0、-trimpath、-ldflags "-s -w";目标平台见 .goreleaser.yaml(含 Linux / Windows / macOS / FreeBSD 及常见 amd64、arm64、386、Linux armv7、Windows arm64 等) |
| 发布包内容 | 每个压缩包内含可执行文件 lightningrag、根目录 config.yaml(由 server/config.docker.yaml 复制而来)、以及 resource/(来自 server/resource) |
| 自动化 | 推送 v* 语义化标签时由 .github/workflows/goreleaser.yml 执行 goreleaser release --clean 并发布到 GitHub Releases(依赖 GITHUB_TOKEN 的 contents: write) |
本地试打包(不上传 Release):
goreleaser release --snapshot --clean --skip=publish
产物默认在 dist/ 目录(建议勿提交到 Git)。
正式发布: 打标签并推送,例如 git tag v2.9.1 && git push origin v2.9.1。
更多说明见 .github/workflows/README_zh.md 中「GoReleaser」一节。
go install github.com/swaggo/swag/cmd/swag@latest
cd server
swag init
执行上面的命令后,server目录下会出现docs文件夹里的
docs.go,swagger.json,swagger.yaml三个文件更新,启动go服务之后, 在浏览器输入 http://localhost:8888/swagger/index.html 即可查看swagger文档
使用VSCode打开根目录下的工作区文件LightningRAG.code-workspace,在边栏可以看到三个虚拟目录:backend、frontend、root。
在运行和调试中也可以看到三个task:Backend、Frontend、Both (Backend & Frontend)。运行Both (Backend & Frontend)可以同时启动前后端项目。
在工作区配置文件中有go.toolsEnvVars字段,是用于VSCode自身的go工具环境变量。此外在多go版本的系统中,可以通过gopath、go.goroot指定运行版本。
"go.gopath": null,
"go.goroot": null,
$ claude mcp add LightningRAG \
-- python -m otcore.mcp_server <graph>