Ollama: CLI基本操作
CLIはローカルの大規模言語モデルと対話するための直接チャンネル——質問を入力してEnterキーを押せば回答が得られ、コードは不要です。
💡 ヒント: 初めて特定のモデルで
ollama runを使用すると、Ollamaは推論を開始する前にリモートリポジトリからモデルファイル(2GB〜40GB以上)を自動的にダウンロードします。同じモデルの以降の実行はローカルファイルから直接読み込まれ、再ダウンロードは不要です。事前にモデルをプルしておくことをお勧めします:ollama pull <model>。
📋 前提条件: まず以下を修了してください
- レッスン2:Ollamaのインストールと環境設定
1. 学べること
- シングルショットと対話型ダイアログモード
- マルチターン会話とスラッシュコマンド
- システムプロンプトのロール設定
- シェルスクリプトとのパイプラインとリダイレクト統合
- AliceのSQL生成の実践シナリオ
2. SaaS創業者でのリアルな事例
(1) ペインポイント:手作業でのSQL作成が遅すぎる
AliceはGlobalShopというECプラットフォームを立ち上げ、毎日数十の複雑なSQLクエリを書いてビジネスデータを分析しています。製品要件からSQL文まで平均15分かかり、JOIN条件のミスも頻発します。自然言語をSQLに素早く変換するツールが必要です。
(2) ソリューション:CLIで数秒でSQL生成
Ollama CLIとシステムプロンプトを使い、Aliceは「先月のアクティブユーザー数を照会」と入力するだけで3秒で完全なSQLが得られます:
BASH
ollama run llama3.2 "Write a SQL query to count active users last month"
3. ollama runコマンドの詳細
ℹ️ 注意: このコースの例は実際の機能デモに焦点を当てています。CLIコマンドの構文、パラメータの意味、対話モードの使用法に集中してください。
(1) 2つの実行モード
| モード | コマンド | 動作 |
|---|---|---|
| シングルショットモード | 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...
(2) ▶ サンプル:シングルショットと対話モード
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) 主なrunパラメータ
| パラメータ | 目的 | 例 |
|---|---|---|
--verbose |
推論時間と速度を表示 | ollama run --verbose llama3.2 "Hello" |
--system |
システムプロンプトを設定 | ollama run --system "Reply in JSON" llama3.2 "List colors" |
--prompt-template |
カスタムプロンプトテンプレート | ollama run --prompt-template "Q: {{.Prompt}}\nA:" llama3.2 "What is AI?" |
(4) ▶ サンプル:パラメータ付き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 |
システムプロンプトを設定 |
/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
# Command executed successfully
5. システムプロンプトとプロンプトエンジニアリングの基礎
💡 ヒント: システムプロンプトはモデルの動作を制御する最も効果的な方法です。明確なシステムプロンプトは「汎用アシスタント」を「専門ツール」に変えます——具体的であるほど良いです。「あなたはPostgreSQLの専門家です。SQLのみ出力してください」は「あなたはアシスタントです」より10倍効果的です。
(1) システムプロンプトの役割
システムプロンプトは会話開始前にモデルのロール、ルール、出力形式を設定します:
graph TB
SP[System Prompt<br/>Role + Rules + Format] --> C[Conversation Context]
U[User Message] --> C
C --> M[Model Response]
M --> C
| ロール | システムプロンプト例 | 効果 |
|---|---|---|
| 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." | コードの問題に焦点 |
(2) ▶ サンプル: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. パイプラインとシェル統合
ℹ️ 情報: パイプラインモードでは、
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 . |
後処理 |
(2) ▶ サンプル:シェルスクリプト統合
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 長いシステムプロンプトはパフォーマンスに影響しますか?
A はい。システムプロンプトはコンテキストウィンドウ(デフォルト2048トークン)にカウントされ、長すぎると利用可能な会話スペースが減少します。200トークン以下に保つことをお勧めします。
Q CLIで他の言語で質問するには?
A そのまま使用している言語で入力してください。llama3.2やqwen2などのモデルは複数言語をサポートしています。最適な日本語体験には
ollama run qwen2をお勧めします。📖 まとめ
ollama runはシングルショットと対話モードの両方をサポート——最もよく使われるコマンドollama chatはロール区別とスラッシュコマンドを持つ構造化マルチターンダイアログを提供- システムプロンプトはモデルのロールとルールを設定し、出力形式を制御
- CLIはUnixパイプラインと統合し、スクリプト化されたAIワークフローを実現
- temperatureパラメータは出力のランダム性を制御、低い値ほど安定
- AliceはCLI + システムプロンプトでSQL作成時間を15分から3秒に短縮
📝 練習問題
- 基本(難易度 ⭐):
ollama runを使用して3ターン以上の対話を行い、/set systemと/clearコマンドを試してください。 - 中級(難易度 ⭐⭐):システムプロンプトで「コードレビューアシスタント」を作成し、コードスニペットをレビューに提出して、ロール設定が出力にどう影響するか観察してください。
- 上級(難易度 ⭐⭐⭐):ファイルから要件リストを読み込み、バッチでSQLを生成してファイルに出力するシェルスクリプトを作成してください。エラーハンドリングとタイムアウト機能を含めてください。