Python 调用 Ollama 本地大模型 API 完全指南

Python 调用 Ollama 本地大模型 API 完全指南

Python 调用 Ollama 本地大模型 API 完全指南

Ollama 是一个开源工具,允许开发者在本地轻松运行 Llama、Mistral、Gemma 等主流大语言模型(LLM)。它不仅提供命令行交互,还内置了 HTTP API 服务,使得我们可以通过 Python 等编程语言远程调用本地模型,实现私有化、低延迟、无网络依赖的 AI 应用开发。

本文将手把手教你如何在 Python 中通过 HTTP 请求调用 Ollama 的 API,完成文本生成、对话交互等任务。


一、前提准备

1. 安装并启动 Ollama

  • 官网下载安装:https://ollama.com/
  • 首次运行会自动下载模型(需联网),之后即可离线使用。

安装后,在终端运行:

ollama run llama3 # 或 mistral、gemma、qwen 等 
重要:Ollama 默认启动一个本地 HTTP 服务(http://localhost:11434),即使你只运行 ollama run,API 也会在后台可用。

二、Ollama API 简介

Ollama 提供了简洁的 RESTful API,核心接口为:

  • POST /api/generate:用于单轮文本生成(非对话)
  • POST /api/chat:用于多轮对话(推荐用于聊天场景)

本文以 /api/chat 为主,更贴近实际应用。


三、Python 调用示例(使用 requests)

首先安装依赖(如未安装):

pip install requests 

示例 1:基础对话(单轮)

import requests import json def chat_with_ollama(prompt: str, model: str = "llama3") -> str: url = "http://localhost:11434/api/chat" payload = { "model": model, "messages": [{"role": "user", "content": prompt}], "stream": False # 关闭流式响应,获取完整结果 } response = requests.post(url, json=payload) if response.status_code == 200: result = response.json() return result["message"]["content"] else: raise Exception(f"请求失败: {response.text}") # 使用示例 answer = chat_with_ollama("你好!你能介绍一下自己吗?") print(answer) 

示例 2:多轮对话(带上下文)

def multi_turn_chat(): messages = [] model = "mistral" # 可替换为你本地已安装的模型 while True: user_input = input("你: ") if user_input.lower() in ["退出", "quit", "exit"]: break messages.append({"role": "user", "content": user_input}) resp = requests.post( "http://localhost:11434/api/chat", json={ "model": model, "messages": messages, "stream": False } ) if resp.ok: reply = resp.json()["message"]["content"] print(f"AI: {reply}") messages.append({"role": "assistant", "content": reply}) else: print("出错了:", resp.text) break # 启动对话 multi_turn_chat() 

四、关键参数说明

参数说明
model模型名称,必须是你本地已通过 ollama pullrun 下载的(如 llama3, qwen:7b, gemma:2b
messages对话历史,格式为 [{"role": "user/assistant", "content": "..."}]
stream是否启用流式输出。设为 True 时需逐块解析响应(适合 Web 实时展示),False 则返回完整结果
options可选,用于设置 temperature、max_tokens 等(见下文)

添加生成参数(如温度、最大长度):

payload = { "model": "llama3", "messages": [{"role": "user", "content": "写一首诗"}], "stream": False, "options": { "temperature": 0.7, "num_predict": 100, # 最大生成 token 数 "top_p": 0.9 } } 

五、常见问题排查

❌ 问题 1:Connection refused 或无法连接

  • 原因:Ollama 服务未运行
  • 解决:确保终端中已运行 ollama serve 或至少执行过一次 ollama run xxx

❌ 问题 2:model not found

  • 原因:指定的模型未下载
  • 解决:先在终端执行 ollama pull llama3(替换为你想用的模型)

❌ 问题 3:响应慢或卡住

  • 尝试关闭 stream(设为 False
  • 检查模型是否过大(如 70B 模型需高性能 GPU)

六、进阶:流式响应(Stream)

若需实时输出(如打字机效果),可启用流式模式:

def stream_chat(prompt: str, model: str = "llama3"): url = "http://localhost:11434/api/chat" payload = { "model": model, "messages": [{"role": "user", "body": prompt}], "stream": True } with requests.post(url, json=payload, stream=True) as r: for line in r.iter_lines(): if line: chunk = json.loads(line) if "message" in chunk: print(chunk["message"]["content"],, flush=True) print() # 换行 
⚠️ 注意:流式响应返回的是 JSON Lines(每行一个 JSON 对象),需逐行解析。

七、总结

通过 Ollama 的 HTTP API,Python 开发者可以:

  • 在本地安全、私有地调用大模型;
  • 构建离线 AI 应用(如智能客服、文档摘要、代码助手);
  • 无缝集成到 Flask/FastAPI/Web 应用中。

核心优势
✅ 无需联网
✅ 支持多种开源模型
✅ API 简洁易用
✅ 完全免费 & 开源

📌 提示:Ollama 还支持自定义 Modelfile 微调提示词,进一步提升模型表现。

现在,你已经掌握了在 Python 中调用 Ollama 的全部基础知识。快去试试用本地 LLM 构建你的第一个 AI 应用吧!

Could not load content