上一篇 下一篇 分享链接 返回 返回顶部

AI 搜索管“找答案”,Kubernetes 管“跑得稳”:从 RAG 到 K8s 部署实战(附源码)

发布人:慈云数据-客服中心 发布时间:20小时前 阅读量:4

AI搜索 和 Kubernetes 对比|附源码

近两年,AI 搜索(AI Search / RAG Search / LLM Search)逐渐成为企业知识库、智能客服、开发者助手、行业检索平台的核心能力;而 Kubernetes 作为云原生时代的基础设施调度平台,已经成为容器编排的事实标准。

表面上看,AI 搜索和 Kubernetes 并不是同一类技术:前者更偏向“智能应用层”,后者更偏向“基础设施层”。但在真实工程实践中,AI 搜索系统往往需要部署在 Kubernetes 之上,并依赖 Kubernetes 提供弹性扩缩容、服务发现、滚动发布、资源隔离等能力。

本文将从概念、架构、核心能力、工程落地、适用场景以及源码示例等角度,对 AI 搜索 和 Kubernetes 进行系统对比。


一、什么是 AI 搜索?

AI 搜索并不是传统意义上的关键词搜索,而是结合了 大语言模型、向量数据库、语义检索、重排序、知识库问答 等技术的新一代搜索方案。

传统搜索通常依赖倒排索引,例如用户搜索“如何部署 Kubernetes”,系统会匹配包含“部署”“Kubernetes”等关键词的文档。

而 AI 搜索更关注语义理解。例如用户输入:

K8s 应用怎么灰度发布?

即使知识库中没有完全相同的关键词,只要存在“金丝雀发布”“滚动更新”“流量切分”等相关内容,AI 搜索也可以通过语义向量匹配找到相关文档,并结合大模型生成自然语言答案。

一个典型的 AI 搜索流程如下:

  1. 用户输入问题;
  2. 对问题进行向量化;
  3. 在向量数据库中检索相似文档;
  4. 对候选文档进行重排序;
  5. 将文档片段和问题一起交给大语言模型;
  6. 大模型生成最终答案;
  7. 返回答案及引用来源。

这种架构也常被称为 RAG:Retrieval-Augmented Generation,检索增强生成


二、什么是 Kubernetes?

Kubernetes,简称 K8s,是一个用于自动化部署、扩展和管理容器化应用的平台。

如果说 Docker 解决了“如何把应用打包成容器”的问题,那么 Kubernetes 解决的是:

  • 容器如何部署到多台机器?
  • 应用挂了如何自动恢复?
  • 如何实现弹性扩缩容?
  • 如何做滚动升级?
  • 如何做服务发现和负载均衡?
  • 如何管理配置、密钥、存储和网络?

Kubernetes 的核心对象包括:

对象 说明
Pod Kubernetes 中最小的调度单元
Deployment 管理无状态应用的部署和升级
Service 提供稳定访问入口和负载均衡
ConfigMap 管理非敏感配置
Secret 管理敏感配置
Ingress 暴露 HTTP/HTTPS 服务
StatefulSet 管理有状态服务
HPA 根据指标自动水平扩缩容

Kubernetes 本质上是一个 分布式系统调度平台,它不直接解决业务问题,但为业务系统提供可靠运行环境。


三、AI 搜索 和 Kubernetes 的定位对比

AI 搜索与 Kubernetes 最大的区别在于它们所处的层级不同。

对比维度 AI 搜索 Kubernetes
技术定位 智能应用能力 基础设施平台
核心目标 让用户更快获得准确答案 让应用稳定、高效运行
主要用户 业务用户、开发者、知识库使用者 运维、平台工程师、后端开发
关键技术 LLM、Embedding、向量数据库、RAG 容器编排、调度、服务发现、弹性伸缩
输入 用户问题、文档、知识库 镜像、配置、资源规格
输出 答案、摘要、引用来源 可运行的服务、Pod、Service
关注点 语义理解、答案质量、召回率 高可用、扩缩容、资源利用率
典型产品 智能客服、知识库问答、AI 助手 容器平台、云原生平台、PaaS

简单来说:

AI 搜索解决“用户如何更智能地获取信息”的问题;
Kubernetes 解决“应用如何更可靠地运行”的问题。


四、AI 搜索的核心架构

一个生产级 AI 搜索系统通常包含以下模块:

用户
 │
 ▼
Web/API 网关
 │
 ▼
查询理解模块
 │
 ├── 问题改写
 ├── 意图识别
 └── 多轮上下文处理
 │
 ▼
Embedding 向量化
 │
 ▼
向量数据库
 │
 ▼
TopK 文档召回
 │
 ▼
重排序模型
 │
 ▼
Prompt 组装
 │
 ▼
大语言模型
 │
 ▼
