用途
Ollama Local 用于在本地运行大语言模型,主要目标包括:
- 降低成本
- 保护隐私
- 支持离线开发
适用于开发环境、CI 流水线等场景。
主要能力
快速开始
安装 Ollama:
curl -fsSL https://ollama.ai/install.sh | sh
拉取模型:
ollama pull deepseek-r1:70b # Reasoning (GPT-4 level)
ollama pull qwen2.5-coder:32b # Coding
ollama pull nomic-embed-text # Embeddings
启动服务:
ollama serve
推荐模型(M4 Max 256GB)
| 任务 | 模型 | 大小 | 备注 |
|---|---|---|---|
| Reasoning | deepseek-r1:70b | ~42GB | GPT-4 level |
| Coding | qwen2.5-coder:32b | ~35GB | 73.7% Aider benchmark |
| Embeddings | nomic-embed-text | ~0.5GB | 768 dims, fast |
| General | llama3.3:70b | ~40GB | Good all-around |
LangChain 集成
from langchain_ollama import ChatOllama, OllamaEmbeddings
# Chat model
llm = ChatOllama(
model="deepseek-r1:70b",
base_url="http://localhost:11434",
temperature=0.0,
num_ctx=32768, # Context window
keep_alive="5m", # Keep model loaded
)
# Embeddings
embeddings = OllamaEmbeddings(
model="nomic-embed-text",
base_url="http://localhost:11434",
)
# Generate
response = await llm.ainvoke("Explain async/await")
vector = await embeddings.aembed_query("search text")
工具调用
from langchain_core.tools import tool
@tool
def search_docs(query: str) -> str:
"""Search the document database."""
return f"Found results for: {query}"
# Bind tools
llm_with_tools = llm.bind_tools([search_docs])
response = await llm_with_tools.ainvoke("Search for Python patterns")
结构化输出
from pydantic import BaseModel, Field
class CodeAnalysis(BaseModel):
language: str = Field(description="Programming language")
complexity: int = Field(ge=1, le=10)
issues: list[str] = Field(description="Found issues")
structured_llm = llm.with_structured_output(CodeAnalysis)
result = await structured_llm.ainvoke("Analyze this code: ...")
# result is typed CodeAnalysis object
提供商工厂模式
import os
def get_llm_provider(task_type: str = "general"):
"""Auto-switch between Ollama and cloud APIs."""
if os.getenv("OLLAMA_ENABLED") == "true":
models = {
"reasoning": "deepseek-r1:70b",
"coding": "qwen2.5-coder:32b",
"general": "llama3.3:70b",
}
return ChatOllama(
model=models.get(task_type, "llama3.3:70b"),
keep_alive="5m"
)
else:
# Fall back to cloud API
return ChatOpenAI(model="gpt-5.2")
# Usage
llm = get_llm_provider(task_type="coding")
环境配置
# .env.local
OLLAMA_ENABLED=true
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL_REASONING=deepseek-r1:70b
OLLAMA_MODEL_CODING=qwen2.5-coder:32b
OLLAMA_MODEL_EMBED=nomic-embed-text
# Performance tuning (Apple Silicon)
OLLAMA_MAX_LOADED_MODELS=3 # Keep 3 models in memory
OLLAMA_KEEP_ALIVE=5m # 5 minute keep-alive
CI 集成
# GitHub Actions (self-hosted runner)
jobs:
test:
runs-on: self-hosted # M4 Max runner
env:
OLLAMA_ENABLED: "true"
steps:
- name: Pre-warm models
run: |
curl -s http://localhost:11434/api/embeddings \
-d '{"model":"nomic-embed-text","prompt":"warmup"}' > /dev/null
- name: Run tests
run: pytest tests/
成本对比
| 提供商 | 月成本 | 延迟 |
|---|---|---|
| Cloud APIs | ~$675/month | 200-500ms |
| Ollama Local | ~$50 (electricity) | 50-200ms |
| 节省 | 93% | 2-3x faster |
最佳实践
- DO 在 CI 中使用 keep_alive="5m"(避免冷启动)
- DO 在首次调用前预热模型
- DO 在 Apple Silicon 上设置 num_ctx=32768
- DO 使用提供商工厂进行云/本地切换
- DON'T 使用 keep_alive=-1(浪费内存)
- DON'T 在 CI 中跳过预热(30-60s 冷启动)
故障排查
# Check if Ollama is running
curl http://localhost:11434/api/tags
# List loaded models
ollama list
# Check model memory usage
ollama ps
# Pull specific version
ollama pull deepseek-r1:70b-q4_K_M
相关技能
- embeddings - 嵌入模式(与 nomic-embed-text 配合使用)
- llm-evaluation - 使用本地模型进行测试
- cost-optimization - 更广泛的成本策略
能力细节
setup 关键词:setup, install, configure, ollama 解决的问题:
- 在本地设置 Ollama
- 为开发配置
- 安装模型
model-selection 关键词:model, llama, mistral, qwen, selection 解决的问题:
- 选择合适的模型
- 比较模型能力
- 平衡速度与质量
provider-template 关键词:provider, template, python, implementation 解决的问题:
- Ollama 提供商模板
- Python 实现
- 即插即用的 LLM 提供商
使用方式
通过安装 Ollama、拉取模型、启动服务,并结合 LangChain 等框架进行集成。支持工具调用、结构化输出、提供商工厂模式等。可通过环境变量配置,并集成到 CI 流程中。
适用场景
- 本地开发环境
- CI 流水线
- 需要降低成本、保护隐私或离线开发的场景
限制
资料中未明确说明限制条件。