交互模式内置命令
进入 ollama run 模型名 后,你会看到 >>> 提示符。除了直接输入问题,还有一套以 / 开头的内置命令来控制会话:
# 启动交互模式
ollama run llama3.2
# 进入交互模式后可用的内置命令:
# /help — 显示所有可用命令列表
>>> /help
# /show info — 查看当前加载模型的详细信息
>>> /show info
# 输出:arch=llama, parameters=3.2B, context=131072, ...
# /show modelfile — 查看当前模型的 Modelfile
>>> /show modelfile
# /set parameter — 临时修改生成参数(本次会话有效)
>>> /set parameter temperature 0.1
>>> /set parameter num_ctx 4096
>>> /set parameter seed 42 # 固定随机种子,结果可复现
# /set system — 临时修改系统提示词
>>> /set system "你是一个诗人,只用古诗风格回答"
# /set nohistory — 不记录此次对话历史(隐私模式)
>>> /set nohistory
# /save — 保存当前会话状态为一个新模型
>>> /save my-session-snapshot
# /load — 加载已保存的会话状态
>>> /load my-session-snapshot
# /clear — 清除当前对话历史(重置上下文)
>>> /clear
# /bye — 退出交互模式(或按 Ctrl+D)
>>> /bye
多行输入技巧
在交互模式中,有多种方式输入跨越多行的内容:
# 方式一:三引号包裹(推荐,最清晰)
>>> """
... 请分析以下代码的性能问题:
...
... def slow_function(n):
... result = []
... for i in range(n):
... result = result + [i * 2] # 每次创建新列表
... return result
...
... """
# 输入第二个 """ 并按 Enter 提交
# 方式二:行尾反斜杠续行
>>> 分析这段代码:def f(x): \
... return x * 2
# 方式三:从文件读取输入(非交互模式更实用)
# 先将问题写入文件
cat > /tmp/question.txt << 'EOF'
审查以下 Python 代码,指出潜在的安全漏洞和改进建议:
```python
import sqlite3
def get_user(username):
conn = sqlite3.connect("users.db")
query = f"SELECT * FROM users WHERE name = '{username}'"
result = conn.execute(query).fetchone()
conn.close()
return result
```
EOF
# 管道模式输入文件内容
ollama run llama3.2 < /tmp/question.txt
管道与非交互模式
非交互模式是自动化任务的核心。Ollama 检测到标准输入不是终端(TTY)时,自动进入非交互模式:
# 最基础的非交互用法
echo "用一句话解释量子纠缠" | ollama run llama3.2
# 传入变量
LANG="Python"
echo "用 ${LANG} 实现冒泡排序" | ollama run qwen2.5:7b
# 处理文件内容(代码审查)
cat main.py | ollama run codepal "审查以上代码,指出问题"
# 管道串联:先生成再格式化
echo "列出 5 个 Python 最佳实践,用 JSON 格式返回" | \
ollama run llama3.2 | \
python3 -c "import sys, json; data=json.loads(sys.stdin.read()); print(json.dumps(data, indent=2, ensure_ascii=False))"
# 命令行直接传 prompt(推荐方式)
ollama run llama3.2 "翻译成英文:量子计算改变了我们对计算的理解"
# 输出重定向到文件
ollama run llama3.2 "写一个 Python 爬虫的完整示例" > crawler_example.py
# 获取纯文本输出(去掉流式的特殊字符)
RESPONSE=$(ollama run llama3.2 "给出 3 个随机数字,只返回数字用逗号分隔")
echo "模型返回:$RESPONSE"
批量处理脚本实战
利用非交互模式,可以轻松构建批量处理工作流:
#!/bin/bash
# batch_translate.sh — 批量翻译目录下的 .txt 文件
MODEL="qwen2.5:7b"
INPUT_DIR="./docs"
OUTPUT_DIR="./docs_translated"
mkdir -p "$OUTPUT_DIR"
for file in "$INPUT_DIR"/*.txt; do
filename=$(basename "$file" .txt)
echo "正在翻译:$filename"
# 读取文件内容,拼接翻译指令
CONTENT=$(cat "$file")
PROMPT="将以下文本翻译成中文,保持专业术语准确,只输出翻译结果不要解释:
${CONTENT}"
# 调用 Ollama 翻译,输出到新文件
echo "$PROMPT" | ollama run "$MODEL" > "${OUTPUT_DIR}/${filename}_zh.txt"
echo " ✓ 完成:${OUTPUT_DIR}/${filename}_zh.txt"
sleep 0.5 # 避免请求过快
done
echo "批量翻译完成!共处理 $(ls $INPUT_DIR/*.txt | wc -l) 个文件"
#!/bin/bash
# code_review.sh — 自动审查 Git 提交的修改文件
MODEL="codepal" # 使用第3章创建的编程助手
# 获取最新提交修改的 Python 文件
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD | grep '\.py$')
if [ -z "$CHANGED_FILES" ]; then
echo "没有 Python 文件变更"
exit 0
fi
for file in $CHANGED_FILES; do
echo "======================================"
echo "审查文件:$file"
echo "======================================"
DIFF=$(git diff HEAD~1 HEAD -- "$file")
PROMPT="以下是代码变更的 diff,请简要审查:
1. 潜在的 Bug 或错误
2. 性能问题
3. 不符合 PEP8 的代码风格
\`\`\`diff
${DIFF}
\`\`\`
只列出发现的问题,没有问题就说'代码看起来没有明显问题':"
echo "$PROMPT" | ollama run "$MODEL"
echo ""
done
会话上下文管理
在交互模式中,Ollama 会自动维护对话历史(多轮上下文),但有一些重要细节需要了解:
# 默认情况:Ollama 会话保持上下文(多轮对话)
>>> 我叫小明,我想学 Python
>>> 你好小明!Python 是一门...
>>> 我应该从哪里开始?
>>> (模型记得你叫小明,会说"小明,建议你从...")
# 上下文长度受 num_ctx 参数限制
# 当对话超出 num_ctx token 限制时,会自动截断最旧的内容
# 通过 /set parameter num_ctx 增大上下文(需要更多内存)
>>> /set parameter num_ctx 32768
# 清除上下文(开始新话题时)
>>> /clear
# 保存当前会话状态(包含所有上下文)
>>> /save work-session-20250409
# 下次恢复该会话(继续之前的对话)
ollama run llama3.2
>>> /load work-session-20250409
>>> 继续我们刚才讨论的 Python 异步编程话题
# 非交互模式默认无上下文(每次独立请求)
# 若需要在脚本中保持上下文,使用 REST API 的 /api/chat 接口(见第5章)
高效 CLI 工作流技巧
在
~/.bashrc 或 ~/.zshrc 中添加常用别名:
alias ask='ollama run qwen2.5:7b',之后用 ask "问题" 即可快速查询。还可以创建函数 codehelp() { cat "$1" | ollama run codepal "审查此文件"; },然后用 codehelp main.py 一键审查代码。
非交互模式的编码问题
在 Linux/macOS 系统中,如果输入含中文,确保终端和脚本使用 UTF-8 编码(
export LANG=en_US.UTF-8)。在 Windows 中使用管道时,可能需要 chcp 65001 切换到 UTF-8 代码页,否则中文会乱码。
本章小结
CLI 深度使用要点:交互模式用
/set parameter 临时调参,/save//load 保存恢复会话;非交互模式(echo/cat + 管道)是自动化的基础;批量处理脚本可实现翻译、代码审查、文档生成等工作流。下一章深入 REST API,解锁更强大的集成能力。