🎯 课程主题
项目"尚硅谷 Assistant 客服知识库"的第一、第二阶段:全局配置常量定义与 Milvus 向量数据库的初始化(含客户端、数据库、Collection 的创建与管理),为后续文档写入和检索打好基础。
📝 核心知识点
项目全局架构:本案例整合了 RAG 核心生命周期的所有环节——文档加载 → 切分 → 向量化 → 存储 → 检索 → Agent 回答,共 8 个阶段。
全局配置常量:
MILVUS_URI:Milvus 服务地址(本地http://localhost:19530)DB_NAME:数据库名称COLLECTION_NAME:Collection 名称(类比关系型数据库中的表)DATA_FILE:知识库文件路径EMBED_MODEL_NAME:嵌入模型名称(维度 1024)
Milvus 客户端初始化:通过
MilvusClient(uri=...)创建客户端对象,后续所有数据库操作均基于此 client 进行。数据库管理:
client.list_databases()列出已有数据库- 若目标数据库不存在,调用
client.create_database()创建 - 使用
client.use_database(db_name)切换到指定数据库(类比 SQL 的USE database)
Collection 管理:
client.has_collection()判断 Collection 是否存在- 若已存在,为避免冲突需先
client.drop_collection()删除 client.create_collection()创建新 Collection,关键参数:collection_name、dimension(向量维度,1024)、metric_type(相似度度量,"COSINE")
🏗️ 架构与工作流
[阶段1] 全局配置: 定义 URL / DB名 / Collection名 / 文件路径 / 嵌入模型
↓
[阶段2] 初始化Milvus:
MilvusClient(uri) → list_databases() → 不存在则 create_database() →
use_database() → has_collection() → 存在则 drop_collection() →
create_collection(name, dimension=1024, metric_type="COSINE")
💻 代码实战
# ============ 阶段1: 全局配置 ============
MILVUS_URI = "http://localhost:19530"
DB_NAME = "atguigu_assistant"
COLLECTION_NAME = "knowledge_base"
DATA_FILE = "./knowledge.txt"
EMBED_MODEL_NAME = "text-embedding-3-large"
EMBED_DIMENSION = 1024
# ============ 阶段2: 初始化 Milvus ============
from pymilvus import MilvusClient
# 2.1 创建客户端
client = MilvusClient(uri=MILVUS_URI)
# 2.2 查询已有数据库,若不存在则创建
existed_databases = client.list_databases()
if DB_NAME not in existed_databases:
client.create_database(db_name=DB_NAME)
# 2.3 切换到目标数据库
client.use_database(db_name=DB_NAME)
# 2.4 检查并处理 Collection
if client.has_collection(collection_name=COLLECTION_NAME):
# 已存在则删除,避免冲突
client.drop_collection(collection_name=COLLECTION_NAME)
# 2.5 创建 Collection
client.create_collection(
collection_name=COLLECTION_NAME,
dimension=EMBED_DIMENSION,
metric_type="COSINE"
)
⚠️ 常见问题与避坑指南
create_database参数名:部分版本需要显式使用db_name=关键字参数,直接传字符串可能报missing parameter错误。重复运行时的 Collection 冲突:每次运行前通过
has_collection()检查,若存在则drop掉再重新创建,保证实验环境干净可复现。生产环境需谨慎对待 drop 操作。metric_type与后续检索一致性:创建 Collection 时指定的metric_type="COSINE"与后续search()返回的distance值语义一致,cosine 相似度值域为 [-1, 1],越接近 1 越相似。
💡 个人总结与延伸
本节是项目的"地基"工程——全局配置集中管理避免硬编码散落各处,数据库和 Collection 的创建采用"先检查后创建"的防御性编程模式,保障多次运行的幂等性。
实际项目中,全局配置建议抽离到独立的 config.py 文件或使用 .env 环境变量管理。drop_collection 操作在开发阶段可以简化调试流程,但上线后需替换为更安全的策略(如判断是否已存在数据、增量更新等)。