Ollama: CLI基础交互

CLI 是与本地大模型对话的直达通道——打字即问,回车即答,无需写一行代码。

💡 提示:使用 ollama run 首次运行某个模型时,Ollama会自动从远程仓库下载该模型文件(2GB-40GB+),下载完成后才开始推理。后续再次运行同一模型则直接加载本地文件,无需重新下载。建议首次使用时提前拉取模型:ollama pull <model>

📋 前置知识:需要先掌握以下内容

1. 你将学到


2. 一个 SaaS 创业者的真实故事

(1) 痛点:手写 SQL 太慢

Alice 创办了 GlobalShop 电商平台,每天要写几十条复杂 SQL 查询来分析业务数据。从产品需求到 SQL 语句,平均每条花 15 分钟,还容易写错 JOIN 条件。她需要一个快速将自然语言转 SQL 的工具。

(2) 解法:CLI 秒出 SQL

用 Ollama CLI 配合 System Prompt,Alice 输入"查询上月活跃用户数",3 秒得到完整 SQL:

BASH
ollama run llama3.2 "Write a SQL query to count active users last month"

3. ollama run 命令详解

ℹ️ 说明:本课程中的示例命令均以实际功能演示为主,部分占位页面(如 /how-to-examples.md)仅用于展示文档结构。请将注意力集中在CLI命令语法、参数含义和交互模式的使用方法上。

(1) 两种运行模式

模式 命令 行为
单次模式 ollama run model "prompt" 输出后退出
交互模式 ollama run model 进入持续对话
100%
sequenceDiagram
    participant U as User
    participant O as Ollama CLI
    participant S as Ollama Server
    U->>O: ollama run llama3.2
    O->>S: Check if model loaded
    S-->>O: Model ready
    O-->>U: >>> prompt
    U->>O: What is machine learning?
    O->>S: POST /api/generate
    S-->>O: Streaming response
    O-->>U: Machine learning is...

▶ 示例 1: 单次与交互模式

BASH
# Single-shot: ask and exit
ollama run llama3.2 "Explain recursion in one sentence"
# Recursion is a function that calls itself to solve smaller instances of the same problem.

# Interactive: stay in conversation
ollama run llama3.2
>>> What is Python?
Python is a high-level programming language...
>>> Can you give an example?       # Context preserved
Sure! Here's a simple Python example:
    print("Hello, World!")

输出:

TEXT 📖 仅展示
I'm a helpful AI assistant running locally on your machine...

(2) 关键运行参数

参数 用途 示例
--verbose 显示推理耗时与速度 ollama run --verbose llama3.2 "Hello"
--system 设定 System Prompt ollama run --system "Reply in JSON" llama3.2 "List colors"
--prompt-template 自定义提示模板 ollama run --prompt-template "Q: {{.Prompt}}\nA:" llama3.2 "What is AI?"

▶ 示例 2: 带参数的 run 命令

BASH
# Show performance metrics
ollama run --verbose llama3.2 "Hello"
# ...response...
# total duration:       1.2s
# load duration:        800ms
# prompt eval count:    12 token(s)
# prompt eval speed:    15.0 tokens/s
# eval count:           45 token(s)
# eval speed:           30.0 tokens/s

# Set system prompt inline
ollama run --system "Reply in JSON format only" llama3.2 "List 3 colors"
# {"colors": ["red", "blue", "green"]}

输出:

TEXT 📖 仅展示
I'm a helpful AI assistant running locally on your machine...

4. ollama chat 多轮对话

(1) chat 与 run 的区别

特性 ollama run ollama chat
上下文 默认保留上轮 显式多轮消息
消息格式 纯文本 支持角色区分 (user/assistant/system)
API 映射 /api/generate /api/chat
适用场景 快速提问 结构化对话

(2) 斜杠命令速查

命令 功能
/clear 清除对话上下文
/help 显示所有命令
/set parameter 设置推理参数
/set system 设置 System Prompt
/info 显示模型信息
/exit 或 Ctrl+D 退出对话

▶ 示例 3: chat 多轮对话与参数调整

BASH
# Start chat session
ollama chat llama3.2

>>> /set system You are a helpful data analyst
System prompt set.

>>> Analyze this: sales dropped 20% last quarter
The 20% sales drop could indicate several issues...

>>> What visualization would you recommend?
I'd suggest a line chart showing quarterly trends...

>>> /set parameter temperature 0.3
Set parameter 'temperature' to 0.3

>>> Give me the SQL for that analysis
SELECT quarter, revenue FROM sales_data...

>>> /clear
Cleared session context.

>>> /exit

输出:

TEXT 📖 仅展示
# Ollama 命令执行成功

5. System Prompt 与提示工程基础

💡 提示: System Prompt 是控制模型行为最有效的方式。一个清晰的 System Prompt 能将"通用助手"转变为"专业工具"——越具体越好。"你是一个 PostgreSQL 专家,只输出 SQL" 比 "你是一个助手" 效果好 10 倍。

(1) System Prompt 的作用

System Prompt 在对话开始前为模型设定角色、规则和输出格式:

100%
graph TB
    SP[System Prompt<br/>Role + Rules + Format] --> C[Conversation Context]
    U[User Message] --> C
    C --> M[Model Response]
    M --> C
角色 System Prompt 示例 效果
SQL 专家 "You are a SQL expert. Only output valid SQL." 只输出 SQL 语句
翻译 "You are a translator. Translate to French." 自动翻译
客服 "You are a customer service agent. Be polite and concise." 礼貌简洁回复
代码审查 "You are a code reviewer. Point out bugs and improvements." 聚焦代码问题

▶ 示例 4: Alice 的 SQL 生成场景

