minRAG是从零开始的RAG系统,追求极致的简单和强大,不超过1万行代码,无需安装,双击启动.支持OpenAI、Gitee AI、百度千帆、腾讯云LKE、阿里云百炼、字节火山引擎等AI平台.
因为 reranker 没有统一标准,组件参数中base_url要填写完整的路径
minRAG实现了OpenAI的标准规范,所有兼容OpenAI的平台都可以使用.
AI平台默认是 Gitee AI,Gitee AI每天100次免费调用
base_url 填写 https://ai.gitee.com/v1
api_key 填写 免费或者付费的tokenOpenAITextEmbedder 默认使用 Qwen3-Embedding-8B 模型DocumentChunkReranker默认使用 Qwen3-Reranker-8B 模型OpenAIChatGenerator 建议使用 DeepSeek-V4-Pro 模型base_url 填写 SecretId ,或在组件参数配置{"SecretId":"xxx"}
api_key 填写 SecretKey ,或在组件参数配置{"SecretKey":"xxx"}
LKETextEmbedder和LKEDocumentEmbedder 默认使用 lke-text-embedding-v2 模型LKEDocumentChunkReranker 默认使用 lke-reranker-base 模型OpenAIChatGenerator
base_url 填写 阿里云百炼
base_url 填写 markitdown集成(默认)
使用 https://gitee.com/minrag/markitdown 解析文档,使用python build.py编译的dist/markitdown放到 minragdatadir目录下,MarkdownConverter组件配置示例:
{ "model":"Qwen3-VL-30B-A3B-Instruct", "prompt":"提取图片内容,不要有引导语,介绍语,换行等", "markitdown":"minragdatadir/markitdown/markitdown", "markdownDir":"minragdatadir/upload/markitdown/markdown", "imageFileDir":"minragdatadir/upload/markitdown/image", "imageURLPrefix":"/upload/markitdown/image" }
字段说明:
model:图片解析的模型prompt:理解文档中图片的提示词markitdown:markitdown的命令markdownDir:生成的markdown文件目录imageFileDir:图片存放的目录imageURLPrefix:图片的URL前缀默认minRAG只支持markdown和text等文本格式,可以使用TikaConverter组件调用tika服务解析文档内容,TikaConverter组件配置示例:
{ "tikaURL":"http://localhost:9998/tika", "defaultHeaders":{ "Content-Type":"application/octet-stream" } }
启动 tika 的命令如下:
## tika 3.x 依赖 jdk11+ java -jar tika-server-standard-3.1.0.jar --host=0.0.0.0 --port=9998 ## 不输出日志 #nohup java -jar tika-server-standard-3.1.0.jar --host=0.0.0.0 --port=9998 >/dev/null 2>&1 &
index组件配置:
{ "id":"indexPipeline", "downStream":[ { "id":"MarkdownConverter", "downStream":[{"id":"MarkdownIndex"}] }, { "id":"MarkdownIndex", "downStream":[{"id":"SQLiteVecDocumentStore"}] }, { "id":"SQLiteVecDocumentStore" } ] }
default组件配置:
{ "id":"default", "downStream":[ { "id":"MarkdownRetriever", "downStream":[{"id":"FtsKeywordRetriever"}] }, { "id":"FtsKeywordRetriever", "downStream":[{"id":"PromptBuilder"}] }, { "id":"PromptBuilder", "downStream":[{"id":"OpenAIChatMemory"}] }, { "id":"OpenAIChatMemory", "downStream":[{"id":"OpenAIChatGenerator"}] }, { "id":"OpenAIChatGenerator", "downStream":[{"id":"ChatMessageLogStore"}] }, { "id":"ChatMessageLogStore" } ] }
minRAG使用了 https://github.com/wangfenjin/simple 作为FTS5的全文检索扩展,编译好的libsimple文件放到 minragdatadir/extensions 目录下,如果minRAG启动报错连不上数据库,请检查libsimple文件是否正确,如果需要重新编译libsimple,请参考 http://127.0.0.1:738/admin/login
需要先解压minragdatadir/dict.zip
运行 go run --tags "fts5" .
打包: go build --tags "fts5" -ldflags "-w -s"
开发环境需要配置CGO编译,设置set CGO_ENABLED=1,下载cmake,并把bin配置到环境变量,注意把mingw64/bin/mingw32-make.exe 改名为 make.exe
注意修改vscode的launch.json,增加 ,"buildFlags": "--tags=fts5" 用于调试fts5
test需要手动测试:go test -v -count=1 -timeout 30s --tags "fts5" -run ^TestVecQuery$ gitee.com/minrag/minrag
打包: go build --tags "fts5" -ldflags "-w -s"
重新编译simple时,建议使用https://github.com/wangfenjin/simple编译好的.
注意修改widnows编译脚本,去掉 mingw64 编译依赖的libgcc_s_seh-1.dll和libstdc++-6.dll,同时关闭BUILD_TEST_EXAMPLE,有冲突.
注意: windows 打包之后,需要把 minragdatadir/libgcc_s_seh-1.dll 复制到minrag.exe同一个目录,兼容windows的gcc库
rmdir /q /s build mkdir build && cd build cmake .. -G "Unix Makefiles" -DBUILD_TEST_EXAMPLE=OFF -DCMAKE_INSTALL_PREFIX=release -DCMAKE_CXX_FLAGS="-static-libgcc -static-libstdc++" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic" make && make install
minRAG后台管理目前支持中英双语,支持扩展其他语言,语言文件在 minragdatadir/locales,初始化安装默认使用的中文(zh-CN),如果需要英文,可以在安装前把minragdatadir/install_config.json中的"locale":"zh-CN"修改为"locale":"en-US".也可以在安装成功之后,在设置中修改语言为English,并重启生效.
ID默认使用时间戳(23位)+随机数(9位),全局唯一.
建表语句minragdatadir/minrag.sql
安装时会读取minragdatadir/install_config.json
| columnName | 类型 | 说明 | 备注 |
|---|---|---|---|
| id | string | 主键 | minrag_config |
| base_path | string | 基础路径 | 默认 / |
| jwt_secret | string | jwt密钥 | 随机生成 |
| jwt_token_key | string | jwt的key | 默认 jwttoken |
| server_port | string | IP:端口 | 默认 :738 |
| timeout | int | jwt超时时间秒 | 默认 7200 |
| max_request_body_size | int | 最大请求 | 默认 20M |
| locale | string | 语言包 | 默认 zh-CN,en-US |
| proxy | string | http代理地址 | |
| ai_base_url | string | AI平台base_url | |
| ai_api_key | string | AI平台api_key | |
| llm_model | string | 默认的LLM模型 | |
| create_time | string | 创建时间 | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | 初始化 system |
| sortno | int | 排序 | 倒序 |
| status | int | 状态 | 禁用(0),可用(1) |
后台只有一个用户.
| columnName | 类型 | 说明 | 备注 |
|---|---|---|---|
| id | string | 主键 | minrag_admin |
| account | string | 登录名称 | 默认admin |
| passWord | string | 密码 | - |
| user_name | string | 说明 | - |
| create_time | string | 创建时间 | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | 初始化 system |
| sortno | int | 排序 | 倒序 |
| status | int | 状态 | 禁用(0),可用(1) |
站点的信息,例如 title,logo,keywords,description等
| columnName | 类型 | 说明 | 备注 |
|---|---|---|---|
| id | string | 主键 | minrag_site |
| title | string | 站点名称 | - |
| keyword | string | 关键字 | - |
| description | string | 站点描述 | - |
| theme | string | 默认主题 | 默认使用default |
| theme_pc | string | PC主题 | 先从cookie获取,如果没有从Header头取值,写入cookie,默认使用default |
| theme_wap | string | 手机主题 | 先从cookie获取,如果没有从Header头取值,写入cookie,默认使用default |
| theme_wx | string | 微信主题 | 先从cookie获取,如果没有从Header头取值,写入cookie,默认使用default |
| logo | string | logo | - |
| favicon | string | Favicon | - |
| create_time | string | 创建时间 | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | 初始化 system |
| sortno | int | 排序 | 倒序 |
| status | int | 状态 | 禁用(0),可用(1) |
| columnName | 类型 | 说明 | 备注 |
|---|---|---|---|
| id | string | 主键 | URL路径,用/隔开,例如/web/ |
| name | string | 知识库名称 | - |
| pid | string | 父知识库ID | 父知识库ID |
| knowledge_base_type | int | 知识库类型 | - |
| create_time | string | 创建时间 | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | 初始化 system |
| sortno | int | 排序 | 倒序 |
| status | int | 状态 | 禁用(0),可用(1) |
| columnName | 类型 | 说明 | 是否分词 | 备注 |
|---|---|---|---|---|
| id | string | 主键 | 否 | URL路径,用/隔开,例如/web/nginx-use-hsts |
| name | string | 文档名称 | 否 | - |
| knowledge_base_id | string | 知识库ID | 否 | - |
| knowledge_base_name | string | 知识库名称 | 否 | - |
| toc | string | 目录 | 否 | - |
| summary | string | 摘要 | 否 | - |
| markdown | string | Markdown内容 | 否 | - |
| file_path | string | 文件路径 | 否 | |
| file_size | int | 文件大小 | 否 | |
| file_ext | string | 文件扩展名 | 否 | |
| create_time | string | 创建时间 | - | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | - | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | - | 初始化 system |
| sortno | int | 排序 | - | 倒序 |
| status | int | 状态 | - | 禁用(0),可用(1),处理中(2),处理失败(3) |
| columnName | 类型 | 说明 | 是否分词 | 备注 |
|---|---|---|---|---|
| id | string | 主键 | 否 | - |
| document_id | string | 文档ID | 否 | - |
| knowledge_base_id | string | 知识库ID | 否 | - |
| title | string | 标题 | 否 | - |
| parent_id | string | 上级ID | 否 | - |
| pre_id | string | 上一个节点ID | 否 | - |
| next_id | string | 下一个节点ID | 否 | - |
| level | int | 标题级别 | 否 | - |
| markdown | string | Markdown内容 | 是 | 使用 jieba 分词器 |
| create_time | string | 创建时间 | - | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | - | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | - | 初始化 system |
| sortno | int | 排序 | - | 倒序 |
| status | int | 状态 | - | 禁用(0),可用(1),处理中(2),处理失败(3) |
| columnName | 类型 | 说明 | 是否分词 | 备注 |
|---|---|---|---|---|
| id | string | 主键 | 否 | - |
| component_type | string | 组件类型 | 否 | - |
| parameter | string | 组件参数 | 否 | - |
| create_time | string | 创建时间 | - | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | - | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | - | 初始化 system |
| sortno | int | 排序 | - | 倒序 |
| status | int | 状态 | - | 禁用(0),可用(1) |
| columnName | 类型 | 说明 | 是否分词 | 备注 |
|---|---|---|---|---|
| id | string | 主键 | 否 | - |
| name | string | 智能体名称 | 否 | - |
| knowledge_base_id | string | 知识库ID | 否 | - |
| pipeline_id | string | 流水线ID | 否 | - |
| default_reply | string | 默认回复 | 否 | - |
| agent_type | int | 智能体类型 | 否 | - |
| agent_prompt | string | 智能体提示词 | 否 | - |
| avatar | string | 智能体头像 | 否 | - |
| welcome | string | 欢迎语 | 否 | - |
| tools | string | 调用的函数 | 否 | - |
| memory_length | int | 上下文记忆长度 | 否 | - |
| create_time | string | 创建时间 | - | 2006年01月02日 15:04:05 |
| update_time | string | 更新时间 | - | 2006年01月02日 15:04:05 |
| create_user | string | 创建人 | - | 初始化 system |
| sortno | int | 排序 | - | 倒序 |
| status | int | 状态 | - | 禁用(0),可用(1) |
| columnName | 类型 | 说明 | 是否分词 | 备注 |
|---|---|---|---|---|
| id | string | 主键 | 否 | - |
| name | string | 名称 | 否 | - |
| agent_id | string | 智能体ID | 否 | - |
| pipeline_id | string | 流水线ID | 否 | - |
| knowledge_base_id | string | 知识库ID | 否 | - |
| user_id | string | 用户ID | 否 | - |
| create_time | string | 创建时间 | - | 2006年01月02日 15:04:05 |
| columnName | 类型 | 说明 | 是否分词 | 备注 |
|---|---|---|---|---|
| id | string | 主键 | 否 | - |
| agent_id | string | 智能体ID | 否 | - |
| conversation_id | string | 聊天室ID | 否 | - |
| pipeline_id | string | 流水线ID | 否 | - |
| knowledge_base_id | string | 知识库ID | 否 | - |
| user_message | string | 用户的消息 | 否 | - |
| ai_message | string | AI回复的消息 | 否 | - |
| user_id | string | 用户ID | 否 | - |
| create_time | string | 创建时间 | - | 2006年01月02日 15:04:05 |