本项目是基于 reflyai 的二次开发版本。
进行二次开发的主要目的是为了解决原版在配置灵活性和本地化部署方面的一些限制,特别是针对 LLM、Embedding、Rerank 等核心组件,并优化了浏览器插件的剪存功能,使其能够更好地适应私有化部署场景。
以下是本项目相对于原版的主要增强功能:
-
灵活的 LLM 配置:
- 解决了原版仅支持少数 LLM 服务的问题。 现在可以通过统一的
models.config.yaml文件灵活配置和切换不同的 LLM 端点,包括 OpenAI、OpenRouter、Ollama 以及其他兼容 OpenAI API 的本地或云端服务。 - 参考技术方案:
LLM-CHANGE-PLAN.md
- 解决了原版仅支持少数 LLM 服务的问题。 现在可以通过统一的
-
本地化 Embedding 支持:
- 新增了对本地 Ollama Embedding 的支持。 这解决了原版强制依赖 Jina API 可能带来的成本和网络问题,使得 Embedding 过程可以完全在本地进行。同时,用户仍然可以选择使用原有的 Embedding 方案 (如 Jina, OpenAI)。
- 配置通过
models.config.yaml(embedding.providers.ollama) 和.env文件 (EMBEDDINGS_PROVIDER) 共同控制。 - 参考技术方案:
EMB_CHANGE_PLAN_FINAL.md
-
扩展的 Rerank 选项:
- 增加了对 Xinference Reranker 的支持, 为用户提供了除 Jina Reranker 之外的另一种选择,特别是方便与本地部署的 Xinference 服务集成。
- 可以通过
models.config.yaml(rerank.defaultProvider,rerank.providers.xinference) 和.env(Jina 相关配置) 进行选择和配置。 - 参考技术方案:
RERANK_CHANGE_PLAN.md
-
可配置的网页解析器:
- 新增了基于 Trafilatura (Python/Node.js 回退) 的本地网页内容解析器。 用户可以通过
models.config.yaml(parsers.defaultProvider) 在原有的 Jina Cloud API 解析器和新增的本地解析器之间进行选择,提高了网页抓取和处理的灵活性。 - 参考技术方案:
PARSERS_CHANGE_PLAN.md
- 新增了基于 Trafilatura (Python/Node.js 回退) 的本地网页内容解析器。 用户可以通过
-
多样的 PDF 解析器:
- 提供了三种 PDF 解析方案:MinerU API、Marker API 以及 Marker Local CLI。 用户可以根据需求(如云服务便利性、本地处理能力、对特定格式的支持)通过
models.config.yaml(pdf_parser.provider) 选择最合适的 PDF 解析引擎。 - 参考技术方案:
PARSERS_CHANGE_PLAN.md,PDF_MINERU_PARSER.md
- 提供了三种 PDF 解析方案:MinerU API、Marker API 以及 Marker Local CLI。 用户可以根据需求(如云服务便利性、本地处理能力、对特定格式的支持)通过
-
可选的 Web 搜索服务:
- 集成了 SearxNG 作为主要的本地化/自托管 Web 搜索选项, 并保留了 Serper API 作为备选。用户可以通过
models.config.yaml(web_search.defaultProvider) 在两者之间切换,方便在不同网络环境下进行网页搜索。 - 参考技术方案:
WEB_SEARCH_PLAN.md
- 集成了 SearxNG 作为主要的本地化/自托管 Web 搜索选项, 并保留了 Serper API 作为备选。用户可以通过
-
插件剪存私有化:
- 修改了浏览器插件,使其能够将剪存数据发送到用户自己部署的 API 服务器, 而不是默认的官方服务器。这对于希望完全掌控数据的用户至关重要。配置涉及修改插件源码和正确设置后端/前端环境。
- 参考技术方案:
CHAJIANJIANCUN_PLAN.md
本项目的配置主要通过两个文件进行管理:
-
核心配置文件 (
models.config.yaml):- 位置: 部署时通常位于
deploy/docker/models.config.yaml,并挂载到 API 容器内的/app/apps/api/models.config.yaml。 - 作用: 控制 LLM、Embedding (Ollama)、Rerank (Xinference)、HTML/PDF 解析器、Web 搜索 (SearxNG) 等核心 AI 功能的提供商选择和详细参数。
- 示例结构 (简化):
llm: endpoints: # ... 定义你的 LLM 服务 ... embedding: providers: ollama: baseUrl: http://host.docker.internal:11434 # 示例 defaultModel: nomic-embed-text rerank: defaultProvider: xinference # 或 jina providers: xinference: baseUrl: http://host.docker.internal:9997 # 示例 modelName: bge-reranker-base # jina 配置主要在 .env parsers: defaultProvider: trafilatura # 或 jina providers: trafilatura: # ... trafilatura 配置 ... pdf_parser: provider: marker_local # 或 mineru, marker marker_local: output_format: markdown # ... marker_local 配置 ... web_search: defaultProvider: searxng # 或 serper providers: searxng: baseUrl: http://host.docker.internal:8080 # 示例
- 参考: 请查阅
apps/api/models.config.yaml.example获取完整的配置结构和说明。
- 位置: 部署时通常位于
-
环境变量 (
.env):- 位置: 部署时通常位于
deploy/docker/.env。 - 作用:
- 配置基础服务的连接信息 (PostgreSQL, Elasticsearch, Minio, Redis, Qdrant)。
- 设置部分云服务的 API Key (如 Jina, Serper, Marker API)。
- 配置身份验证 Cookie 的行为 (
REFLY_COOKIE_DOMAIN,REFLY_COOKIE_SECURE,REFLY_COOKIE_SAME_SITE)。REFLY_COOKIE_DOMAIN必须正确设置,以便浏览器插件能够成功识别登录状态。
- 参考: 请查阅
deploy/docker/.env.example获取所需的环境变量列表。
- 位置: 部署时通常位于
本项目提供两种主要的运行方式:
这是最推荐的生产环境和便捷体验方式,可以确保环境一致性。
- 前提条件:
- 安装 Docker 和 Docker Compose。
- GPU 支持: API 服务 (
api) 的运行需要 NVIDIA GPU 支持,因为它依赖于需要 CUDA 的库 (例如marker-pdf或其他模型)。请确保 Docker 主机已正确安装 NVIDIA 驱动和 NVIDIA Container Toolkit。Docker Compose 文件中已包含 GPU 请求配置。
- 依赖服务: Docker Compose 文件会自动拉取并启动所需的依赖服务:
- PostgreSQL (数据库)
- Elasticsearch (全文搜索)
- Minio (对象存储)
- Redis (缓存)
- Qdrant (向量数据库) 确保你的 Docker 环境有足够资源运行这些服务。
- 配置:
- 环境变量: 复制
deploy/docker/.env.example为deploy/docker/.env,并根据你的环境修改数据库连接、Minio、Redis、Qdrant 地址、以及所需的 API Keys 等配置。特别注意REFLY_COOKIE_DOMAIN的设置,它对插件登录至关重要。 - 模型配置: 复制
apps/api/models.config.yaml.example为deploy/docker/models.config.yaml,并根据你的需求配置 LLM、Embedding、Rerank、解析器等模型。此文件会被挂载到 API 容器中。
- 环境变量: 复制
- 启动: 在
deploy/docker/目录下运行:API 服务将运行在docker compose up -d
http://localhost:5800(默认),Web 服务运行在http://localhost:5700(默认)。 - 参考:
DOCKE_BUILD_PLAY.md提供了更详细的 Docker 构建和部署流程解析。
适合开发者进行代码修改和调试。
- 前提条件:
- Node.js (推荐 v18 或更高版本)
- pnpm (推荐使用
corepack enable) - Miniconda 或 Anaconda (用于管理 API 的 Python 环境)
- Git
- (可选但推荐) NVIDIA GPU 及相应的驱动程序 (如果需要运行依赖 GPU 的功能)
- 依赖服务: 你需要手动启动并配置 PostgreSQL, Elasticsearch, Minio, Redis, Qdrant 服务,或者配置连接到已有的服务实例。
- 克隆仓库:
git clone <your-repo-url> cd refly-local-enhanced # 或者你的仓库名
- 安装 Node.js 依赖:
pnpm install
- 设置 Python 环境 (API):
- API 服务依赖于特定的 Python 环境 (名为
py310) 和库 (如 PyTorch, marker-pdf)。你需要手动创建并配置此环境。 - 参考
apps/api/DockerfileV1中 Conda 环境创建和依赖安装部分,执行类似的操作:- 创建 Conda 环境:
conda create -n py310 python=3.10 -y - 激活环境:
conda activate py310 - 安装依赖: 根据 Dockerfile 中的
pip install命令安装必要的 Python 包 (可能需要调整 CUDA 版本以匹配你的 GPU)。
- 创建 Conda 环境:
- API 服务依赖于特定的 Python 环境 (名为
- 配置:
- API 配置:
- 将
deploy/docker/.env.example(或相关部分) 复制到apps/api/.env并修改配置,确保数据库、Minio 等连接信息指向你手动启动或已有的服务。 - 将
apps/api/models.config.yaml.example复制到apps/api/models.config.yaml并修改配置。
- 将
- Web 配置: (可能需要) 为
apps/web配置环境变量,通常可以在apps/web目录下创建.env文件,至少需要配置API_URL指向本地运行的 API 服务 (例如http://localhost:3000)。
- API 配置:
- 构建 (可选但推荐):
pnpm build
- 启动开发服务器:
- 启动 API 服务 (需要激活
py310Conda 环境):API 默认运行在conda activate py310 pnpm --filter api dev
http://localhost:3000。 - 启动 Web 服务 (在另一个终端):
Web 服务默认运行在
pnpm --filter web dev
http://localhost:5173。
- 启动 API 服务 (需要激活
注意: 本地运行需要手动管理 Python 环境和依赖,并确保所有基础服务已启动且配置正确。对于 API 服务,如果使用了需要 GPU 的模型或功能,本地环境同样需要满足 GPU 要求。
如果你希望浏览器插件连接到你自己部署的服务器,你需要:
- 修改插件源代码:
- 编辑
packages/utils/src/url.ts,修改以下常量为你私有部署的地址 (需要包含http://或https://):SERVER_PROD_DOMAIN: 指向你的后端 API 地址 (例如http://yourdomain.com:5800)SERVER_DEV_DOMAIN: (同上,或你的开发环境 API 地址)CLIENT_PROD_APP_DOMAIN: 指向你的前端 Web 应用地址 (例如http://yourdomain.com:5700)CLIENT_DEV_APP_DOMAIN: (同上,或你的开发环境前端地址)CLIENT_PROD_COOKIE_DOMAIN: 设置为你的主域名 (例如.yourdomain.com)CLIENT_DEV_COOKIE_DOMAIN: (同上)
- 编辑
apps/extension/wxt.config.ts,在manifest.externally_connectable.matches数组中添加你的前端 Web 应用地址 (需要包含协议和/*通配符,例如http://yourdomain.com:5700/*)。
- 编辑
- 重新编译插件:
- 确保
pnpm已安装。 - 在项目根目录运行:
pnpm --filter @refly/extension build
- 确保
- 加载插件:
- 打开浏览器的扩展管理页面 (
chrome://extensions或edge://extensions)。 - 启用“开发者模式”。
- 点击“加载已解压的扩展程序”。
- 选择编译输出目录 (通常是
apps/extension/.output/chrome-mv3)。
- 打开浏览器的扩展管理页面 (
- 参考排错过程:
CHAJIANJIANCUN_PLAN.md
本项目遵循 MarcusYuan/refly-local 项目的原有授权协议:MIT License。
欢迎对本项目进行贡献!请参考 CONTRIBUTING_CN.md (中文) 或 CONTRIBUTING.md (英文) 了解详情。