Skip to content

Ollama 指南

Ollama 是一个在本地运行大型语言模型的强大工具。本指南解释如何将 Ollama 与 MyDeskBot 集成,以利用本地 AI 模型进行开发辅助。

什么是 Ollama?

Ollama 是一个在本地机器上轻松运行大型语言模型的工具。将 Ollama 与 MyDeskBot 一起使用的优势包括:

  • 隐私:将您的代码和数据保留在本地
  • 无需互联网:离线工作
  • 成本效益:无 API 费用
  • 可定制:运行任何兼容的模型
  • 快速:本地模型延迟低

安装 Ollama

macOS

使用 Homebrew 安装:

bash
brew install ollama

或从 ollama.ai 下载:

bash
curl -fsSL https://ollama.ai/install.sh | sh

Windows

ollama.ai 下载 Windows 安装程序并运行。

Linux

使用 curl 安装:

bash
curl -fsSL https://ollama.ai/install.sh | sh

或使用包管理器:

bash
# Ubuntu/Debian
sudo apt install ollama

# Fedora
sudo dnf install ollama

# CentOS/RHEL
sudo yum install ollama

启动 Ollama

运行服务

启动 Ollama 服务:

bash
# 启动 Ollama 守护进程
ollama serve

# 或在后台运行
ollama serve &

# 检查是否正在运行
ollama list

系统启动

启用 Ollama 自动启动:

bash
# macOS(使用 Homebrew)
brew services start ollama

# Linux(systemd)
sudo systemctl enable ollama
sudo systemctl start ollama

流行模型

专注于代码的模型

下载针对编码优化的模型:

bash
# CodeLlama(Meta 的编码模型)
ollama pull codellama:7b
ollama pull codellama:13b
ollama pull codellama:34b

# 带有 Python 指令调优的 CodeLlama
ollama pull codellama:7b-python

# Llama 3(具有良好编码能力的通用模型)
ollama pull llama3:8b
ollama pull llama3:70b

# Mistral(高效且强大)
ollama pull mistral:7b
ollama pull mixtral:8x7b

通用模型

其他有用的模型:

bash
# Phi-3(Microsoft 的紧凑模型)
ollama pull phi3:3.8b

# Gemma(Google 的模型)
ollama pull gemma:2b
ollama pull gemma:7b

# Neural Chat(Intel 的模型)
ollama pull neural-chat:7b

配置 MyDeskBot 使用 Ollama

基本配置

配置 MyDeskBot 使用 Ollama 模型:

yaml
# .mydeskbot/config.yaml
models:
  - name: "local-coding"
    provider: "ollama"
    model: "codellama:7b"
    baseURL: "http://localhost:11434"
    role: "chat"

  - name: "local-fast"
    provider: "ollama"
    model: "mistral:7b"
    baseURL: "http://localhost:11434"
    role: "autocomplete"

高级配置

微调 Ollama 模型设置:

yaml
models:
  - name: "local-coding-advanced"
    provider: "ollama"
    model: "codellama:13b"
    baseURL: "http://localhost:11434"
    role: "chat"

    # 模型参数
    temperature: 0.2 # 更低的值表示更确定的输出
    maxTokens: 2048
    topP: 0.9
    frequencyPenalty: 0.1
    presencePenalty: 0.1

    # Ollama 特定选项
    options:
      num_ctx: 4096 # 上下文窗口
      num_predict: 512 # 预测的最大令牌数
      repeat_last_n: 64 # 回溯多远查找重复
      repeat_penalty: 1.1 # 重复的惩罚
      top_k: 40 # 限制为前 K 个选择
      tfs_z: 1.0 # 尾部自由采样
      mirostat: 0 # Mirostat 采样(0=禁用,1=MLE,2=Mirosample)
      mirostat_tau: 5.0 # Mirostat tau
      mirostat_eta: 0.1 # Mirostat eta

多模型设置

为不同任务配置多个 Ollama 模型:

yaml
models:
  # 快速自动完成模型
  - name: "ollama-autocomplete"
    provider: "ollama"
    model: "mistral:7b"
    baseURL: "http://localhost:11434"
    role: "autocomplete"
    temperature: 0.1

  # 强大的编码模型
  - name: "ollama-coding"
    provider: "ollama"
    model: "codellama:13b"
    baseURL: "http://localhost:11434"
    role: "chat"
    temperature: 0.3

  # 通用模型
  - name: "ollama-general"
    provider: "ollama"
    model: "llama3:8b"
    baseURL: "http://localhost:11434"
    role: "chat"
    temperature: 0.7

模型管理

列出模型

查看已下载的模型:

bash
# 列出所有模型
ollama list

# 显示模型详情
ollama show codellama:7b

# 以 JSON 格式显示模型信息
ollama list --json

管理模型

下载、删除和管理模型:

bash
# 拉取模型
ollama pull llama3:8b

# 删除模型
ollama rm codellama:7b

# 复制模型
ollama cp llama3:8b my-custom-llama:latest

# 从 Modelfile 创建模型
ollama create my-model -f ./Modelfile

模型信息

获取详细的模型信息:

bash
# 显示模型参数
ollama show llama3:8b --modelfile

# 显示许可证信息
ollama show llama3:8b --license

性能优化

硬件加速

启用 GPU 加速以获得更好的性能:

bash
# 检查 GPU 支持
ollama list

# Ollama 自动使用可用的 GPU
# 对于 NVIDIA GPU,确保已安装 CUDA
# 对于 AMD GPU,确保已安装 ROCm
# 对于 Apple Silicon,自动使用 Metal

