用途
本技能用于将 Ollama 配置为 GrepAI 的嵌入提供方,实现 100% 私密、本地的代码搜索。资料给出的适用场景包括:搭建私密本地嵌入、选择合适的 Ollama 模型、优化 Ollama 性能、排查 Ollama 连接问题。
为什么使用 Ollama
资料列出以下优势:隐私(代码从不离开本机)、免费(无 API 费用或用量限制)、速度(无网络延迟)、离线(无互联网也可工作)、控制(可自行选择模型)。
前置条件
需已安装并运行 Ollama,并已下载一个嵌入模型。资料给出的安装与启动命令:
# Install Ollama
brew install ollama # macOS
# or
curl -fsSL https://ollama.com/install.sh | sh # Linux
# Start Ollama
ollama serve
# Download model
ollama pull nomic-embed-text
配置方式
基础配置(.grepai/config.yaml):
embedder:
provider: ollama
model: nomic-embed-text
endpoint: http://localhost:11434
使用自定义端点:
embedder:
provider: ollama
model: nomic-embed-text
endpoint: http://192.168.1.100:11434 # Remote Ollama server
显式指定维度(通常会自动检测):
embedder:
provider: ollama
model: nomic-embed-text
endpoint: http://localhost:11434
dimensions: 768 # Usually auto-detected
可用模型
推荐:nomic-embed-text(ollama pull nomic-embed-text)
| 属性 | 值 |
|---|---|
| 维度 | 768 |
| 大小 | ~274 MB |
| 速度 | 快 |
| 质量 | 对代码表现优秀 |
| 语言 | 英文优化 |
多语言:nomic-embed-text-v2-moe(ollama pull nomic-embed-text-v2-moe):维度 768,大小 ~500 MB,速度中等,质量优秀,多语言。资料称最适合包含非英文注释/文档的代码库。
高质量:bge-m3(ollama pull bge-m3):维度 1024,大小 ~1.2 GB,速度较慢,质量很高,多语言。资料称最适合大型复杂代码库、精度要求高的场景。配置时需指定 dimensions: 1024。
最高质量:mxbai-embed-large(ollama pull mxbai-embed-large):维度 1024,大小 ~670 MB,速度中等,质量最高,英文。配置时需指定 dimensions: 1024。
模型对比:
| 模型 | 维度 | 大小 | 速度 | 质量 | 使用场景 |
|---|---|---|---|---|---|
| nomic-embed-text | 768 | 274MB | ⚡⚡⚡ | ⭐⭐⭐ | 通用 |
| nomic-embed-text-v2-moe | 768 | 500MB | ⚡⚡ | ⭐⭐⭐⭐ | 多语言 |
| bge-m3 | 1024 | 1.2GB | ⚡ | ⭐⭐⭐⭐⭐ | 大型代码库 |
| mxbai-embed-large | 1024 | 670MB | ⚡⚡ | ⭐⭐⭐⭐⭐ | 最高精度 |
性能优化
内存管理:模型会加载进内存,需保证内存充足。资料给出的参考:nomic-embed-text 约 500 MB、nomic-embed-text-v2-moe 约 800 MB、bge-m3 约 1.5 GB、mxbai-embed-large 约 1 GB。
GPU 加速:Ollama 会自动使用 macOS 的 Metal(Apple Silicon)以及 Linux/Windows 的 CUDA(NVIDIA GPU)。可用 ollama ps 查看 GPU 使用情况。
保持模型常驻:默认情况下 Ollama 会在不活动 5 分钟后卸载模型。保持常驻的命令:
# Keep model loaded indefinitely
curl http://localhost:11434/api/generate -d '{
"model": "nomic-embed-text",
"keep_alive": -1
}'
验证连接
检查 Ollama 是否运行:curl http://localhost:11434/api/tags
列出可用模型:ollama list
测试嵌入:
curl http://localhost:11434/api/embeddings -d '{
"model": "nomic-embed-text",
"prompt": "function authenticate(user, password)"
}'
作为服务运行
macOS(launchd):Ollama 应用会在登录时自动运行。
Linux(systemd):
# Enable service
sudo systemctl enable ollama
# Start service
sudo systemctl start ollama
# Check status
sudo systemctl status ollama
手动后台运行:
nohup ollama serve > /dev/null 2>&1 &
远程 Ollama 服务器
在服务器上允许远程连接:
# Allow remote connections
OLLAMA_HOST=0.0.0.0 ollama serve
在客户端配置:
# .grepai/config.yaml
embedder:
provider: ollama
model: nomic-embed-text
endpoint: http://server-ip:11434
常见问题
连接被拒绝:执行 ollama serve 启动 Ollama。
找不到模型:执行 ollama pull nomic-embed-text 拉取模型。
嵌入生成缓慢:使用更小的模型(nomic-embed-text);确认正在使用 GPU(ollama ps);关闭占用内存较大的应用;考虑使用硬件更好的远程服务器。
内存不足:使用更小的模型;关闭其他应用;升级内存;使用远程 Ollama 服务器。
模型更新后嵌入不一致:模型更新后需重新索引:
rm .grepai/index.gob
grepai watch
最佳实践
从 nomic-embed-text 开始:速度与质量的最佳平衡;保持 Ollama 运行:推荐后台服务;匹配维度:不要混用不同维度的模型;更换模型后重新索引:删除索引并重新运行 watch;监控内存:嵌入模型占用大量内存。
输出格式
成功配置 Ollama 时的输出示例:
✅ Ollama Embedding Provider Configured
Provider: Ollama
Model: nomic-embed-text
Endpoint: http://localhost:11434
Dimensions: 768 (auto-detected)
Status: Connected
Model Info:
- Size: 274 MB
- Loaded: Yes
- GPU: Apple Metal