Jina AI 出品的 Embeddings 模型现已登陆 Ollama,可以在本地运行高性能语义向量服务。
一、为什么需要本地 Embedding?
在 RAG(检索增强生成)系统中,Embedding(向量化) 是核心环节:
文档 → Embedding → 向量存储
查询 → Embedding → 向量检索
之前的选择:
- 云端 API:效果好,但有成本、数据隐私顾虑
- 本地模型:开源选择少,效果参差不齐
现在,Jina Embeddings 提供了新选择。
二、Jina Embeddings 简介
2.1 模型系列
| 模型 | 参数 | 特点 |
|---|---|---|
| jina-embeddings-v2-small-en | 33M | 轻量,快速 |
| jina-embeddings-v2-base-en | 137M | 平衡性能与效果 |
| jina-embeddings-v2-base-de | 137M | 德英双语 |
| jina-embeddings-v2-base-es | 137M | 西班牙英双语 |
2.2 核心技术
| 特性 | 说明 |
|---|---|
| 架构 | JinaBERT(基于 BERT) |
| 序列长度 | 支持 8192 token |
| 训练数据 | 4亿+ 句子对 |
| 推理 | 单 GPU 即可运行 |
2.3 性能表现
根据 LlamaIndex 的测试:
最佳组合:Jina Embeddings + Cohere Reranker
在 Hit Rate 和 MRR 指标上表现最优。
三、快速开始
3.1 安装 Ollama
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh
3.2 下载模型
# 拉取 Jina Embeddings 模型
ollama pull jina/jina-embeddings-v2-base-en
3.3 使用方式
REST API
curl http://localhost:11434/api/embeddings -d '{
"model": "jina/jina-embeddings-v2-base-en",
"prompt": "The sky is blue because of Rayleigh scattering"
}'
响应:
{
"embedding": [0.123, -0.456, 0.789, ...],
"model": "jina/jina-embeddings-v2-base-en",
"done": true
}
Python
import ollama
response = ollama.embeddings(
model='jina/jina-embeddings-v2-base-en',
prompt='The sky is blue because of Rayleigh scattering'
)
embedding = response['embedding']
print(f"向量维度: {len(embedding)}")
JavaScript
const response = await ollama.embeddings({
model: 'jina/jina-embeddings-v2-base-en',
prompt: 'The sky is blue because of Rayleigh scattering'
});
console.log(response.embedding);
四、实战:构建本地 RAG
4.1 架构
┌─────────────────────────────────────┐
│ 用户查询 │
└─────────────────┬───────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Ollama (Jina Embeddings) │
│ 将查询转为向量 │
└─────────────────┬───────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 向量检索 (Chroma/Qdrant) │
└─────────────────┬───────────────────┘
│
▼
┌─────────────────────────────────────┐
│ LLM 生成答案 │
└─────────────────────────────────────┘
4.2 完整代码示例
from ollama import embeddings
import chromadb
# 1. 生成查询向量
query = "什么是机器学习?"
query_embedding = embeddings(
model='jina/jina-embeddings-v2-base-en',
prompt=query
)['embedding']
# 2. 向量检索
client = chromadb.Client()
collection = client.get_collection("knowledge_base")
results = collection.query(
query_embeddings=[query_embedding],
n_results=3
)
# 3. 输出结果
for doc in results['documents'][0]:
print(doc)
五、与云端 API 对比
| 维度 | Jina (Ollama) | OpenAI API |
|---|---|---|
| 成本 | 免费(GPU自备) | 按调用付费 |
| 隐私 | ✅ 完全本地 | ❌ 数据上传 |
| 延迟 | 本地网络 | 依赖网络 |
| 效果 | 接近云端 | 最佳 |
| 维护 | 需运维 | 托管理 |
六、适用场景
| 场景 | 推荐 |
|---|---|
| 企业内部知识库 | ✅ 本地部署,数据不出网 |
| 个人/小团队项目 | ✅ 零成本 |
| 大规模生产环境 | ⚠️ 考虑云端 API |
| 对延迟敏感 | ⚠️ 需优化硬件 |
七、硬件要求
| 模型 | GPU | 显存 |
|---|---|---|
| small (33M) | 可选 | ~2GB |
| base (137M) | 推荐 | ~4GB |
消费级显卡(如 RTX 3060)即可运行。
八、总结
Jina Embeddings 登陆 Ollama 后,本地 RAG 变得更简单:
| 优点 | 说明 |
|---|---|
| ✅ 免费开源 | 无 API 费用 |
| ✅ 隐私安全 | 数据不出本地 |
| ✅ 效果出色 | 接近商业 API |
| ✅ 8192 序列 | 长文档处理能力强 |
推荐组合:Jina Embeddings + bge-reranker-large
参考资料
💡 提示:如果你的 GPU 显存有限,可以先从
jina-embeddings-v2-small-en开始体验!