资源管理

控制资源使用:

yaml
models:
  - name: "resource-managed-model"
    provider: "ollama"
    model: "llama3:8b"
    baseURL: "http://localhost:11434"

    options:
      num_thread: 8 # 限制 CPU 线程
      num_gpu: 1 # 限制 GPU 层
      num_keep: 4 # 在块之间保留的令牌数

上下文管理

优化上下文窗口使用:

yaml
models:
  - name: "context-optimized"
    provider: "ollama"
    model: "llama3:8b"
    baseURL: "http://localhost:11434"

    options:
      num_ctx: 4096 # 上下文窗口大小
      num_batch: 512 # 提示处理的批量大小

自定义模型

创建 Modelfile

创建自定义模型配置:

dockerfile
# Modelfile
FROM llama3:8b

# 设置系统消息
SYSTEM """
You are a helpful AI coding assistant integrated with MyDeskBot.
Focus on providing accurate, secure, and efficient code solutions.
"""

# 添加自定义参数
PARAMETER temperature 0.3
PARAMETER repeat_penalty 1.1

# 添加模板以获得更好的格式化
TEMPLATE """
<|begin_of_sentence|>{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|><|end_of_sentence|>
"""

构建自定义模型:

bash
ollama create my-custom-model -f ./Modelfile

模型自定义

为特定任务自定义模型:

dockerfile
# CodingAssistant Modelfile
FROM codellama:7b

SYSTEM """
You are an expert coding assistant. Provide:
1. Working code examples
2. Explanations of code functionality
3. Best practices and security considerations
4. Error handling and edge cases
"""

PARAMETER temperature 0.2
PARAMETER repeat_penalty 1.2
PARAMETER top_k 50
PARAMETER top_p 0.9

TEMPLATE """
[INST] <<SYS>>
{{ .System }}
<</SYS>>

{{ .Prompt }} [/INST] {{ .Response }}
"""

与开发工作流程集成

开发环境设置

配置您的开发环境:

yaml
# .mydeskbot/config.yaml
models:
  - name: "dev-local"
    provider: "ollama"
    model: "codellama:7b"
    baseURL: "http://localhost:11434"
    role: "chat"

  - name: "dev-fast"
    provider: "ollama"
    model: "mistral:7b"
    baseURL: "http://localhost:11434"
    role: "autocomplete"

preferences:
  # 针对本地模型优化
  maxContextTokens: 4096
  requestTimeout: 60 # 本地模型可能需要更长时间

项目特定配置

为特定项目定制模型:

yaml
# 项目特定的 .mydeskbot/config.yaml
models:
  - name: "python-project"
    provider: "ollama"
    model: "codellama:7b-python"
    baseURL: "http://localhost:11434"
    role: "chat"

  - name: "javascript-project"
    provider: "ollama"
    model: "llama3:8b"
    baseURL: "http://localhost:11434"
    role: "chat"

故障排除

常见问题

连接问题

bash
# 检查 Ollama 是否正在运行
ps aux | grep ollama

# 检查 Ollama 服务状态
sudo systemctl status ollama  # Linux
brew services list | grep ollama  # macOS

# 测试连接
curl http://localhost:11434/api/tags

模型加载问题

bash
# 检查可用模型
ollama list

# 重新拉取有问题的模型
ollama pull codellama:7b --insecure

# 检查模型完整性
ollama show codellama:7b --modelfile

性能问题

bash
# 检查系统资源
htop  # 或 macOS 上的活动监视器

# 限制 CPU 使用
OLLAMA_NUM_THREAD=4 ollama serve

# 检查 GPU 使用
nvidia-smi  # 对于 NVIDIA GPU

调试命令

bash
# 启用详细日志
OLLAMA_DEBUG=1 ollama serve

# 检查 Ollama 日志
journalctl -u ollama -f  # Linux
tail -f /usr/local/var/log/ollama.log  # macOS

# 直接测试模型
ollama run llama3:8b "你好,你好吗?"

# 获取模型信息
ollama show llama3:8b --all

最佳实践

模型选择

  1. 匹配模型和任务:为特定任务使用专门的模型
  2. 考虑硬件:选择适合您硬件的模型
  3. 平衡速度与质量:小模型用于快速任务,大模型用于复杂任务
  4. 测试多个模型:找到最适合您用例的模型

资源管理

  1. 监控使用情况:跟踪 CPU/GPU/内存使用
  2. 限制并发模型:不要同时运行太多模型
  3. 清理未使用的模型:删除您不使用的模型
  4. 使用适当的上下文:不要使用比需要更大的上下文窗口

安全

  1. 保持模型更新:定期更新到最新版本
  2. 验证来源:仅使用可信的模型来源
  3. 监控网络:Ollama 默认情况下应仅在 localhost 上监听
  4. 安全配置:保护您的配置文件

高级功能

模型服务

在自定义端口上服务模型:

bash
# 在自定义端口上服务
OLLAMA_HOST=http://0.0.0.0:11435 ollama serve

# 配置 MyDeskBot 使用自定义端口
yaml
models:
  - name: "remote-ollama"
    provider: "ollama"
    model: "llama3:8b"
    baseURL: "http://192.168.1.100:11434" # 远程 Ollama 服务器

模型链

按顺序使用多个模型:

yaml
rules:
  - name: "code-review-process"
    prompt: |
      首先,使用专注于安全的模型分析此代码的安全问题。
      然后,使用专注于性能的模型审查性能优化。
      最后,使用通用编码模型检查最佳实践。