明白了,你想做一篇关于 零成本搭建 RAG(Retrieval-Augmented Generation)智能客服 的实战教程,使用 Ollama + Milvus + DeepSeek。我可以帮你整理一份完整的方案和操作步骤,包括环境搭建、数据导入、向量检索以及与 Ollama 的集成。下面是详细实战指南:


零成本搭建 RAG 智能客服:Ollama + Milvus + DeepSeek 全程实战

目录

  1. RAG 智能客服简介
  2. 工具选型与优势
  3. 环境准备
  4. 数据收集与处理
  5. Milvus 向量数据库搭建
  6. DeepSeek 文档向量化
  7. Ollama 模型集成与问答
  8. 测试与优化
  9. 总结

1️⃣ RAG 智能客服简介

RAG(Retrieval-Augmented Generation)是一种结合 检索生成 的智能问答方法。

  • 检索(Retrieval):根据用户问题从知识库中找到相关文档片段
  • 生成(Generation):利用 LLM(大语言模型)生成自然语言回答

优势:

  • 回答更精准,可引用知识库内容
  • 可轻松处理长文档或企业内部文档
  • 可用开源工具实现零成本部署

2️⃣ 工具选型与优势

工具功能优势
Ollama本地运行 LLM 模型零成本,本地隐私,支持多种大型语言模型
Milvus向量数据库高性能向量检索,支持海量文档
DeepSeek文档向量化支持 PDF/Word/网页等多种格式,自动切分文档

💡 本方案核心思路:

文档 → DeepSeek 向量化 → 存入 Milvus → Ollama + Milvus 实现 RAG 问答


3️⃣ 环境准备

  1. 操作系统:Mac / Linux / Windows
  2. 安装依赖
# Python 3.10+
pip install pymilvus deepseek

  1. Milvus 部署
# Docker 部署 Milvus
docker run -d --name milvus \
  -p 19530:19530 -p 9091:9091 \
  milvusdb/milvus:latest

  1. Ollama 安装
ollama list   # 查看可用模型


4️⃣ 数据收集与处理

  1. 收集 FAQ、产品手册、文档、网页等
  2. 文档格式统一:PDF、TXT、Word
  3. 文档清洗:
    • 去掉无用符号
    • 按章节或段落切分,方便向量化

5️⃣ Milvus 向量数据库搭建

  1. 创建集合(Collection)
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

connections.connect("default", host="127.0.0.1", port="19530")

fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=65535)
]

schema = CollectionSchema(fields, "RAG知识库")
collection = Collection("faq_collection", schema)

  1. 索引向量
from pymilvus import Index
index_params = {"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 128}}
collection.create_index("embedding", index_params)
collection.load()


6️⃣ DeepSeek 文档向量化

from deepseek import DeepSeek

ds = DeepSeek(model="text-embedding-3-small")  # 免费向量模型
docs = ["这是文档1内容", "这是文档2内容"]

embeddings = ds.embed(docs)  # 返回向量列表

# 插入 Milvus
collection.insert([
    [i for i in range(len(docs))],  # id
    embeddings,                     # embedding
    docs                             # 原文
])


7️⃣ Ollama 模型集成与问答

  1. 连接 Ollama 本地模型
from ollama import Ollama

ollama = Ollama(model="llama2-7b")  # 本地模型

  1. 实现 RAG 问答逻辑
def rag_query(question):
    # 1. 将问题向量化
    q_emb = ds.embed([question])[0]
    
    # 2. Milvus 检索
    results = collection.search([q_emb], "embedding", param={"metric_type":"L2","limit":3})
    contexts = [res.entity.get("content") for res in results[0]]
    
    # 3. 拼接上下文给 Ollama
    prompt = f"根据以下内容回答用户问题:\n{contexts}\n问题:{question}"
    answer = ollama.chat(prompt)
    return answer

# 测试
print(rag_query("产品如何退款?"))


8️⃣ 测试与优化

  • 增加文档数量 → Milvus检索效果更佳
  • 调整向量模型维度、检索参数
  • Ollama 模型可替换为更大或更精细的 LLM

9️⃣ 总结

✅ 完整零成本 RAG 智能客服搭建流程:

  1. 文档收集与清洗
  2. DeepSeek 向量化
  3. Milvus 存储与检索
  4. Ollama 生成答案

优势:

  • 本地运行,数据安全
  • 免费或低成本方案
  • 高扩展性,可支持企业级知识库