ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vane 私有化 AI 回答引擎:基于 SearxNG 元搜索与本地 LLM 的架构解析与部署实战

Vane 私有化 AI 回答引擎:基于 SearxNG 元搜索与本地 LLM 的架构解析与部署实战 Vane 私有化 AI 回答引擎基于 SearxNG 元搜索与本地 LLM 的架构解析与部署实战【免费下载链接】VaneVane is an AI-powered answering engine.项目地址: https://gitcode.com/GitHub_Trending/pe/VaneVane 是一个完全运行在你自有硬件上的、隐私优先的 AI 回答引擎它将互联网搜索结果与本地 LLMOllama或云端模型OpenAI、Claude、Groq 等结合生成带引用来源的答案。本文以仓库 README.md 为主体脉络结合 架构文档、工作流说明 与 Docker 构建源码完整讲解 Vane 的工作原理、四种安装方式、Docker 镜像内部结构、常见连接故障排查以及将其作为搜索引擎入口或 API 集成的方法。读完本文你可以独立部署一套带 SearxNG 的私有问答引擎并理解分类 → 研究与 Widget 并行 → 生成带引用答案的核心链路。一、Vane 是什么隐私优先的 AI 回答引擎Vane 的定位可以概括为三点本地化部署整个系统问答引擎 SearxNG 元搜索引擎都可以跑在自己的硬件上搜索过程不经过第三方的用户画像多模型混合支持通过 Ollama 使用本地 LLM也可接入 OpenAI、Anthropic Claude、Google Gemini、Groq 等云端提供商按需求自由组合模型答案带引用回答基于真实检索到的网页、学术或社区来源生成并在 UI 中渲染引用卡片。从 package.json 可以看到当前项目版本为1.12.2技术栈为 Next.jsnext ^16.0.7 React 18 TypeScript数据库层使用better-sqlite3与drizzle-ormSQLite 存储并依赖playwright用于网页抓取、pdf-parse/mammoth/officeparser文件上传解析、mathjs与yahoo-finance2Widget 能力等库这与后文介绍的文件上传、计算与股票 Widget 等功能一一对应。README 中列出的核心功能包括功能说明多 AI 提供商本地 Ollama 或 OpenAI、Claude、Gemini、Groq 等可混合使用智能搜索模式Speed / Balanced / Quality 三档分别对应快速回答、日常搜索与深度研究来源选择可指定搜索网页、社区讨论或学术论文Widgets天气、计算、股票价格等 UI 卡片在相关时自动出现SearxNG 网络搜索通过元搜索引擎聚合多个搜索引擎保护身份隐私图片与视频搜索除文本外还支持视觉内容检索文件上传支持 PDF、文本、图片等文档可就文档内容提问指定域名搜索可把搜索限定在特定网站适合技术文档或论文场景智能建议输入时获得智能搜索建议Discover浏览当日热门文章与趋势内容搜索历史所有搜索保存在本地可随时回看从源码结构看上述指定模型/搜索模式等设置保存在 SQLite 中src/lib/db/schema.ts 定义了 Drizzle 的表结构src/lib/config/ 目录下的clientRegistry.ts与serverRegistry.ts分别承担客户端与服务端配置读取src/lib/models/providers/目录则按提供商组织实现openai/、anthropic/、gemini/、groq/、ollama/、lemonade/、lmstudio/、transformers/由 src/lib/models/registry.ts 统一管理这正是 README 所说Mix and match models based on your needs的落地方式。二、工作原理从提问到带引用答案的三步链路架构文档 docs/architecture/WORKING.md 给出了高层流程当你在 UI 中发送一条消息应用会调用POST /api/chat随后系统做三件事分类Classification先决定是否需要研究、是否需要展示 Widget并把问题重写成更清晰的独立形式研究与 Widget 并行研究在后台收集信息可含网络检索与用户上传文件检索Widget 作为结构化小助手与之一并运行答案生成聊天模型基于收集到的上下文生成最终回答并通过提示词要求模型引用所用来源UI 再把这些引用与支持链接一起渲染出来。其中两个值得注意的设计细节Widget 与答案的关系Widget天气、股票、计算等是有用的上下文但它们不属于模型应该引用的引用来源。这在 docs/architecture/WORKING.md 中有明确说明。搜索模式控制质量与速度的权衡通过optimizationMode字段可取speed、balanced、quality三个值分别对应Speed Mode 快速回答Balanced Mode 日常搜索Quality Mode 深度研究。对照源码这套流程在 src/lib/agents/search/index.ts 的SearchAgent.searchAsync中实现先通过classify对问题分类第 55-60 行随后WidgetExecutor.executeAll作为widgetPromise异步执行Widget 结果通过session.emitBlock以widget类型的块推送到 UI第 62-79 行同时研究管线在Researchersrc/lib/agents/search/researcher/index.ts中执行实现了研究与 Widget 并行。分类结果还会约束研究范围enabledSources直接传入classify即选择来源网页/讨论/学术这一用户可见功能在分类阶段生效。架构组件层面docs/architecture/README.md 将系统拆为七块User Interface基于 Web 的聊天、搜索与引用查看界面API RoutesPOST /api/chat聊天 UI 驱动、POST /api/search程序化搜索端点、GET /api/providers列出可用提供商与模型键Agents and Orchestration分类 → 研究/Widget 并行 → 生成带引用答案Search Backend启用研究时通过元搜索后端拉取相关网页结果LLMs用于分类、写答案、生成引用Embedding Models对用户上传的文件做语义搜索Storage会话与消息持久化支持会话重载。路由在 src/app/api/ 下可以逐一对应chat/、search/、providers/之外还有images/、videos/图片视频搜索、uploads/文件上传、discover/发现页、weather/天气 Widget 数据等。图片与视频搜索走独立端点POST /api/images和POST /api/videos其策略是先用聊天模型生成一个聚焦查询再从搜索后端拉取匹配结果见 docs/architecture/WORKING.md。三、安装部署README 给出两条主路径Docker推荐与非 Docker。Docker 路径下又细分为一体镜像slim 镜像 自建 SearxNG从源码构建三种。3.1 Docker 一体镜像推荐Vane 官方镜像把 Vane 和 SearxNG 打进同一个容器一条命令即可启动docker run -d -p 3000:3000 -v vane-data:/home/vane/data --name vane itzcrazykns1337/vane:latest容器启动后访问 http://localhost:3000 在设置界面里配置 API Key、模型等。README 特别提醒-v卷用于持久化数据与上传文件镜像内置 SearxNG 因此无需额外配置。仓库根目录的 docker-compose.yaml 是同一方案的 Compose 表达vane服务映射3000:3000挂载名为vane-data的卷到/home/vane/data并设置restart: unless-stopped。3.2 Slim 镜像 你自己的 SearxNG如果已经有运行中的 SearxNG 实例可以用 slim 版镜像通过环境变量SEARXNG_API_URL指向它docker run -d -p 3000:3000 -e SEARXNG_API_URLhttp://your-searxng-url:8080 -v vane-data:/home/vane/data --name vane itzcrazykns1337/vane:slim-latestREADME 对自建 SearxNG 实例提出了两项硬性要求开启 JSON 格式输出启用 Wolfram Alpha 搜索引擎。这两点在仓库内一体镜像的配置里都有直接体现。searxng/settings.yml 中search: autocomplete: google formats: - html - json engines: - name: wolframalpha disabled: falseformats里显式列出jsonwolframalpha引擎显式disabled: false与 README 的要求一致。对照 Dockerfile 第 49-52 行这个settings.yml连同 searxng/limiter.toml 与 searxng/uwsgi.ini在构建期被拷入/etc/searxng/说明一体镜像正是用这份配置满足上述两项要求。配置完成后同样访问 http://localhost:3000 完成 AI 提供商设置。3.3 从源码构建 Docker 镜像需要更多控制时可以自行构建确认 Docker 已安装并运行克隆仓库git clone https://github.com/ItzCrazyKns/Vane.git进入项目目录构建并运行docker build -t vane . docker run -d -p 3000:3000 -v vane-data:/home/vane/data --name vane vane访问 http://localhost:3000 完成设置。从 Dockerfile 看构建采用两阶段node:24.5.0-slimbuilder 阶段先yarn install --frozen-lockfile再yarn build运行时阶段只拷贝public、.next/static与Next.jsstandalone 产物server.js然后安装 playwright 无头 Chromiumyarn playwright install --with-deps --only-shell chromium供网页抓取使用。更值得注意的是它还在同一镜像里以searxng系统用户身份完整安装了 SearxNG创建/etc/searxng配置、git clonesearxng 源码、建立 Python venv 并pip install -e .最后EXPOSE 3000 8080默认环境变量SEARXNG_API_URLhttp://localhost:8080Dockerfile。而 Dockerfile.slim 只保留 Next.js 构建与运行部分CMD直接是node server.js这正是 slim 镜像不带 SearxNG、依赖外部SEARXNG_API_URL的原因。3.4 非 Docker 安装手动部署的完整步骤安装 SearXNG并在其设置中允许JSON格式同时启用 Wolfram Alpha 引擎克隆仓库并进入目录git clone https://github.com/ItzCrazyKns/Vane.git cd Vane安装依赖npm i构建npm run build启动npm run start打开 http://localhost:3000 完成设置API Key、模型、SearxNG URL 等。其中build与start对应 package.json 中的next build --webpack与next start。README 同时说明推荐 Docker 路径因为它简化了环境变量与依赖的管理。3.5 容器启动流程entrypoint 的双重职责一体镜像的CMD指向 entrypoint.sh这个脚本解释了一个容器跑两个服务的时序以searxng用户后台启动 SearxNGflask run监听0.0.0.0:8080进入健康检查循环最多重试 30 次每次sleep 1用curl探测http://localhost:8080超时也只打印警告并继续最后exec node server.js启动 Vane 本体。这意味着即使 SearxNG 启动稍慢Vane 也会先起来搜索请求在其就绪前会失败——排障时如果网页能打开但搜索无结果优先检查容器日志里 SearxNG 是否 ready。四、故障排查TroubleshootingREADME 的 Troubleshooting 一节覆盖了本地模型服务接入的三类高频问题这里完整保留并稍作补充。4.1 本地 OpenAI 兼容服务如果 Vane 提示未配置任何聊天模型提供商检查三点服务必须监听在0.0.0.0而不是127.0.0.1且端口与 API URL 中填写的一致模型名必须与本地 LLM 服务实际加载的模型名一致API Key 字段不能留空——即使服务端未定义 key也要随便填一个非空值。4.2 Ollama 连接错误后端连不上 Ollama API 时按操作系统调整 API URL端口不同时请自行替换 11434Windowshttp://host.docker.internal:11434Machttp://host.docker.internal:11434Linuxhttp://主机私有IP:11434Linux 用户还需让 Ollama 暴露到网络在/etc/systemd/system/ollama.service中追加EnvironmentOLLAMA_HOST0.0.0.0:11434端口不同则替换然后systemctl daemon-reload并systemctl restart ollama同时确认防火墙未拦截 11434 端口。这与 3.1 节的原理一致容器内的 Vane 访问不了宿主机的127.0.0.1必须走host.docker.internalWindows/Mac或主机内网 IPLinux。4.3 Lemonade 连接错误处理方式与 Ollama 类似默认端口 8000Windows / Machttp://host.docker.internal:8000Linuxhttp://主机私有IP:8000同时确认 Lemonade 服务正在运行、配置为监听0.0.0.0而非仅 localhost且 8000 端口未被防火墙拦截。五、把 Vane 用作浏览器搜索引擎如果想把 Vane 当 Google/Bing 的替代品或从浏览器搜索栏直达打开浏览器设置进入搜索引擎Site Search部分添加新的站点搜索URL 填http://localhost:3000/?q%s若 Vane 不在本地把localhost换成你的 IP 或域名非 3000 端口时同步替换端口保存后即可在浏览器地址栏直接提问。六、作为 API 集成Vane 面向开发者暴露了程序化搜索能力POST /api/search返回message生成的答案与sources支撑答案的引用来源并支持stream: true开启流式输出此外GET /api/providers可列出当前已配置的提供商与模型键便于在多模型场景下动态选择。完整接口文档见 docs/API/SEARCH.md搜索 Agent 的输入/输出类型定义位于 src/lib/agents/search/types.ts。七、网络暴露与后续计划README 指出Vane 基于 Next.js 并处理所有 API 请求在同一局域网内开箱即用配合端口转发也能保持可访问——即不做额外内网穿透即可让局域网设备访问。此外项目也提供了 Sealos、RepoCloud、ClawCloud、Hostinger 等一键部署入口其中 Hostinger 直接复用仓库内的 docker-compose.yaml。从 README 的 Upcoming Features 可以看到规划中的方向更多 Widget 与搜索来源集成、自定义 Agent 创建能力、以及身份认证authentication。当前仓库尚无认证机制因此在暴露到公网前建议自行加反向代理与访问控制。八、小结Vane 的价值在于把元搜索 RAG 式回答 引用渲染整条链路私有化一体镜像内 SearxNG 负责匿名聚合搜索LLM 负责分类与写作SQLite 负责会话持久化部署上推荐 Docker 一体镜像itzcrazykns1337/vane:latest自建 SearxNG 时用 slim 镜像 SEARXNG_API_URL并牢记 JSON 格式与 Wolfram Alpha 两个前置条件核心链路分类 → 研究/Widget 并行 → 带引用答案既可以在 docs/architecture/WORKING.md 中读到低层描述也可以在 src/lib/agents/search/index.ts 中找到对应实现便于按需定制搜索模式speed/balanced/quality、来源选择与 Widget 行为。【免费下载链接】VaneVane is an AI-powered answering engine.项目地址: https://gitcode.com/GitHub_Trending/pe/Vane创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表