概览
Weaviate 是一个支持自定义向量化引擎 (custom vectorisers) 的开源向量搜索引擎。通过将嵌入生成 (embedding) 和生成式调用路由到 ModelRiver,您将能够在整个检索搜索管道获得模型提供商故障转移机制。
快速上手
安装相关依赖
Bash
pip install weaviate-client openai初始化配置
PYTHON
1import weaviate2from openai import OpenAI3 4# ModelRiver 客户端5client = OpenAI(6 base_url="https://api.modelriver.com/v1",7 api_key="mr_live_YOUR_API_KEY",8)9 10# Weaviate 客户端11wv_client = weaviate.connect_to_local() # 或使用 connect_to_weaviate_cloud()带有 ModelRiver 表示向量集合的创建 (Create collection with ModelRiver embeddings)
PYTHON
1def embed(texts: list[str]) -> list[list[float]]:2 """通过 ModelRiver 生成表示向量。"""3 response = client.embeddings.create(4 model="my-embedding-workflow",5 input=texts,6 )7 return [d.embedding for d in response.data]8 9# 创建集合10collection = wv_client.collections.create(11 name="Documents",12 properties=[13 weaviate.classes.config.Property(name="text", data_type=weaviate.classes.config.DataType.TEXT),14 weaviate.classes.config.Property(name="source", data_type=weaviate.classes.config.DataType.TEXT),15 ],16)收录文档数据 (Ingest documents)
PYTHON
1documents = [2 {"text": "ModelRiver routes AI requests across providers.", "source": "docs"},3 {"text": "Workflows configure provider and fallback settings.", "source": "docs"},4 {"text": "Structured outputs guarantee JSON schema compliance.", "source": "docs"},5]6 7# 生成向量并写入8texts = [doc["text"] for doc in documents]9vectors = embed(texts)10 11with collection.batch.dynamic() as batch:12 for doc, vector in zip(documents, vectors):13 batch.add_object(14 properties=doc,15 vector=vector,16 )语义搜索与检索增强生成 (Semantic search + RAG)
PYTHON
1def search_and_answer(question: str, top_k: int = 3) -> str:2 """搜索 Weaviate 集合,然后通过 ModelRiver 产出问题的回答。"""3 4 # 嵌入查询语句5 query_vector = embed([question])[0]6 7 # 执行 Weaviate 检索8 results = collection.query.near_vector(9 near_vector=query_vector,10 limit=top_k,11 return_properties=["text", "source"],12 )13 14 # 提取构建上下文环境15 context = "\n\n".join([obj.properties["text"] for obj in results.objects])16 17 # 总结生成回答18 response = client.chat.completions.create(19 model="my-chat-workflow",20 messages=[21 {"role": "system", "content": f"请严格基于以下上下文作答:\n\n{context}"},22 {"role": "user", "content": question},23 ],24 )25 26 return response.choices[0].message.content27 28answer = search_and_answer("How does ModelRiver handle failover?")29print(answer)最佳实践 (Best practices)
- 分离嵌入和聊天工作流 (Separate embedding and chat workflows): 以实现独立的规模伸缩和速率调优。
- 在处理大数据集时尽量使用批量导入 (Use batch imports): Weaviate 的 batch API 在此时会快得多。
- 存储来源元数据 (Store source metadata): 这便于引用溯源及出处跟踪。
- 监控嵌入相关的花销成本 (Monitor embedding costs): 使用 请求日志 分离查询与监控。
下一步探究
- Supabase 集成: pgvector 解决方案
- Pinecone 集成: 全托管式的高级向量数据库
- API 参考: 端点文档