别再只玩聊天界面了——Ollama REST API 编程实战:把本地大模型变成你的自动化引擎

有了 Ollama,大多数人装完就停在了 O…

有了 Ollama,大多数人装完就停在了 Open WebUI 的聊天界面上——每天打开浏览器,敲几个问题,截个图发朋友圈,然后就没了。

但 Ollama 真正的价值不在聊天界面,在它背后那个安静跑在 11434 端口的 REST API。一旦你学会直接调用它,本地大模型就从一个”玩具聊天机器人”变成了可以嵌入脚本、自动化流程、甚至作为微服务后端跑在你内网里的生产力引擎。

这篇文章就带你从零开始,用最直白的方式把 Ollama API 用起来。不讲虚的,每个例子都可以直接复制运行。

一、Ollama API 基础:比你想的简单

Ollama 启动后,默认在 http://localhost:11434 暴露一组 REST API。你不需要 SDK,不需要鉴权,一个 curl 就能开工。

核心就两个 endpoint:

  • /api/generate —— 发送 prompt,获取回复(一次性)
  • /api/chat —— 发送多轮对话消息(兼容 OpenAI 格式)

先来个最简单的测试:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:4b",
  "prompt": "用一句话解释什么是REST API",
  "stream": false
}'

返回的 JSON 里,response 字段就是你想要的答案。注意 stream: false ——如果不加这个,Ollama 默认用 SSE(Server-Sent Events)流式返回,一行一个 JSON 片段,适合打字机效果但不适合脚本处理。

还有个常用参数 temperature(0~2),控制生成内容的随机性。写代码建议 0.1-0.3,写文案建议 0.7-0.9。

二、实战一:Python 调用 Ollama,构建你自己的代码审查脚本

先看一个完整的 Python 脚本,功能是把某个目录下的所有 Python 文件发给大模型做代码审查,输出 Markdown 报告:

import os
import json
import requests

OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL = "qwen3:14b"  # 代码审查用大一点的模型

def review_file(filepath):
    with open(filepath, "r") as f:
        code = f.read()

    prompt = f"""你是一个资深 Python 代码审查专家。请审查以下代码,按以下维度给出建议:
1. 潜在的 bug 或逻辑错误
2. 安全和性能问题
3. 可读性和 Python 最佳实践

只输出有问题的地方,如果代码没问题就说"代码质量良好,未发现明显问题"。

代码文件:{filepath}
---
{code}"""

    resp = requests.post(OLLAMA_URL, json={
        "model": MODEL,
        "prompt": prompt,
        "stream": False,
        "temperature": 0.1
    })
    return resp.json()["response"]

# 遍历目录
report = []
for root, dirs, files in os.walk("./my_project"):
    for fname in files:
        if fname.endswith(".py"):
            path = os.path.join(root, fname)
            print(f"审查中: {path}")
            result = review_file(path)
            report.append(f"## {path}\n\n{result}\n\n---\n")

with open("code_review_report.md", "w") as f:
    f.write("\n".join(report))
print("审查完成,报告已保存到 code_review_report.md")

这个脚本 50 行不到,但实用性拉满。你完全可以把 prompt 里的审查标准换成你团队的编码规范,一次批量检查整个项目。

三、实战二:流式输出,做一个终端里的 AI 聊天工具

流式输出(streaming)的关键是逐行解析 JSON。以下是一个极简终端聊天客户端:

import requests
import json

OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL = "qwen3:4b"

def chat(prompt):
    resp = requests.post(OLLAMA_URL, json={
        "model": MODEL,
        "prompt": prompt,
        "stream": True
    }, stream=True)

    for line in resp.iter_lines():
        if line:
            data = json.loads(line)
            print(data["response"], end="", flush=True)
            if data.get("done"):
                print()
                break

if __name__ == "__main__":
    while True:
        user_input = input("\n你: ")
        if user_input.lower() in ("exit", "quit"):
            break
        print("AI: ", end="", flush=True)
        chat(user_input)

跑起来效果就是一个终端里的 AI 对话。没有前端依赖,没有 Docker,裸 Python 就能跑。写完这个我才意识到:大部分”AI 应用”本质就是几十行 HTTP 调用,剩下的全是产品包装

四、实战三:curl 一行命令の妙用

有时候你不需要写 Python 脚本,只想在终端里快速用一下 AI。这些一行命令可以收藏:

1. 解释一段 Shell 命令:

