目录

Ollama Python 教程:使用 ollama 包与 OpenAI SDK

安装

pip install ollama

请先确认 Ollama 服务正在运行,并已下载要使用的模型(例如 ollama pull qwen3:8b)。

基本对话

from ollama import chat

response = chat(
    model="qwen3:8b",
    messages=[
        {"role": "system", "content": "请用简体中文回答。"},
        {"role": "user", "content": "用三点说明什么是机器学习。"},
    ],
)

print(response.message.content)

也可以像读取字典一样读取响应对象:response["message"]["content"]。

流式输出

让文本在生成时逐步显示:

from ollama import chat

stream = chat(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "写一段 100 字的自我介绍示例"}],
    stream=True,
)

for chunk in stream:
    print(chunk.message.content, end="", flush=True)
print()

多轮对话:创建一个终端聊天程序

模型不会自动记住历史记录,你需要将每一轮消息都保存在列表中:

from ollama import chat

messages = [{"role": "system", "content": "你是一位亲切的助手,请用简体中文回答。"}]

while True:
    user_input = input("你:").strip()
    if user_input in {"exit", "quit", "退出"}:
        break
    messages.append({"role": "user", "content": user_input})

    reply = ""
    print("AI:", end="", flush=True)
    for chunk in chat(model="qwen3:8b", messages=messages, stream=True):
        piece = chunk.message.content
        reply += piece
        print(piece, end="", flush=True)
    print()

    messages.append({"role": "assistant", "content": reply})

对话越长,发送的内容越多,最后可能超过上下文长度。实际使用时,可以只保留最近几轮,或将较早的对话总结起来。

参数与思考模式

response = chat(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "1 到 100 的总和是多少?"}],
    options={"temperature": 0.2, "num_ctx": 8192},
    think=True,
    keep_alive="30m",
)

print("思考:", response.message.thinking)
print("回答:", response.message.content)

读取图片

response = chat(
    model="gemma3",
    messages=[{
        "role": "user",
        "content": "这张图片里有什么?",
        "images": ["./photo.jpg"],   # 也可以传入 bytes 或 base64 字符串
    }],
)
print(response.message.content)

其他功能

import ollama

ollama.generate(model="qwen3:8b", prompt="用一句话介绍台北")  # 单次生成
ollama.list()                                               # 已下载的模型
ollama.ps()                                                 # 已加载的模型
ollama.pull("nomic-embed-text")                             # 下载模型
ollama.show("qwen3:8b")                                     # 模型信息
ollama.embed(model="nomic-embed-text", input="你好")         # 文本嵌入

连接到其他主机

from ollama import Client

client = Client(host="http://192.168.1.50:11434")
response = client.chat(model="qwen3:8b", messages=[{"role": "user", "content": "你好"}])
print(response.message.content)

也可以设置环境变量 OLLAMA_HOST,默认的 chat() 函数就会使用它。

异步调用

在 FastAPI 等异步框架中使用:

import asyncio
from ollama import AsyncClient


async def main():
    client = AsyncClient()
    response = await client.chat(
        model="qwen3:8b",
        messages=[{"role": "user", "content": "你好"}],
    )
    print(response.message.content)


asyncio.run(main())

错误处理

import ollama

try:
    ollama.chat(model="not-exist", messages=[{"role": "user", "content": "hi"}])
except ollama.ResponseError as e:
    print("错误:", e.error, e.status_code)
    if e.status_code == 404:
        print("模型不存在,请先 ollama pull")
except ConnectionError:
    print("无法连接到 Ollama,请确认服务正在运行")

改用 OpenAI Python SDK

如果你的程序原本使用 OpenAI SDK,只需修改 base_url:

pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",  # 必须填写,但 Ollama 不会检查
)

completion = client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "你好,请自我介绍"}],
)
print(completion.choices[0].message.content)

这样,同一份程序就可以在本地模型和云端 API 之间切换,LangChain、LlamaIndex 等框架也可以用同样的方式接入 Ollama。

下一节介绍 JavaScript / Node.js 的用法。

更新于 2026年10月12日