答案生成 + 引用来源

其中最重要的几个组件是:

1. Embedding 模型

Embedding 模型负责将文本转换成向量。例如:

“Kubernetes 如何扩容?”

会被转换成类似下面的高维向量:

[0.021, -0.105, 0.337, ..., 0.009]

向量之间的距离可以表示语义相似度。

2. 向量数据库

向量数据库用于存储文档向量,并支持相似度检索。常见选择包括:

  • Milvus
  • Qdrant
  • Weaviate
  • Elasticsearch Vector Search
  • PostgreSQL + pgvector
  • FAISS

3. RAG 生成

RAG 的核心思想是:
不要让大模型凭空回答,而是先检索知识,再基于知识回答。

这样可以减少幻觉,提高答案准确性。


五、Kubernetes 的核心架构

Kubernetes 的架构通常分为控制平面和工作节点。

                  Kubernetes Control Plane
 ┌────────────────────────────────────────────┐
 │ API Server                                 │
 │ Scheduler                                  │
 │ Controller Manager                         │
 │ etcd                                       │
 └────────────────────────────────────────────┘
                 │
                 ▼
 ┌────────────────────┐      ┌────────────────────┐
 │ Worker Node         │      │ Worker Node         │
 │ ┌────────────────┐ │      │ ┌────────────────┐ │
 │ │ kubelet         │ │      │ │ kubelet         │ │
 │ │ containerd      │ │      │ │ containerd      │ │
 │ │ Pod             │ │      │ │ Pod             │ │
 │ └────────────────┘ │      │ └────────────────┘ │
 └────────────────────┘      └────────────────────┘

1. API Server

API Server 是 Kubernetes 的统一入口。所有资源的创建、更新、删除都需要通过 API Server。

2. etcd

etcd 是 Kubernetes 的分布式键值存储,用于保存集群状态。

3. Scheduler

Scheduler 负责决定 Pod 应该运行在哪个节点上。

4. Controller Manager

Controller Manager 负责不断观察集群状态,并让实际状态向期望状态靠近。

5. kubelet

kubelet 运行在每个节点上,负责管理本机 Pod 的生命周期。


六、从工程视角看二者关系

虽然 AI 搜索和 Kubernetes 属于不同层级,但二者在企业实践中经常会结合出现。

例如一个企业要构建内部知识库 AI 搜索系统,可能会包含以下服务:

  • 前端 Web 页面;
  • 后端 API 服务;
  • 文档解析服务;
  • Embedding 服务;
  • 向量数据库;
  • Redis 缓存;
  • LLM 网关;
  • 异步任务队列;
  • 日志监控系统。

这些服务如果全部手动部署在服务器上,会遇到很多问题:

  • 服务挂掉后如何自动拉起?
  • 流量变大后如何扩容?
  • 配置如何统一管理?
  • 多个环境如何隔离?
  • 如何灰度发布新版本?
  • 如何观察服务是否健康?
  • 如何限制 GPU/CPU/内存资源?

这时 Kubernetes 的价值就体现出来了。

AI 搜索负责“智能能力”,Kubernetes 负责“运行平台”。

一个成熟架构通常是:

用户访问
  │
Ingress / API Gateway
  │
AI Search Backend
  │
├── Embedding Service
├── Vector Database
├── LLM Gateway
├── Redis
├── PostgreSQL
└── Worker Queue

底层由 Kubernetes 提供:
├── Deployment
├── Service
├── ConfigMap
├── Secret
├── HPA
├── PVC
└── Observability

七、AI 搜索的优点与局限

优点

1. 搜索体验更自然

用户不需要输入精准关键词,可以直接使用自然语言提问。

例如:

公司报销流程里,差旅补贴怎么算?

AI 搜索可以理解“报销”“差旅”“补贴”的关联关系,并找到制度文档中的相关片段。

2. 能生成综合答案

传统搜索返回的是网页或文档列表,而 AI 搜索可以整合多个文档片段,生成一个结构化答案。

3. 适合知识密集型场景

AI 搜索非常适合:

  • 企业内部知识库;
  • 技术文档问答;
  • 法律法规查询;
  • 医疗知识辅助;
  • 金融研报检索;
  • 客服机器人;
  • 代码搜索与解释。

局限

1. 成本较高

AI 搜索需要调用 Embedding 模型、大语言模型、向量数据库,计算成本明显高于普通关键词搜索。

2. 可能出现幻觉

如果召回文档不准确,或者 Prompt 设计不合理,大模型可能生成不真实的答案。

3. 数据治理要求高

文档切分、清洗、去重、权限控制、版本管理都会直接影响搜索质量。


八、Kubernetes 的优点与局限

优点

1. 高可用和自动恢复

当某个 Pod 异常退出时,Kubernetes 可以自动重新拉起实例。

