SuperAPI AI 工具集

ollama-local

智能体与模型

查看项目

更新于 10-16 04:43

技能介绍

用途

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 流水线
  • 需要降低成本、保护隐私或离线开发的场景

限制

资料中未明确说明限制条件。