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

 更新时间:2026年03月06日 08:54:39   作者:大尚来也  
Ollama 是一个开源工具,允许开发者在本地轻松运行主流大语言模型,这篇文章主要介绍了Python调用Ollama本地大模型API的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

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

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

一、前提准备

安装并启动 Ollama

1.官网下载安装

2.安装后,在终端运行:

ollama run llama3  # 或 mistral、gemma、qwen 等

3.首次运行会自动下载模型(需联网),之后即可离线使用。

重要: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 pull 或 run 下载的(如 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"], end="", flush=True)
    print()  # 换行

注意:流式响应返回的是 JSON Lines(每行一个 JSON 对象),需逐行解析。

七、总结

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

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

核心优势

  • 无需联网
  • 支持多种开源模型
  • API 简洁易用
  • 完全免费 & 开源

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

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

到此这篇关于Python调用Ollama本地大模型API的完全指南的文章就介绍到这了,更多相关Python调用Ollama API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例

    PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例

    今天小编就为大家分享一篇关于PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • OpenCV半小时掌握基本操作之图像处理

    OpenCV半小时掌握基本操作之图像处理

    这篇文章主要介绍了OpenCV基本操作之图像处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python黑魔法库安装及操作字典示例详解

    Python黑魔法库安装及操作字典示例详解

    这篇文章主要为大家介绍了Python中黑魔法库的安装及操作字典的示例详解,有需要的 朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • Python函数参数分类使用与新特性详细分析讲解

    Python函数参数分类使用与新特性详细分析讲解

    在声明函数的时候,一般会根据函数所要实现的功能来决定函数是否需要参数。在多数情况下,我们声明的函数都会使用到参数,这篇文章主要介绍了Python函数参数
    2023-01-01
  • python用selenium打开浏览器后秒关闭浏览器的解决办法

    python用selenium打开浏览器后秒关闭浏览器的解决办法

    最近朋友在学Selenium的时候遇到一个问题,当执行完selenium程序后,浏览器会闪退也就是自动关闭,这篇文章主要给大家介绍了关于python用selenium打开浏览器后秒关闭浏览器的解决办法,需要的朋友可以参考下
    2023-07-07
  • python正则实现计算器功能

    python正则实现计算器功能

    这篇文章主要为大家详细介绍了python正则实现计算器功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python实现ID3决策树算法

    python实现ID3决策树算法

    这篇文章主要为大家详细介绍了python实现ID3决策树算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Python多线程操作之互斥锁、递归锁、信号量、事件实例详解

    Python多线程操作之互斥锁、递归锁、信号量、事件实例详解

    这篇文章主要介绍了Python多线程操作之互斥锁、递归锁、信号量、事件,结合实例形式详细分析了Python多线程操作互斥锁、递归锁、信号量、事件相关概念、原理、用法与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • python+selenium对table表和分页处理

    python+selenium对table表和分页处理

    这篇文章主要介绍了python+selenium对table表和分页处理,文章内容只要包括bulabula2022、table表分页处理、网页table所有内容循环处理等相关内容,需要的小伙伴可以参考一下
    2022-01-01
  • 实现Python3数组旋转的3种算法实例

    实现Python3数组旋转的3种算法实例

    在本篇文章里小编给大家整理的是一篇关于实现Python3数组旋转的3种算法实例内容,需要的朋友们可以学习参考下。
    2020-09-09

最新评论