首页博客实战笔记不用 Python:纯 PHP + MySQL 搭一套 AI 语义搜索(RAG)
实战笔记

不用 Python:纯 PHP + MySQL 搭一套 AI 语义搜索(RAG)

📅 2026年7月7日 ✏️ xiaoheiyun 🕐 1 分钟阅读

一提”AI 搜索 / RAG”,大多数教程立刻上 Python + 向量数据库(Pinecone、Milvus)。

但如果你就是个 PHP 站(WordPress、Laravel),为了一个搜索功能单独起一套 Python 服务 + 向量库,太重了。几千到几万条数据的规模,纯 PHP + MySQL 就够,还省掉一整套运维。这篇讲怎么搭。

我给自己的 AI 工具站做语义搜索时,就是这么干的——没有 Python、没有独立向量库,全在现有的 PHP + MySQL 里搞定。下面把这套架构和关键决策拆给你。

一、先一句话讲清 RAG 是什么

RAG = 检索增强生成(Retrieval-Augmented Generation):先从你的知识库里”检索”出最相关的几条,再把它们连同问题一起喂给大模型,让它”生成”答案。核心就两步:检索 + 生成

为什么需要它?因为大模型不知道你站里的私有数据(你的工具库、你的文章)。RAG 就是给它”现查资料、再回答”的能力——答案基于你的数据,而不是它凭空编。

用户问题 “能做 X 的工具” 检索 从知识库找 top-k 最相关的几条 生成 问题 + 资料 喂给大模型 带依据的答案 基于你的数据 知识库(你的工具 / 文章) 现查资料
图1:RAG 的核心就两步——先检索、再生成

二、为什么纯 PHP + MySQL 就够(破”必须上向量库”的迷信)

向量数据库(Pinecone、Milvus)解决的是“百万、千万级向量的毫秒检索”。但你先问自己:你有那么多数据吗?

如果你就几千到几万条,做法极简单:把库里每条向量拿出来,跟问题向量挨个算一遍余弦相似度,排序取前几名。几千条这么算,几十到一两百毫秒就出来了,再加个 Redis 缓存更快。用户根本感觉不到。

这样能省掉:一套 Python 服务、一个向量数据库、以及它们的部署和运维。对一个 PHP 站,这是巨大的简化。判断标准很简单:

  • 数据量 < ~10 万条 + 不追求极致高并发 → 纯 PHP / MySQL 完全够,别过度工程。
  • 数据到几十万、上百万,或要求高 QPS 低延迟 → 那时再上 Milvus / pgvector 也不迟。

三、四块拼图

整套东西拆开就四块,每块都不复杂:

数据源 工具 · 文章 · 场景 向量库 · MySQL embedding LONGBLOB 相关文档 top-k 答案 带依据 ① Embedding BGE-M3 ② 检索 余弦相似度 ③ 生成 DeepSeek 用户问题(也求 embedding)
图2:四块拼图——数据入库、问题进来、检索、生成
  1. Embedding(把文本变成向量)。调一个 embedding 接口(我用硅基流动的 BGE-M3,国内稳、跟 DeepSeek 同一个 key),把每条数据的文本变成一串浮点数(向量)。相似的内容,向量也相近。
  2. 索引(建库)。遍历你的数据(工具、文章、场景),把每条合成一段描述文本 → 求 embedding → 存进一张 MySQL 表:内容 id、类型、embedding、元数据。
  3. 检索(查)。用户问题也求 embedding → 跟库里每条算余弦相似度 → 取最相似的 top-k。
  4. 生成(答)。把 top-k 的原文 + 用户问题,拼成一段 prompt,喂给 DeepSeek 这类 chat 模型,生成最终答案。

四、关键决策 & 坑

  1. embedding 存 LONGBLOB,别存 JSON 文本。把浮点数组 pack() 成二进制存进 LONGBLOB,读的时候 unpack()。比存 JSON 字符串省一大半空间、读取也快。
  2. 余弦相似度就在 PHP 里算。一个循环:点积 ÷(两个向量的模长相乘)。几千条无压力。把查询结果丢进 Redis 缓存,重复查询直接命中。
  3. 换 embedding 模型 = 必须重建索引。不同模型产出的向量不通用,混着用检索就是乱的。表里存一个 embedding_model 字段,换模型时按它筛出旧的重建,不用删表
  4. 加一层关键词做”混合检索”。纯向量偶尔会漏掉”精确匹配”的场景(比如用户搜一个具体工具名)。向量召回 + 关键词召回一起上,结果更稳。
  5. LLM 调用要限流。embedding 和 chat 都按量计费。按用户 / 套餐限次(我这免费 5 次/天、Pro 100 次/天),别让人(或爬虫)刷爆你的账单。
  6. 开发期别写循环狂打第三方 API。embedding / LLM 都花钱,调试用少量样本,别一个 for 把额度烧光——这个坑我提醒过自己好几次。

五、什么时候该上”真正的”向量库

不是永远不上,是别一开始就上。信号很清楚:

  • 数据涨到几十万、上百万条;
  • 或者搜索要扛高并发、要求极低延迟。

到那一步,再迁到 Milvus / pgvector 也不迟——而且到那时你已经验证过”这个搜索真有人用”,扩容才值得。在那之前,纯 PHP + MySQL 是性价比最高的起点:先把功能跑起来、看有没有人用,再谈扩容。


很多人卡在”AI 搜索”这四个字上,以为非得会 Python、会向量库才能碰。其实原理就”检索 + 生成”两步,几千条数据用你手上的 PHP + MySQL 就能跑起来。先用最轻的方式把它做出来、验证价值,比一上来堆一套重工程重要得多。

如果你想给自己的站 / 产品加一套 AI 语义搜索或问答,又不想为它单独养一套 Python + 向量库——可以找我聊。这套”纯 PHP/MySQL 的轻量 RAG”,我正在自己的工具站上落地。

x
xiaoheiyun
NavXD 内容团队成员

获取更多 AI 工具洞察

订阅 NavXD Pro,每月获取完整趋势报告、深度分析和独家数据

了解 Pro →