2. 弹性扩缩容

结合 HPA,可以根据 CPU、内存或自定义指标自动扩容。

3. 标准化部署

通过 YAML 声明式配置,应用部署过程可重复、可审计、可版本化。

4. 云厂商无关

Kubernetes 可以运行在公有云、私有云、本地机房,具备较好的可移植性。

局限

1. 学习成本高

Kubernetes 涉及网络、存储、调度、安全、监控等多个领域,对新手并不友好。

2. 运维复杂度高

集群升级、证书管理、网络插件、存储插件、监控告警都需要专业能力。

3. 不适合所有团队

如果只是一个很小的单体应用,直接使用云服务器或 PaaS 平台可能更简单。


九、源码示例:用 Python 实现一个简单 AI 搜索

下面给出一个简化版 AI 搜索示例。为了便于理解,这里不依赖真实大模型 API,而是用 sentence-transformers 生成向量,用 numpy 做相似度检索。

1. 安装依赖

pip install sentence-transformers numpy

2. AI 搜索源码

# ai_search_demo.py

import numpy as np
from sentence_transformers import SentenceTransformer


class SimpleAISearch:
    def __init__(self, documents):
        self.documents = documents
        self.model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
        self.doc_embeddings = self.model.encode(documents, normalize_embeddings=True)

    def search(self, query, top_k=3):
        query_embedding = self.model.encode([query], normalize_embeddings=True)[0]
        scores = np.dot(self.doc_embeddings, query_embedding)

        ranked_indices = np.argsort(scores)[::-1][:top_k]

        results = []
        for index in ranked_indices:
            results.append({
                "score": float(scores[index]),
                "document": self.documents[index]
            })

        return results


if __name__ == "__main__":
    docs = [
        "Kubernetes 是一个用于自动化部署、扩展和管理容器化应用的平台。",
        "Deployment 可以声明应用副本数,并支持滚动更新和回滚。",
        "Service 为一组 Pod 提供稳定访问入口,并实现负载均衡。",
        "AI 搜索通常结合向量数据库、大语言模型和 RAG 技术。",
        "Embedding 模型可以将文本转换为向量,用于语义相似度检索。",
        "HPA 可以根据 CPU 或自定义指标自动扩缩容 Pod。"
    ]

    engine = SimpleAISearch(docs)

    query = "K8s 怎么自动扩容应用?"
    results = engine.search(query)

    print(f"用户问题:{query}")
    print("搜索结果:")

    for item in results:
        print(f"分数:{item['score']:.4f},内容:{item['document']}")

运行后可能输出类似:

用户问题:K8s 怎么自动扩容应用?
搜索结果:
分数:0.8123,内容:HPA 可以根据 CPU 或自定义指标自动扩缩容 Pod。
分数:0.7358,内容:Kubernetes 是一个用于自动化部署、扩展和管理容器化应用的平台。
分数:0.6981,内容:Deployment 可以声明应用副本数,并支持滚动更新和回滚。

这个示例虽然简单,但已经体现了 AI 搜索的核心思想:
不是简单匹配关键词,而是基于语义相似度检索。


十、源码示例:将 AI 搜索服务部署到 Kubernetes

接下来,我们把一个简单的 AI 搜索 API 服务部署到 Kubernetes。

1. FastAPI 服务源码

# main.py

from fastapi import FastAPI
from pydantic import BaseModel
import numpy as np
from sentence_transformers import SentenceTransformer

app = FastAPI(title="AI Search Demo")

documents = [
    "Kubernetes 用于自动化部署、扩展和管理容器化应用。",
    "AI 搜索通过 Embedding、向量数据库和大语言模型提升搜索体验。",
    "Deployment 支持滚动更新和副本管理。",
    "Service 可以为 Pod 提供稳定访问地址。",
    "RAG 是检索增强生成,可以降低大模型幻觉。",
    "HPA 可以根据指标自动扩容或缩容。"
]

model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
doc_embeddings = model.encode(documents, normalize_embeddings=True)


class SearchRequest(BaseModel):
    query: str
    top_k: int = 3


@app.get("/health")
def health():
    return {"status": "ok"}


@app.post("/search")
def search(req: SearchRequest):
    query_embedding = model.encode([req.query], normalize_embeddings=True)[0]
    scores = np.dot(doc_embeddings, query_embedding)
    ranked_indices = np.argsort(scores)[::-1][:req.top_k]

    results = []
    for idx in ranked_indices:
        results.append({
            "score": float(scores[idx]),
            "document": documents[idx]
        })

    return {
        "query": req.query,
        "results": results
    }

2. requirements.txt

fastapi==0.115.0
uvicorn==0.30.6
sentence-transformers==3.0.1
numpy==1.26.4

3. Dockerfile

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY main.py .

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

