Ollama: CLI基础交互
CLI 是与本地大模型对话的直达通道——打字即问,回车即答,无需写一行代码。
💡 提示:使用
ollama run 首次运行某个模型时,Ollama会自动从远程仓库下载该模型文件(2GB-40GB+),下载完成后才开始推理。后续再次运行同一模型则直接加载本地文件,无需重新下载。建议首次使用时提前拉取模型:ollama pull <model>。
📋 前置知识:需要先掌握以下内容
- 第2课:Ollama安装与环境配置
1. 你将学到
- 单次与交互式对话
- 多轮对话与斜杠命令
- System Prompt 角色设定
- 管道与重定向集成 Shell 脚本
- Alice 的 SQL 生成实战场景
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 |
进入持续对话 |
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 在对话开始前为模型设定角色、规则和输出格式:
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 可能包含语法错误或逻辑缺陷,切勿在生产数据库上直接执行。始终先在测试环境验证,或加上
LIMIT 和 EXPLAIN 安全检查后再运行。
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 获得更好中文体验。📖 小节
- 支持单次和交互两种模式,是日常最常用命令
- 提供结构化多轮对话,支持角色区分和斜杠命令
- System Prompt 为模型设定角色和规则,控制输出格式
- CLI 可与 Unix 管道集成,实现脚本化 AI 工作流
- temperature 参数控制输出随机性,低值更稳定
- Alice 用 CLI + System Prompt 将 SQL 编写时间从 15 分钟降至 3 秒
📝 作业
- 基础题(难度⭐):使用 进行一次交互对话,至少 3 轮,尝试 和 命令。
- 进阶题(难度⭐⭐):用 System Prompt 创建一个"代码审查助手",提交一段代码让它审查,观察角色设定对输出的影响。
- 挑战题(难度⭐⭐⭐):编写一个 Shell 脚本,从文件读取需求列表,批量生成 SQL 并输出到文件,包含错误处理和超时机制。