跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
TypeScriptNode.jsAI

Perplexica:Perplexity 的开源替代方案

综述由AI生成Perplexica,一个基于 SearXNG 和 LLM 的开源 Perplexity 替代方案。它支持多种模型提供商(如 Ollama、OpenAI),提供速度、平衡、质量三种模式,具备源控制、文件问答、域范围搜索等功能。文章详细说明了通过 Docker Compose 或非 Docker 方式的部署步骤,解析了其包含 UI、智能体、SearXNG、LLM 及嵌入模型的架构与请求流程。此外,还展示了 Next.js 后端 API 的关键代码实现,包括搜索接口、流式传输处理及模型配置方式,适合希望搭建本地 AI 搜索工具的开发人员参考。

漫步发布于 2026/3/22更新于 2026/5/2230 浏览
Perplexica:Perplexity 的开源替代方案

Perplexica:Perplexity 的开源替代方案

Perplexica 通过 SearXNG 搜索网络,可选地使用嵌入/相似性重新排序结果,然后使用 LLM 生成带引用的响应。

SearXNG 是一个免费的互联网元搜索引擎,聚合了多达 245 个搜索服务的结果。用户不会被跟踪或建立画像。此外,SearXNG 可以通过 Tor 使用以实现在线匿名。

核心功能

  • 提供商无关: 随附 Ollama 或可插入 OpenAI/Claude/Gemini/Groq。
  • 模式: 速度、平衡、质量,以权衡延迟、深度和成本。
  • 源控制: 根据任务使用网络、讨论或学术搜索。
  • 小部件: 用于快速查找的即时卡片(天气、计算、股票)。
  • 私有网络搜索: 目前是 SearxNG,稍后会有更多检索集成。
  • 图像 + 视频: 答案不仅仅是文章。
  • 文件问答: 上传文档并查询它们。
  • 域范围搜索: 针对特定站点/文档。
  • 智能建议: 更好的查询,更快的响应。

本地历史: 随时回顾研究。

1. Perplexica 入门

你有两个选项来运行 Perplexica。

(1) Docker Compose

git clone https://github.com/ItzCrazyKns/Perplexica.git
cd Perplexica
# 创建配置
cp sample.config.toml config.toml
# 使用所需的密钥/端点编辑 config.toml
docker compose up -d
# 打开 http://localhost:3000

对于 Docker + Ollama,通常使用 http://host.docker.internal:11434 作为 Ollama API URL。 你可以在 UI 的设置对话框中稍后更改模型密钥/设置。

(2) 非 Docker

  • 安装 SearXNG 并在 SearXNG 设置中允许 JSON 格式。
  • 克隆存储库并将 sample.config.toml 文件重命名为根目录中的 config.toml。
  • (确保完成此文件中的所有必填字段)
  • 然后运行:
npm i
npm run build
npm run start

如果有任何问题,你可以参考官方文档获取更多信息。

2. 架构和请求流程

Perplexica 将系统描述为:

  1. UI
  2. 智能体/链
  3. SearXNG 用于网络源
  4. LLM 用于推理/回答/引用
  5. 嵌入模型用于重新排序

概念流程是:

  1. 请求
  2. 链决定是否需要网络搜索 + 生成查询
  3. SearXNG 搜索
  4. 嵌入 + 相似性重新排序
  5. 响应生成器流式传输到 UI

这通过特定焦点模式处理器和可重用的智能体实现。

src/lib/search/index.ts 是最重要的产品地图文件之一。 它将焦点模式注册为 MetaSearchAgent 的实例,设置包括:

  • activeEngines(例如,学术使用 arxiv/scholar/pubmed;youtube 使用 youtube;reddit 使用 reddit)
  • rerank 和 rerankThreshold
  • searchWeb 对比不搜索网络(writingAssistant 设置 searchWeb: false)
  • summarizer(为 webSearch 启用)

src/lib/search/metaSearchAgent.ts 是编排器,它:

  • 构建搜索检索器链(温度为 0 的 LLM 用于查询生成)
  • 可以摄取直接链接输出(当启用 summarizer 时,获取并总结页面),按 URL 对文档进行分组,并使用结构化的系统提示将它们总结为 2-4 段
  • 使用 SearXNG 搜索(searchSearxng),然后使用相似性评分(computeSimilarity)重新排序/选择源

3. 服务器 API