4. 构建镜像

docker build -t ai-search-demo:1.0.0 .

如果使用远程镜像仓库,例如 Docker Hub:

docker tag ai-search-demo:1.0.0 yourname/ai-search-demo:1.0.0
docker push yourname/ai-search-demo:1.0.0

十一、Kubernetes 部署 YAML

1. Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ai-search-demo
  labels:
    app: ai-search-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ai-search-demo
  template:
    metadata:
      labels:
        app: ai-search-demo
    spec:
      containers:
        - name: ai-search-demo
          image: yourname/ai-search-demo:1.0.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8000
          resources:
            requests:
              cpu: "500m"
              memory: "1Gi"
            limits:
              cpu: "2"
              memory: "2Gi"
          readinessProbe:
            httpGet:
              path: /health
              port: 8000
            initialDelaySeconds: 20
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health
              port: 8000
            initialDelaySeconds: 30
            periodSeconds: 15

2. Service

apiVersion: v1
kind: Service
metadata:
  name: ai-search-demo-service
spec:
  selector:
    app: ai-search-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8000
  type: ClusterIP

3. HPA 自动扩缩容

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: ai-search-demo-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: ai-search-demo
  minReplicas: 2
  maxReplicas: 8
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

4. 应用部署

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f hpa.yaml

查看状态:

kubectl get pods
kubectl get svc
kubectl get hpa

测试接口:

kubectl port-forward svc/ai-search-demo-service 8080:80

然后请求:

curl -X POST http://localhost:8080/search \
  -H "Content-Type: application/json" \
  -d '{"query":"Kubernetes 如何自动扩容?","top_k":3}'

十二、AI 搜索部署到 Kubernetes 时的注意事项

1. 模型加载时间较长

AI 搜索服务通常需要加载 Embedding 模型或大模型客户端,启动时间可能较长。因此需要合理设置:

  • initialDelaySeconds
  • readinessProbe
  • livenessProbe
  • 资源 requests/limits

如果探针设置太激进,Pod 可能还没启动完成就被 Kubernetes 杀掉。

2. 内存占用较高

Embedding 模型会占用较多内存,尤其是多语言模型或大参数模型。生产环境需要进行压测,并合理设置内存限制。

3. 向量数据库最好独立部署

示例代码中向量数据放在内存里,只适合演示。真实生产环境应使用 Milvus、Qdrant、Elasticsearch、pgvector 等外部服务。

4. 注意冷启动问题

如果 HPA 把副本缩到很少,突然流量上来时,新 Pod 启动需要加载模型,可能导致请求延迟升高。可以设置较高的 minReplicas,或者预热模型。

5. GPU 调度

如果需要部署本地大模型或重排序模型,可能需要 GPU。此时 Kubernetes 需要安装对应的 GPU Device Plugin,例如 NVIDIA Device Plugin。


十三、如何选择:AI 搜索还是 Kubernetes?

这个问题本身并不是二选一,因为二者解决的问题完全不同。

如果你的目标是:

  • 构建智能知识库;
  • 提升搜索体验;
  • 实现自然语言问答;
  • 让用户基于文档得到答案;

那么你需要的是 AI 搜索

如果你的目标是:

  • 管理多个微服务;
  • 实现自动扩缩容;
  • 提升系统稳定性;
  • 支持灰度发布和滚动升级;
  • 统一管理容器化应用;

那么你需要的是 Kubernetes

如果你要构建一个面向生产的 AI 搜索平台,那么通常两者都需要:

AI 搜索 = 智能检索与问答能力
Kubernetes = 稳定运行与弹性调度能力

十四、总结

AI 搜索和 Kubernetes 看似不在同一赛道,但在现代软件工程中,它们经常出现在同一个系统里。

AI 搜索解决的是上层业务价值问题:
如何让用户更高效、更自然地获取知识。

Kubernetes 解决的是底层工程保障问题:
如何让系统稳定、弹性、可持续地运行。

从架构角度看,AI 搜索依赖模型、向量数据库、RAG 流程和 Prompt 工程;Kubernetes 依赖容器、调度器、控制器、服务发现和声明式资源管理。

从落地角度看,AI 搜索的难点在于数据质量、召回效果、模型成本和答案可信度;Kubernetes 的难点在于集群运维、资源治理、网络存储和可观测性。

最终可以用一句话概括:

AI 搜索决定系统“聪不聪明”,Kubernetes 决定系统“稳不稳定”。

如果只是做一个原型,可以先从简单的 Python AI 搜索服务开始;如果要进入生产环境,则建议将服务容器化,并使用 Kubernetes 管理部署、扩缩容、探针检查、配置和资源隔离。这样既能保证 AI 搜索能力的持续迭代,也能保证系统在高并发和复杂环境下稳定运行。

目录结构
全文