echo '解释这条命令:find . -name "*.log" -mtime +7 -exec gzip {} \;' | \
  curl -s http://localhost:11434/api/generate -d @- | jq -r '.response'

2. 快速翻译:

curl -s http://localhost:11434/api/generate -d '{
  "model": "qwen3:4b",
  "prompt": "把以下内容翻译成英文,只输出译文:本地大模型正在改变开发者构建应用的方式",
  "stream": false
}' | jq -r '.response'

3. 用 jq 只提取答案(忽略 token 统计等元数据):

curl -s http://localhost:11434/api/generate \
  -d '{"model":"qwen3:4b","prompt":"写一段Python快排","stream":false}' \
  | jq -r '.response'

jq -r '.response' 这个小技巧能让你在任何 Shell 脚本里把 Ollama 当函数调用。

五、实战四:构建一个翻译微服务(Flask + Ollama)

如果你的内网有多台机器,完全可以把 Ollama 包装成一个翻译微服务,其他设备通过 HTTP 调用:

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)
OLLAMA_URL = "http://localhost:11434/api/generate"

@app.route("/translate", methods=["POST"])
def translate():
    data = request.json
    text = data.get("text", "")
    target_lang = data.get("target", "中文")

    prompt = f"将以下内容翻译为{target_lang},只输出译文:\n{text}"

    resp = requests.post(OLLAMA_URL, json={
        "model": "qwen3:4b",
        "prompt": prompt,
        "stream": False
    })

    return jsonify({
        "translation": resp.json()["response"].strip()
    })

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

内网其他机器直接 curl -X POST http://你的Ollama机器IP:5000/translate -H "Content-Type: application/json" -d '{"text":"Hello World","target":"中文"}' 就能用上。

更进一步,你可以用 Nginx 做反向代理加鉴权、用 systemd 做守护进程、用 Docker Compose 打包部署——这就把一个本地玩具变成了生产可用的内部服务。

六、踩坑记录和性能建议

写了这么多 API 调用脚本,我也踩了几个坑,一并分享:

  • 并发限制:Ollama 默认同时只处理一个请求。如果你在一个脚本里循环发请求,第二个请求会排队等到第一个完成。解决办法是用 OLLAMA_NUM_PARALLEL=4 环境变量提升并发数,但要注意显存——每个并发请求都会占用一份模型显存。
  • 超时设置:大模型生成可能很慢(尤其用 CPU 推理时),Python 的 requests 默认没有超时。一定要加 requests.post(..., timeout=300),否则脚本可能永远卡住。
  • /api/chat vs /api/generate:如果要做多轮对话,用 /api/chat,消息格式是 [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]。这和 OpenAI 的格式几乎一模一样,方便你后面换到云端 API。
  • 模型预热:Ollama 首次加载模型需要几秒到几十秒。可以用 curl http://localhost:11434/api/generate -d '{"model":"qwen3:4b","keep_alive":-1}' 让模型常驻内存,后续调用几乎零延迟。 keep_alive: -1 表示永不卸载。
  • 结构化输出:如果你想让模型返回 JSON 而不是自然语言,在 prompt 里明确说”请以 JSON 格式返回”,并给出字段示例。2024 年以后的模型对 JSON 输出支持已经很好了。

七、总结:从”玩”到”用”的一步之遥

Ollama 的 API 设计得非常克制——没有复杂的鉴权机制,没有 SDK 依赖,就是纯 HTTP + JSON。这种极简设计反而让它成了本地 AI 开发的最佳入口:你可以用任何语言、任何框架、任何环境调用它,不需要学习新的抽象层。

我个人的实践是:

  • 日常写代码时,终端里 alias 了一个 ai 命令,其实就是 curl Ollama 的一行封装
  • 项目里的 pre-commit hook 用 Ollama 做代码风格检查
  • 内网跑了一个翻译微服务,全家设备都能用
  • 自动化脚本里用 Ollama 做日志分析摘要,每天凌晨跑一次发邮件

这些场景没有一个是”打开聊天界面打字”能覆盖的。本地大模型真正的价值,是作为你整个工具链里一个随时可用的推理后端。

下一步?你可以试试:把 Ollama 接到 Telegram Bot、用 LangChain 做 RAG 检索增强、或者像我一样用 Tauri 写个本地桌面工具。API 通了之后,想象力是唯一的限制。

所有代码都在本地跑,零成本,零隐私泄露——这才是自部署 AI 的正确打开方式。

—— IT大叔,2026年8月

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注