由于 Perplexica 是一个 Next.js App Router 项目,端点位于 src/app/api/* 下。

/api/search(文档化的搜索 API),其 POST 主体包括:

  • focusMode、optimizationMode、query、history
  • chatModel 和 embeddingModel(提供商 + 模型名称)
  • 可选的 systemInstructions
  • 可选的 stream

示例代码片段 (src/app/api/search/route.ts):

import ModelRegistry from '@/lib/models/registry';
import { ModelWithProvider } from '@/lib/models/types';
import SessionManager from '@/lib/session';
import { ChatTurnMessage } from '@/lib/types';
import { SearchSources } from '@/lib/agents/search/types';
import APISearchAgent from '@/lib/agents/search/api';

interface ChatRequestBody {
  optimizationMode: 'speed' | 'balanced' | 'quality';
  sources: SearchSources[];
  chatModel: ModelWithProvider;
  embeddingModel: ModelWithProvider;
  query: string;
  history: Array<[string, string]>;
  stream?: boolean;
  systemInstructions?: string;
}

export const POST = async (req: Request) => {
  try {
    const body: ChatRequestBody = await req.json();
    if (!body.sources || !body.query) {
      return Response.json(
        { message: 'Missing sources or query' },
        { status: 400 },
      );
    }
    body.history = body.history || [];
    body.optimizationMode = body.optimizationMode || 'speed';
    body.stream = body.stream || false;
    const registry = new ModelRegistry();
    const [llm, embeddings] = await Promise.all([
      registry.loadChatModel(body.chatModel.providerId, body.chatModel.key),
      registry.loadEmbeddingModel(
        body.embeddingModel.providerId,
        body.embeddingModel.key,
      ),
    ]);
    const history: ChatTurnMessage[] = body.history.map((msg) => {
      return msg[0] === 'human'
        ? { role: 'user', content: msg[1] }
        : { role: 'assistant', content: msg[1] };
    });
    const session = SessionManager.createSession();
    const agent = new APISearchAgent();
    agent.searchAsync(session, {
      chatHistory: history,
      config: {
        embedding: embeddings,
        llm: llm,
        sources: body.sources,
        mode: body.optimizationMode,
        fileIds: [],
        systemInstructions: body.systemInstructions || '',
      },
      followUp: body.query,
      chatId: crypto.randomUUID(),
      messageId: crypto.randomUUID(),
    });
    // ... 后续处理逻辑
  } catch (err: any) {
    console.error(`Error in getting search results: ${err.message}`);
    return Response.json(
      { message: 'An error has occurred.' },
      { status: 500 },
    );
  }
};

src/app/api/chat/route.ts 是聊天运行时:

  • 接受 message、history、files、模型选择、焦点模式、优化模式、systemInstructions
  • 使用相同的 searchHandlers[focusMode].searchAndAnswer(...) 机制

流式传输的事件如:

  • { type: "message", data: "...", messageId }
  • { type: "sources", data: [...], messageId }
  • { type: "messageEnd", messageId }

它还通过 Drizzle 持久化聊天/消息(chats、messages 架构),并在存在时将源存储在消息元数据中。

你可能接触的其他 API 路由来自 src/app/api 文件夹列表:models、config、suggestions、images、videos、uploads、weather 等。

4. 模型提供商和选择

Perplexica 将模型抽象在提供商之后,路由处理器请求:

  • 可用的聊天模型提供商
  • 可用的嵌入模型提供商

提供商的配置密钥位于 config.toml(MODELS.*)中,并通过辅助函数如 getOpenaiApiKey()、getGroqApiKey() 等读取。

支持的提供商通过以下方式反映:

  • 配置模板(sample.config.toml)
  • 提供商目录列表(OpenAI、Ollama、Groq、Anthropic、Gemini、DeepSeek、LM Studio、自定义端点、AI/ML API、transformers)

这是非流式搜索的最小 API 使用示例:

curl -X POST http://localhost:3000/api/search \
  -H "Content-Type: application/json" \
  -d '{ "focusMode": "webSearch", "optimizationMode": "balanced", "query": "What is Perplexica?", "history": [], "stream": false }'

以及流式搜索:

curl -N -X POST http://localhost:3000/api/search \
  -H "Content-Type: application/json" \
  -d '{ "focusMode": "webSearch", "optimizationMode": "balanced", "query": "Explain how Perplexica reranks sources", "history": [], "stream": true }'

如果你正在构建搜索或深度研究智能体,一定要试试看。

目录

  1. Perplexica:Perplexity 的开源替代方案
  2. 核心功能
  3. 1. Perplexica 入门
  4. (1) Docker Compose
  5. 创建配置
  6. 使用所需的密钥/端点编辑 config.toml
  7. 打开 http://localhost:3000
  8. (2) 非 Docker
  9. 2. 架构和请求流程
  10. 3. 服务器 API
  11. 4. 模型提供商和选择
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++11 手写 Promise 实现及与 std::promise 对比
  • VRChat 实时翻译与转录工具 VRCT 使用指南
  • OpenClaw 集成百度网页搜索技能配置指南
  • Stable Diffusion 模型加载失败修复指南
  • Git 审计与合规最佳实践
  • Python 实现的 GitHub 热门项目 AI 分析 Agent
  • Python 人工智能开发指南:从基础编程到智能应用
  • GitHub Copilot 调用第三方模型API
  • Docker 快速部署 Nginx、Redis、MySQL、Tomcat 及制作镜像
  • 利用 AI 快速开发 Microsoft Visual C++ 应用
  • Qwen3-Embedding-4B 本地部署实战:llama.cpp 与 vLLM 方案
  • SBUS 协议详解:从原理、硬件接口到代码实现
  • 【CS创世SD NAND征文】为无人机打造可靠数据仓:工业级存储芯片CSNP32GCR01-AOW在飞控系统中的应用实践
  • Python 语法通俗详解:从入门到上手写代码
  • Function Calling:连接大模型与业务系统的自然语言接口机制
  • 云端多模型并行部署:Youtu-LLM 写作能力对比测试
  • Python 连接和操作 Elasticsearch 详细指南
  • MATLAB 与 Python 混合编程实战指南
  • Liferay 主题开发核心知识点与自定义路径配置
  • Python 数据容器详解:列表、元组、字符串、集合与字典

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online