Py学习  »  Git

Github22.8Kstar,一款可以部署完全属于你的问答引擎!

编程技术进阶 • 3 周前 • 33 次点击  

点击上方卡片关注我

设置星标 学习更多项目

在 AI 驱动的搜索引擎赛道中,Perplexica 以「开源 + 隐私 + 场景化」形成差异化竞争力。其核心设计理念源自对 Perplexity AI 的工程化重构,通过 SearxNG 元搜索框架与本地大模型集成,实现「实时检索 + 语义理解」的双轮驱动。

项目采用 Next.js 构建前端界面,Drizzle ORM 管理数据库迁移,整体架构遵循「模块化可插拔」原则,开发者可轻松替换 LLM 引擎。

Perplexica 在技术选型上的平衡策略:既利用 SearxNG 的开源生态保证搜索结果的实时性,又通过 LLM 的语义解析能力提升答案质量,避免了传统向量数据库方案中「索引滞后」的痛点。这种「轻量级索引 + 实时检索」的架构,在保证性能的同时降低了部署门槛。

图片

核心技术

1. 多模态检索引擎架构

  • 输入层支持自然语言query、图片/视频搜索(通过前端upload组件实现),前端使用Tailwind CSS实现响应式布局,在移动设备上自动优化搜索框交互逻辑(参考src/components/SearchBar.tsx源码)。

  • 处理层核心逻辑位于src/services/search.ts,先通过SearxNG获取原始搜索结果,再利用LLM进行二次处理。以学术搜索模式为例,会额外调用Semantic Scholar API进行文献筛选,代码中通过Axios封装了跨域请求处理。

  • 输出层答案格式化模块(src/utils/formatAnswer.ts)支持Markdown解析与富文本转换,特别针对代码块、公式等场景做了语法高亮优化。

2. 本地LLM集成方案

  • 网络穿透方案Docker环境下通过host.docker.internal域名实现容器间通信,Linux系统需修改Ollama服务配置(添加Environment="OLLAMA_HOST=0.0.0.0"),这一步解决了90%的连接报错问题。

  • 模型切换逻辑在config.toml中配置OLLAMA_URL后,前端会通过fetch调用/api/llm/switch接口,服务端利用 zod 进行参数校验,避免非法请求导致的容器崩溃。

3. 数据库迁移机制

Drizzle模块(drizzle文件夹)采用「声明式模式」管理数据库变更:

// drizzle/schema.ts示例
export const users = table("users", {
  id: serial("id").primaryKey(),
  email: varchar("email", { length: 255 }).notNull().unique(),
  createdAt: timestamp("createdAt").defaultNow(),
});

这种TS类型安全的设计,配合entrypoint.sh中的migrate-on-start脚本,实现了容器启动时的自动 schema 同步,避免了手动管理数据库版本的麻烦。

生产环境部署

1. Docker Compose优化配置

推荐在docker-compose.yaml中添加资源限制:

services:
  perplexica:
    build:
      context:.
      dockerfile:app.dockerfile
    ports:
      -"3000:3000"
    volumes:
      -./data:/app/data# 持久化存储上传文件
    deploy:
      resources:
        limits:
          memory:2G
          cpus:"1"

该配置通过数据卷持久化上传文件,同时限制容器资源占用,在4核8G的VPS上可稳定支持50+并发请求。

2. 安全加固要点

  • API密钥管理生产环境需将config.toml替换为环境变量注入,避免密钥泄露(参考next.config.mjs中的process.env处理)。

  • CORS配置在next.config.mjs中添加白名单:

// 仅允许指定域名访问API
const securityHeaders = [
  {
    key"Access-Control-Allow-Origin",
    value"https://your-domain.com",
  },
];

3. 常见故障排查

  1. 执行docker logs perplexica查看容器日志,确认是否有网络超时错误

  2. 在主机浏览器访问http://localhost:11434/api/tags ,验证Ollama服务是否正常

  3. 检查iptables规则,确保11434端口未被防火墙阻断

开发者生态与二次开发

1. 插件系统扩展点

Perplexica预留了三个主要扩展接口:

  • 模型提供器src/providers/llm文件夹下,可新增如Claude、Gemini等模型的适配器
  • 搜索模式src/modes文件夹中,通过实现SearchMode接口添加自定义搜索场景(例如Stack Overflow搜索)
  • 数据源src/data-sources文件夹支持接入私有知识库,某高校团队已基于此实现内部文献检索系统

2. API集成案例

以下是Node.js中调用Perplexica API的示例代码:

const fetch = require("node-fetch");

asyncfunction searchWithPerplexica (query{
const response = await fetch("http://localhost:3000/api/search", {
    method"POST",
    headers: {
      "Content-Type""application/json",
    },
    bodyJSON.stringify({
      query,
      mode"academic"// 学术搜索模式
      model"llama3",   // 指定本地模型
    }),
  });

const data = await response.json();
return {
    answer: data.answer,
    sources: data.sources.map(s => s.url),
  };
}

该接口支持自定义模型、搜索模式及结果格式,某知识管理工具已通过此API实现「选中文字一键生成学术综述」的功能。

总结

Perplexica 是极具技术价值的开源 AI 搜索引擎,其基于 SearxNG 元搜索与 LLM 构建,在架构设计上实现 “实时检索 + 语义理解” 双驱动,核心模块涵盖多模态检索、本地 LLM 集成、数据库迁移等。支持 Docker 便捷部署,提供安全加固方案,还具备插件扩展与 API 集成能力,在实际场景中已展现提效价值。

Github项目库:https://github.com/ItzCrazyKns/Perplexica

AI时代,我们还为大家准备了Deepseek资料库,长按扫码发送 312 即可获取。

图片

往期推荐

Github 8.3K star,一款让你的桌面颜值和效率直接拉满的神器!

Github 7.1K star,一款用Vue.js重新定义PPT制作的开源应用

Github 11.2K,这款开源工具用 AI 实现文档 OCR 自动化,支持 30 + 格式!

Github 10.1K star,打破Web自动化的天花板,小白也能成为自动化测试大神!

Github 21k star,这个JS组件让你的数据表格秒杀Excel!

Github 99.5K star,这款开源工具让团队协作爽到飞起,手绘风格绝了!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183930
 
33 次点击