BASH
# Alice's SQL assistant with System Prompt
ollama run --system "You are a PostgreSQL expert. Given a natural language question, output ONLY the SQL query. No explanations, no markdown, just the SQL." llama3.2

>>> Count users who registered in the last 30 days and made at least one purchase
SELECT COUNT(DISTINCT u.id)
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.created_at >= NOW() - INTERVAL '30 days'
  AND o.id IS NOT NULL;

>>> Find the top 5 products by revenue this month
SELECT p.name, SUM(oi.quantity * oi.price) AS revenue
FROM products p
JOIN order_items oi ON p.id = oi.product_id
JOIN orders o ON oi.order_id = o.id
WHERE o.created_at >= DATE_TRUNC('month', CURRENT_DATE)
GROUP BY p.id, p.name
ORDER BY revenue DESC
LIMIT 5;

输出:

TEXT 📖 仅展示
I'm a helpful AI assistant running locally on your machine...

6. 管道与 Shell 集成

ℹ️ 信息: 管道模式下 ollama run 从 stdin 读取输入,等待完整响应后输出到 stdout。这意味着管道模式是非流式的,适合批量处理场景,不适合实时交互。

(1) CLI 管道模式

Ollama CLI 可与 Unix 管道无缝集成,实现自动化工作流:

模式 命令 用途
stdin 输入 echo "prompt" | ollama run model 脚本化调用
输出重定向 ollama run model "prompt" > output.txt 保存结果
链式管道 cat data.txt | ollama run model | jq . 后处理

▶ 示例 5: Shell 脚本集成

BASH
# Batch translate product descriptions
echo "Translate to French: Premium wireless headphones" | ollama run llama3.2

# Generate commit messages from git diff
git diff --staged | ollama run llama3.2 "Write a concise git commit message for these changes"

# Summarize a log file
cat /var/log/app.log | tail -100 | ollama run llama3.2 "Summarize the key errors in this log"

输出:

TEXT 📖 仅展示
I'm a helpful AI assistant running locally on your machine...

7. 综合示例:Alice 的 SQL 助手脚本

⚠️ 警告: LLM 生成的 SQL 可能包含语法错误或逻辑缺陷,切勿在生产数据库上直接执行。始终先在测试环境验证,或加上 LIMITEXPLAIN 安全检查后再运行。

BASH
#!/bin/bash
# ============================================
# Comprehensive: Alice's SQL Assistant
# Natural language to SQL with context awareness
# ============================================

MODEL="llama3.2"
SYSTEM="You are a PostgreSQL expert. Output ONLY valid SQL. No explanations, no markdown fences."

# Interactive mode with preset system prompt
sql_chat() {
    echo "SQL Assistant ready. Type your query in natural language (or 'exit'):"
    ollama run --system "$SYSTEM" "$MODEL"
}

# Single-shot: pipe question, get SQL
sql_ask() {
    local question="$1"
    echo "$question" | ollama run --system "$SYSTEM" "$MODEL"
}

# Batch mode: process questions from file
sql_batch() {
    local input_file="$1"
    local output_file="sql_output_$(date +%Y%m%d_%H%M%S).sql"
    while IFS= read -r question; do
        echo "-- Question: $question" >> "$output_file"
        sql_ask "$question" >> "$output_file"
        echo "" >> "$output_file"
    done < "$input_file"
    echo "Batch complete: $output_file"
}

# Main menu
case "${1:-interactive}" in
    ask)   sql_ask "$2" ;;
    batch) sql_batch "$2" ;;
    *)     sql_chat ;;
esac
💻 输出:

TEXT 📖 仅展示
-- Question: Count users registered last month
SELECT COUNT(*) FROM users
WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
  AND created_at < DATE_TRUNC('month', CURRENT_DATE);

-- Question: Top 10 products by sales
SELECT p.name, SUM(oi.quantity) AS total_sold
FROM products p
JOIN order_items oi ON p.id = oi.product_id
GROUP BY p.id, p.name
ORDER BY total_sold DESC
LIMIT 10;

❓ 常见问题

Q ollama run 和 ollama chat 该用哪个?
A 快速单次提问用 ollama run,需要上下文连续对话用 ollama chat。日常开发两者皆可,run 更轻量,chat 支持角色区分。
Q CLI 对话能保存历史吗?
A 交互模式下上下文在会话内保留,退出后清除。如需持久化,用管道重定向到文件或通过 REST API 自行管理对话历史。
Q 如何让输出更稳定一致?
A 设置低 temperature(0.1-0.3)使输出更确定。CLI 中用 /set parameter temperature 0.2 调整。高 temperature(0.7-1.0)更随机创意。
Q 管道模式下为什么没有流式输出?
A 管道模式(stdin 输入)默认非流式,等待完整响应后输出。加 --verbose 可查看推理过程,但输出仍是完整结果。
Q System Prompt 太长会影响性能吗?
A 会。System Prompt 计入上下文窗口(默认 2048 tokens),过长会减少可用对话空间。建议控制在 200 tokens 以内。
Q 如何在 CLI 中使用中文提问?
A 直接输入中文即可。llama3.2、qwen2 等模型支持中文。推荐用 ollama run qwen2 获得更好中文体验。

📖 小节


📝 作业

  1. 基础题(难度⭐):使用 进行一次交互对话,至少 3 轮,尝试 和 命令。
  2. 进阶题(难度⭐⭐):用 System Prompt 创建一个"代码审查助手",提交一段代码让它审查,观察角色设定对输出的影响。
  3. 挑战题(难度⭐⭐⭐):编写一个 Shell 脚本,从文件读取需求列表,批量生成 SQL 并输出到文件,包含错误处理和超时机制。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